...
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) {
String label = element.getValue()
String optionId = element.getOptionId().toString()
return [label: label, value: optionId]
}
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)
}
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("Issue updated successfully: ${issue.key}")
}
} catch(Exception e) {
log.error("Error updating issue ${issue.key}: ${e.message}")
}
}
}
} catch (SearchException e) {
log.error("Error executing search: ${e.message}")
} |
...