...
Code Block | ||
---|---|---|
| ||
import com.atlassian.jira.issue.customfields.option.LazyLoadedOption import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.fields.CustomField import com.atlassian.jira.issue.Issue import com.atlassian.jira.issue.CustomFieldManager import com.atlassian.jira.security.JiraAuthenticationContext import com.atlassian.jira.bc.issue.search.SearchService import com.atlassian.jira.issue.search.SearchException import com.atlassian.jira.web.bean.PagerFilter import groovy.json.JsonOutput import groovyx.net.http.RESTClient import groovyx.net.http.ContentType // Jira Cloud REST API base URL final String jiraCloudApiBaseUrl = "https://[YourInstance].atlassian.net" // Basic Authentication Encoded String def encodedAuthString = "your _email:token".bytes.encodeBase64().toString() // Get necessary components def issueManager = ComponentAccessor.getIssueManager() def customFieldManager = ComponentAccessor.getCustomFieldManager() def authenticationContext = ComponentAccessor.getJiraAuthenticationContext() def searchService = ComponentAccessor.getComponent(SearchService.class) // Define and find the custom field final String customFieldName = "mlcs employee" final String cloudCustomFieldId = "customfield_10101" def customField = customFieldManager.getCustomFieldObjectsByName(customFieldName)?.first() if (customField == null) { log.error "Custom field not found: $customFieldName" return } // Fetch issues def user = authenticationContext.getLoggedInUser() def query = "\"${customFieldName}\" is not EMPTY" // Parse the JQL query def parseResult = searchService.parseQuery(user, query) def transformElement(LazyLoadedOption element, int index) { String label = element.getValue() return [label: label, value: index + 1] } if (!parseResult.isValid()) { log.error "Invalid JQL Query: ${query}" return } try { def results = searchService.search(user, parseResult.getQuery(), PagerFilter.getUnlimitedFilter()) results.getResults().each { Issue issue -> List serverValue = issue.getCustomFieldValue(customField) if (serverValue) { def transformedArray = [:] // Populate the map serverValue.eachWithIndex { element, index -> transformedArray["lv$index"] = transformElement(element as LazyLoadedOption, index) } def payload = [ fields: [ (cloudCustomFieldId): JsonOutput.toJson(transformedArray) ] ] def client = new RESTClient(jiraCloudApiBaseUrl) client.setHeaders([ 'Content-Type' : ContentType.JSON, 'Authorization': "Basic $encodedAuthString" ]) try { def response = client.put( path: "/rest/api/3/issue/$issue.key", contentType: ContentType.JSON, body: payload ) if (response.status != 204) { log.error("Failed to update issue ${issue.key}: ${response.data}") } else { log.info("Successfully updated issue ${issue.key}") } } catch(Exception e) { log.error("Error updating issue ${issue.key}: ${e.message}") } } } } catch (SearchException e) { log.error("Error executing search: ${e.message}") } |
...