Are you in the loop? Keep up with the latest by making sure you're subscribed to Community Announcements. Just click Watch and select Articles.

Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

Earn badges and make progress

You're on your way to the next level! Join the Kudos program to earn points and save your progress.

Deleted user Avatar
Deleted user

Level 1: Seed

25 / 150 points

Next: Root


1 badge earned


Participate in fun challenges

Challenges come and go, but your rewards stay with you. Do more to earn more!


Gift kudos to your peers

What goes around comes around! Share the love by gifting kudos to your peers.


Rise up in the ranks

Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!


ScriptRunner post-function update linked issue status and add comment


I'm want to use a post-function with ScriptRunner to update the status and add a comment into the linked issue that is in an other projet.

So I have issue SUP-100 that was cloned (with exocet) into projet DEV and are linked together. my SUP task is in pending for the work to be completed in DEV. When they complete this issue I want it to trigger a post function to transistion the linked task into open status.

I've looked into other ways and I found this previous post here.

I've took the script and change what I really needed it to do but when it run (no error) nothing is happening to my other issue. 

Here my script

import com.atlassian.jira.component.ComponentAccessor
def issueService = ComponentAccessor.getIssueService()
def linkType = ["Escalated"]
// 6.x validateTransition wants a User, so we have to use getDirectoryUser()
// 7.x validateTransition wants an ApplicationUser, so remove the .getDirectoryUser() after we upgrade
def user = ComponentAccessor.getUserManager().getUserByName("jirabot").getDirectoryUser()
def linkMgr = ComponentAccessor.getIssueLinkManager()
// Look through the outward links
for (IssueLink link in linkMgr.getOutwardLinks( {
def destIssue = link.getDestinationObject()
// Prepare our input for the transition
def issueInputParameters = issueService.newIssueInputParameters()
issueInputParameters.with {
setComment("Linked task was completed, hence status changed to open")
// Validate transitioning the linked issue to "Signs Needed"
def validationResult = issueService.validateTransition(user,, 41, issueInputParameters)
if (validationResult.isValid()) {
// Perform the transition
def issueResult = issueService.transition(user, validationResult)
if (! issueResult.isValid()) {
log.warn("Failed to transition task ${destIssue.key}, errors: ${issueResult.errorCollection}")
} else {
log.warn("Could not transition task ${destIssue.key}, errors: ${validationResult.errorCollection}")


I'm open to use other methode if it get the status updated so I can get this automated.

I'm not an expert in javascript but I'm trying to learn more about it so I can automate more within our Jira projet.

Thank you in advance

My current version of Jira is  7.6.1

2 answers

@Martin LALONDE 

Here is code if you have questions dm me.

import com.atlassian.jira.user.util.UserManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.workflow.TransitionOptions
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.bc.issue.comment.CommentService
import org.apache.log4j.Logger
import org.apache.log4j.Level

def issueManager = ComponentAccessor.getIssueManager()
def commentManager = ComponentAccessor.getCommentManager()
def issueLinkManager = ComponentAccessor.issueLinkManager

//Go into workflow where you want to transition issue and put the name of your transition that is before your STATUS in which you want to transition your issue
final actionName = 'Corrections Needed'
// Logger
def myLog = Logger.getLogger("com.onresolve.jira.groovy")

// Put the name of user that will triger the transition
def user1 = ComponentAccessor.getUserManager().getUserByName("jirabot")
List<String> linkTypes = ["Escalated"] // anem of your linked type
Issue devIssue

// Insted of SCR put the key of your own project in which you will look for linked issues
List allOutIssueLink = issueLinkManager.getOutwardLinks(
for (Iterator outIterator = allOutIssueLink.iterator(); outIterator.hasNext();) {
IssueLink issueLink = (IssueLink);
if (issueLink.getDestinationObject().key.contains('SCR')) {
devIssue = issueLink.getDestinationObject()
def myComment = "My comment"

ComponentAccessor.commentManager.create(devIssue, user1, myComment, false)

def transitionIssue = devIssue.getId()

def workflow = ComponentAccessor.workflowManager.getWorkflow(devIssue)"workflow: " +
def actionId = workflow.allActions.findByName(actionName)?.id"actionId: " + actionId)
def transitionOptions = new TransitionOptions.Builder()

def issueService = ComponentAccessor.issueService
def issueInputParameters = issueService.newIssueInputParameters()

def transitionValidationResult = issueService.validateTransition(user1, transitionIssue, actionId, issueInputParameters, transitionOptions)
assert transitionValidationResult.isValid(): transitionValidationResult.errorCollection

def result = issueService.transition(user1, transitionValidationResult)
assert result.isValid(): result.errorCollection
0 votes
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
Dec 17, 2019

It looks you updated the {destIssue} outside the loop, put it back inside the loop so it will make sure that all the links will be transitioned.

Suggest an answer

Log in or Sign up to answer
AUG Leaders

Atlassian Community Events