Forums

Articles
Create
cancel
Showing results forĀ 
Search instead forĀ 
Did you mean:Ā 

Scriptrunner post function script not fully running

Pierre Ibrahim
March 27, 2026

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"))

}

2 answers

1 accepted

Suggest an answer

Log in or Sign up to answer
0 votes
Answer accepted
Pierre Ibrahim
March 30, 2026

Found the issue!

I needed to do an "exists" check on the inwardIssue before line 15's IF. The corrected code is below:

 

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.replace(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){ // this is what was missing
            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.replace(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) {
                    logger.info("The ${linkedIssue.inwardIssue.key} ${originalSummary} failed to update, the error is: ${e.message}")
                    errors.add("The ${linkedIssue.inwardIssue.key} ${originalSummary} failed to update, the error is: ${e.message}")
                    return
                }
            }
        }
    }
}

catch (Exception e) {
    logger.info("The linked ticket failed to parse, the error is: ${e.message}")
    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) {
    logger.info("The ICM ticket failed to update, the error is: ${e.message}")
    errors.add("The ICM ticket failed to update, the error is: ${e.message}")
    return
}

if (!errors.isEmpty()){
    eventIssue.addComment(errors.join("\n\n"))
}
2 votes
Kristian Walker _Adaptavist_
Community Champion
March 27, 2026

Hi Pierre,

Can you please raise this as a request with the ScriptRunner support team here. 

The ScriptRunner support team will be able to look at examples of when this behaviour occurred and help you with this issue.


Regards,

Kristian

DEPLOYMENT TYPE
CLOUD
PRODUCT PLAN
PREMIUM
PERMISSIONS LEVEL
Product Admin
TAGS
AUG Leaders

Atlassian Community Events