Hello,
I have a very interesting issue I'm running into, and for the life of me, can't figure out why it's happening.
I have an any to all transition in a workflow that runs a scriptrunner script, the script looks at two fields, depending on the values of those fields, it will do the following:
- Go through each linked work item of work item type == 'Audit' and inward link name == 'parent of'
- it will update the summary, two custom fields, and the labels of each linked item fitting the above criteria
Afterwards it'll update the summary on the work item that invoked the transition in the first place as well as update one of the custom fields.
This works great if I have linked work items with the inward link of "parent of", but if I have another linked work item with the outward link of "child of" (same link type), the script will go through the linked items step, update those, then just not do anything further.
I've tried it with different link types with some hit & miss results, but mostly it's when it's the same link type that the issue happens.
My script is below, any and all help is greatly appreciated!
def eventIssue = Issues.getByKey(issue.key as String)
def newDeploymentPackageVersionNumber = eventIssue.getCustomFieldValue("New Deployment Package Version Number")
def deploymentPackageVersionNumber = eventIssue.getCustomFieldValue("Deployment Package Version Number")
def eventIssueOriginalSummary = eventIssue.summary
def eventIssueUpdatedSummary = eventIssueOriginalSummary.replaceAll(deploymentPackageVersionNumber, newDeploymentPackageVersionNumber)
def errors = []
logger.info("My deployment package version number is: ${deploymentPackageVersionNumber.toString()}")
logger.info("My NEW deployment package version number is: ${newDeploymentPackageVersionNumber.toString()}")
logger.info("My current summary is: ${eventIssueOriginalSummary.toString()}")
logger.info("My updated summary is: ${eventIssueUpdatedSummary.toString()}")
try {
def successStatusByIssueKey = eventIssue.getLinks().each { linkedIssue ->
if (linkedIssue.inwardIssue.fields.issuetype.name == 'Audit' && linkedIssue.type.inward == 'parent of'){
try{
def linked_issue = Issues.getByKey(linkedIssue.inwardIssue.key as String)
def originalSummary = linked_issue.summary
def updatedSummary = originalSummary.replaceAll(deploymentPackageVersionNumber, newDeploymentPackageVersionNumber)
linked_issue.update {
setSkipScreenCheck(true)
setCustomFieldValue("New Deployment Package Version Number", newDeploymentPackageVersionNumber)
setCustomFieldValue("Deployment Package Version Number", deploymentPackageVersionNumber)
setLabels("release-standard-testing-${newDeploymentPackageVersionNumber}")
setSummary(updatedSummary)
}
}
catch (Exception e) {
errors.add("The ${linkedIssue.inwardIssue.key} ${originalSummary} failed to update, the error is: ${e.message}")
return
}
}
}
}
catch (Exception e) {
errors.add("The linked ticket failed to parse, the error is: ${e.message}")
return
}
try {
eventIssue.update {
setCustomFieldValue("Deployment Package Version Number", newDeploymentPackageVersionNumber)
setSummary(eventIssueUpdatedSummary)
}
}
catch (Exception e) {
errors.add("The ICM ticket failed to update, the error is: ${e.message}")
return
}
if (!errors.isEmpty()){
eventIssue.addComment(errors.join("\n\n"))
}