How to find the status before the PostFunction executes

I just spent about an hour crafting a detailed message about what I need to do, but when I submitted it, I got an error and my message was wiped out.   So I'm just going to give the bare essentials here and hopefully someone can help.

I need to know what the status of an issue was before the transition post functions are executed.

I need to skip a step in the workflow under certain conditions, so I'm using the "Fast Track Transition an issue" script, which  must be placed after the fire event function.

However, by that point, the issue's original status has been changed by the "linked status of the destination workflow step", and "issue.getStatus().name" returns the new status, not the original status.

Is there a function call that I can use to access the original status?


1 answer

Can you access details of the issue prior to the change with originalIssue?(e.g. originalIssue.status?.name)

No luck.  Admittedly I'm just trying things and don't understand the difference between using the status?.name vs getStatus().name, tho in the end all of these return the status that I'm transitioning to, not the status the issue was in before the transition was initiated:

  • originalIssue.status?.name
  • issue.status?.name
  • issue.getStatus()?.name
  • originalIssue.getStatus()?.name

The only way I've found yet to get the "previous" status is by putting a post function in as the very 1st step, before the "Set issue status to the linked status of the destination workflow step."   But the Fast-track transition specifically says to put it after the "Fire Event" function, so maybe the best I can do it so store off the original Status in Step 1, and then access it in my custom script after the Fire Event?

Ah yes. That rings a bell. There are other community posts that talk about using transientVards instead. Perhaps something here helps?

I tried a bunch of things keying off that article, but they all also give me back the destination workflow. 

Just for completeness, and in case anyone searching wants to see, I tried all of the following:

def myStep = transientVars["createdStep"] as Step
def myStepId = myStep.getStepId()
def prevStatus = ComponentAccessor.getConstantsManager().getStatus(myStepId as String)

log.debug "In fast track, is " +
log.debug "In fast track, is " +

int actionId = transientVars.get("actionId")
log.debug("The current transition id is: " + actionId)

import com.atlassian.jira.component.ComponentAccessor

def workflow = ComponentAccessor.getWorkflowManager().getWorkflow(issue)
def wfd = workflow.getDescriptor()
def actionName = wfd.getAction(transientVars["actionId"] as int).getName()
log.debug("Current action name: $actionName")


And got the following debug output, where 4 is the Step for Ready To Build and 31 is the transition for Ready to Build... ;)


In fast track, is 4
The current transition id is: 31
Current action name: Ready to Build
In fast track, originalIssue.status?.name is Ready To Build

Maybe someday I'll figure out an elegant way to do it, but at this point I'm just going to store off the original status off in a variable at the beginning of the Post Function, and then compare it in the Fast Track Post Function.   

Thanks for your help!


Suggest an answer

Log in or Sign up to answer
Community showcase
Published Wednesday in Marketplace Apps

Marketplace Spotlight: Marketing apps for Confluence to keep your teams working on the same page


117 views 0 3
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you