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)
Hi Swapnil - you can get the transition ID by clicking on the Text link while on the workflow.
Use the below API to get the transition
You need the Issue key as an input parameter to get the transitions associated with that issue and by filtering the Issue transition name you can get the ID
https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-getTransitions
Thanks,
Pramodh
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.