Transition an Epic Parent when Epic Transitions to In progress - ScriptRunner

Shawn Danisa November 13, 2017

Hi All, 

I have a challenging problem.  I am trying to write a script that will transition the Feature (Parent to the Epic) when one of the linked Epics transition to In Progress.

I modified the normal JIRA hierarchy using Portfolio for JIRA. Now the hierarchy is as follows:  Feature->Epic->Story->Sub task.

Kindly assist

1 answer

3 votes
Jonny Carter
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
November 19, 2017

Scripting Jira Portfolio is always tricky since they don't have a published Java API, but through divinations and sorcery we have discovered a few things.

You should be able to add a post function to the Epic issue's workflow that automatically transitions the issue described in its Parent Link custom field. Something like this should do it:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.workflow.IssueWorkflowManager

def issueManager = ComponentAccessor.issueManager
def issueService = ComponentAccessor.issueService
def issueWorkflowManager = ComponentAccessor.getComponent(IssueWorkflowManager)
def user = ComponentAccessor.jiraAuthenticationContext.loggedInUser

def customFieldManager = ComponentAccessor.getCustomFieldManager()
def parentLink = customFieldManager.getCustomFieldObjectByName('Parent Link')

def customFieldValue = issue.getCustomFieldValue(parentLink)
def parentKey = customFieldValue.key
def parentIssue = issueManager.getIssueByCurrentKey(parentKey)
def startProgressAction = issueWorkflowManager.getAvailableActions(issue, user).find{it.name == "Start Progress"}
def inputParams = issueService.newIssueInputParameters()
def validationResult = issueService.validateTransition(user, parentIssue.id, startProgressAction.id, inputParams)
if (validationResult.valid) {
def issueResult = issueService.transition(user, validationResult)
if (issueResult.valid) {
log.debug "Successfully transitioned $parentIssue.key"
} else {
log.error("Could not transistion $parentIssue.key to in progress following $issue.key")
log.error(issueResult.errorCollection?.errorMessages)
log.error(issueResult.warningCollection?.warnings)
}
} else {
log.error("Could not transistion $parentIssue.key to in progress following $issue.key")
log.error(validationResult.errorCollection?.errorMessages)
log.error(validationResult.warningCollection?.warnings)
}

 

Suggest an answer

Log in or Sign up to answer