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

Transition parent when all sub-tasks are resolved for Initiative Epic Relationship

Kevin Ultsh July 30, 2020

Hi all! Trying to write a script in Adaptavist ScriptRunner to update the Initiative (advanced roadmaps fields) when all epics under it are "Closed". I created a scripted field for the Initiative-Epic Relationship called "Initiative-Epic Link". I borrowed some of the code from this article and tinkered around with it for quite a while but cannot seem to get it working. Has anyone successfully got this working or is any experienced in this type of thing? I'm still a novice at writing scripts. Thanks in advanced! 

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

def issueManager = ComponentAccessor.issueManager

def issue = issueManager.getIssueObject("DEMO-130") //issue key

log.warn "issue: "+issue

def customFieldManager = ComponentAccessor.getCustomFieldManager()

def epicInitLink = customFieldManager.getCustomFieldObjectByName("Initiative-Epic Link")

def cfFieldValue = issue.getCustomFieldValue(epicInitLink)

def parentIssue = issueManager.getIssueObject(cfFieldValue.toString()) //get parent issue object

// To shows cfFieldValue has value
log.warn "Initiative-Epic Link value: "+cfFieldValue

// the name of the action you want to move the issue to
final String actionName = "Closed"

// the name of the issue link
final String issueLinkName = "Initiative-Epic Link"

def workflow = ComponentAccessor.workflowManager.getWorkflow(issue)
def actionId = workflow.allActions.findByName(actionName)?.id
def issueLinkManager = ComponentAccessor.issueLinkManager

// Find all the linked - with the "Initiative-Epic Link" link - issues that their status is not completed
def linkedIssues = issueLinkManager
.getOutwardLinks(parentIssue.id)
.findAll { it.issueLinkType.name == issueLinkName }
*.destinationObject?.findAll { it.status.statusCategory.name != "Complete" }

// If there are still open linked issues (except the one in transition) - then do nothing
if (linkedIssues - issue) {
log.warn "Not all Epics are Closed"
}

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

issueInputParameters.setComment("This Initiative closed automatically because all the Epics in this Initiative are closed.")
issueInputParameters.setSkipScreenCheck(true)

def transitionOptions = new TransitionOptions.Builder()
.skipConditions()
.skipPermissions()
.skipValidators()
.build()

def loggedInUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser
def transitionValidationResult = issueService.validateTransition(loggedInUser, parentIssue.id, actionId, issueInputParameters, transitionOptions)
assert transitionValidationResult.isValid() : transitionValidationResult.errorCollection

def result = issueService.transition(loggedInUser, transitionValidationResult)
assert result.isValid() : result.errorCollection

0 answers

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events