import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.workflow.TransitionOptions final String actionName = "Closed" final String issueLinkName = "Epic-Story Link" def workflow = ComponentAccessor.workflowManager.getWorkflow(issue) def actionId = workflow.allActions.findByName(actionName)?.id def issueLinkManager = ComponentAccessor.issueLinkManager def epicIssue = issueLinkManager.getInwardLinks(issue.id).find { it.issueLinkType.name == issueLinkName }?.sourceObject if (!epicIssue) { return } def linkedIssues = issueLinkManager .getOutwardLinks(epicIssue.id) .findAll { it.issueLinkType.name == issueLinkName } *.destinationObject?.findAll { it.status.statusCategory.name != "Complete" } if (linkedIssues - issue) { return } def issueService = ComponentAccessor.issueService def issueInputParameters = issueService.newIssueInputParameters() issueInputParameters.setComment("This Epic closed automatically because all the issues in this Epic are closed.") issueInputParameters.setSkipScreenCheck(true) def transitionOptions = new TransitionOptions.Builder() .skipConditions() .skipPermissions() .skipValidators() .build() def loggedInUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser def transitionValidationResult = issueService.validateTransition(loggedInUser, epicIssue.id, actionId, issueInputParameters, transitionOptions) assert transitionValidationResult.isValid() : transitionValidationResult.errorCollection def result = issueService.transition(loggedInUser, transitionValidationResult) assert result.isValid() : result.errorCollection
Overview
Content Tools