Can JMWE Support Transitions as a result of Post Function

Jonathan Towles June 4, 2021

I would like a successful Post Function to Transition to one status, whereas an error would transition to a different status.

 

Is this capability supported?

2 answers

2 votes
David Fischer
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
June 4, 2021

Hi @Jonathan Towles 

since you want to trigger one transition if the REST call succeeds, and another transition if the REST call fails, the easiest is to use a single Transition Issue(s) post function and use a calculated transition, based on the result of the REST call.

image.png

The Calculated Transition script is:

{% if "https://graph.microsoft.com/v1.0/groups/:groupid/members/$ref" | callRest(
verb="post",
dontFail=true,
body= { "@odata.id": ("https://graph.microsoft.com/v1.0/directoryObjects/" +userid)},
params= { "groupid":groupid},
options= {
'auth': {
'bearer': token
},
headers: {
"ConsistencyLevel": "eventual"
}
}
) | field("_statusCode") != 204
-%}
To Pending
{%- else -%}
To Done
{% endif %}

Note that  field("_statusCode") != 204 is a little fake, as in reality _statusCode will only be returned in case of an error. So basically you could just test field("_statusCode") != null

Also note the added dontFail=true parameter.

"To Pending" is the name of the transition that needs to be triggered if the REST call fails, and "To Done" is the name of the transition that needs to be triggered if the REST call succeeds. Ideally, you should replace them with transition IDs (numbers) instead of names, in case you later rename the transitions.

0 votes
Joseph Chung Yin
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
June 4, 2021

@Jonathan Towles -

What do you mean by "whereas an error would transition to a different status"?  Can you clarify and provide "Error" definition?

Are you saying that if something goes wrong in the post function call, you want a different status to be transition into?.  

Please advise.

Best, Joseph Chung Yin

Jira/JSM Functional Lead, Global Infrastructure Applications Team

Viasat Inc.

Jonathan Towles June 4, 2021

As in if the post function returns a 200 aka it was successful it transitions to done, but failures transition back to pending 

Joseph Chung Yin
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
June 4, 2021

Thanks for the update.

In this case, you will need to have multiple post-function calls (i.e. multiple "Transition Current Issue Post-function" setup) and within those calls use "condition execution" setup - One for "Done" and other one for "Pending"

2021-06-04_7-09-35.png

The key is to have a custom post function that will populate a field with the "200 aka" value prior to your ""Transition Current Issue Post-function"" calls.  So your JMWE post function for the WF transitions can detect the return value.

Hope this makes senses.

Best, Joseph

Jonathan Towles June 4, 2021

I'm not sure how I would do that if the previous post function is what returns that upon success.

 

Wouldn't you more likely build something into the initial post function with an if statement or something? An example if you have one would be really helpful as this is new to me.

Joseph Chung Yin
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
June 4, 2021

You can use JMWE "Scripted (Groovy) operation on issue" post function call to construct your IF logic to set the custom field with the returned value.  Take a look at - https://innovalog.atlassian.net/wiki/spaces/JMWE/pages/139635057/Scripted%2BGroovy%2Boperation%2Bon%2Bissue

If you are familiar Groovy, then you can even just use the post function above to conduct your issue transition... Here is an example posting on using Groovy script to transition issues - https://community.atlassian.com/t5/Jira-questions/How-to-transition-an-issue-from-a-groovy-script-in-JIRA/qaq-p/917751 

Best, Joseph

Jonathan Towles June 4, 2021

I might be confused so let me show you what I'm doing.

 

The end result is I have a Post that does this: (Adds a Member to an AD Group in Azure) Basically, once the ticket is approved, it transitions to "implementing" and the event-based action will do this callRest:

 

) | field("value") | first | field("id") %}
{{"https://graph.microsoft.com/v1.0/groups/:groupid/members/$ref" | callRest(
verb="post",
body= { "@odata.id": ("https://graph.microsoft.com/v1.0/directoryObjects/" +userid)},

params= { "groupid":groupid},
options= {
'auth': {
'bearer': token
},
headers: {
"ConsistencyLevel": "eventual"
}
}
) | dump(2)
}}

 

When you run that command it will return something like this:

HTTP/1.1 204 No Content

 

What I am trying to do is to get a transition from Implementing --> Done if the callRest returns a HTTP/1.1 204 No Content

Joseph Chung Yin
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
June 4, 2021

What process in your Jira env conducting event based the callRest.  You may need to conduct this process where event is fired and then conduct the transition via Jira REST APIs custom program.

I am not a technical developer, so I cannot provide you with Jira REST APIs programming.

Best, Joseph

Jonathan Towles June 4, 2021

I set it as an Event-Based Action and POST function within there within JMWE

Joseph Chung Yin
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
June 4, 2021

Don't know if this helps - In the JMWE Event based wiki page section - https://innovalog.atlassian.net/wiki/spaces/JMWEC/pages/2128904193/Event-based+actions#Event-to-listen-to

Passing variables within a sequence
"Using the {% setContextVar %} Nunjucks tag you can pass data from one post-function to all subsequent post-functions."


It seems you can captured the return value from a event-based action, and then it can be referenced in the sequent post function calls.  You can then reference the variable in the Condition execution in the Transition Issue Status post function.

I have not use JMWE event-based action yet, thus I cannot provide more detailed information for your ask.  You may want to submit a support request to JMWE vendor for suggestion.

I look forward to their response to your ask.

Hope this helps.

Best, Joseph

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events