Happy New Year to everyone
Could any one please guide me how to retrieve transition Id from transition name?
I want to transition a linked issue through groovy script from custom script post function:
Here is the current rough script:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.workflow.TransitionOptions
import com.atlassian.jira.issue.IssueInputParameters
import com.atlassian.jira.workflow.IssueWorkflowManager
import com.opensymphony.workflow.loader.ActionDescriptor
import com.atlassian.jira.workflow.edit.layout.display.TransitionOption
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.issue.Issue
import static P3_Constants.Status
import static P3_Constants.Transition
def issueLinkManager = ComponentAccessor.issueLinkManager
def issueManager = ComponentAccessor.issueManager
ApplicationUser loggedInUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def issueService = ComponentAccessor.issueService
IssueWorkflowManager issueWorkflowManager
IssueInputParameters issueInputParameters = issueService.newIssueInputParameters()
def movedIssues = issueLinkManager.getOutwardLinks(issue.id)
def movedIssueObjects = movedIssues.findAll {
it.issueLinkType.name == âABCâ
}.collect {
issueManager.getIssueObject(it.destinationId)
}
//def transitionOptions = new TransitionOptions.Builder().skipConditions().skipPermissions().skipValidators().build()
TransitionOptions.Builder transitionOptionsBuilder = new TransitionOptions.Builder()
transitionOptionsBuilder.skipConditions().skipPermissions().skipValidators()
TransitionOptions transitionOptions = transitionOptionsBuilder.build ()
movedIssueObjects.each {
def outerIssue = issueManager.getIssueObject(it.toString())
log.error âouterIssueââ+outerIssue
def linkedIssue = outerIssue as Issue
log.error âlinkedIssueââ+linkedIssue
if (outerIssue.status.getName() != Status.CLOSED.name) {
log.error âTransition.DISCARD.nameââ+Transition.DISCARD.name
log.error âtransitionOptionsââ+transitionOptions
ActionDescriptor issueTransition = issueWorkflowManager.getAvailableActions(linkedIssue, transitionOptions, loggedInUser).find {it.name == Transition.DISCARD.name}
log.error âissueTransition.idââ+issueTransition.id
assert issueTransition != null : âWorkflow Action ${Transition.DISCARD.name} not foundâ
issueInputParameters.setResolutionId(â10015â)
def transitionValidationResult = issueService.validateTransition(loggedInUser, outerIssue.id, issueTransition.id, issueInputParameters, transitionOptions)
if (transitionValidationResult.valid) {
def transitionResult = issueService.transition(loggedInUser, transitionValidationResult)
if (transitionResult.valid)
log.debug âTransitioned issue ${outerIssue} through action ${issueTransition.id}â
else
log.debug âTransition result is not validâ
}
else
log.debug âThe transitionValidation is not validâ
}
}
Problem: It always gives a NullPointerException for method getAvailableActions()
Below are the logs:
2022-01-05 16:33:30,073 ERROR [runner.ScriptBindingsManager]: outerIssueâXYZ-362
2022-01-05 16:33:30,074 ERROR [runner.ScriptBindingsManager]: linkedIssueâXYZ-362
2022-01-05 16:33:30,074 ERROR [runner.ScriptBindingsManager]: Transition.DISCARD.nameâDiscard
2022-01-05 16:33:30,075 ERROR [runner.ScriptBindingsManager]: transitionOptionsâcom.atlassian.jira.workflow.TransitionOptions@310b87eb
2022-01-05 16:33:30,080 ERROR [workflow.AbstractScriptWorkflowFunction]: Workflow script has failed on issue BUS-3784 for user âswapnilâ. View here: http://localhost:8080/secure/admin/workflows/ViewWorkflowTransition.jspa?workflowMode=live&workflowName=Workflow+for+Project+BUS&descriptorTab=postfunctions&workflowTransition=1&highlight=4
java.lang.NullPointerException: Cannot invoke method getAvailableActions() on null object
at P3.Script486$_run_closure3.doCall(Script486.groovy:43)
at P3.Script486.run(Script486.groovy:33)