I've created a post function using "Set field valule to constant or Groovy expression" that sets a custom field to "issueObject.key". It works fine.
I now want to modify this post-function so that it uses conditional execution, based on the value of different custom field.
I've tried all sorts of groovy expressions, but I can't get it to work. I know the field value to test for, but nothing seems to work, regardless of the expression, e.g.
issue.get("Create New SVR?") == "11301"
issue.get("Create New SVR?") != "11301"
issueObject.get("Create New SVR?") == "11301"
issueObject.get("Create New SVR?") != "11301"
issue.cf == "11301"
issue.cf != "11301"
issueObject.cf == "11301"
issueObject.cf != "11301"
I can write expressions that work on regular fields (description, summary, etc) but I can't see how to write it for a custom field.
And all the groovy documentation I've read refers to writing groovy scripts (not simple expressions) which all start with importing different components (e.g. import com.atlassian.jira.ComponentManager; import com.atlassian.jira.issue.CustomFieldManager; import com.atlassian.jira.issue.fields.CustomField;)
Can anyone help me?
You're right - my mistake. The checkbox setting was irrelevant - I've changed it back and it still works fine. I've also put the !=null clause back in, and that works too. Bizarre.
Immediately prior to making this change I performed a reindex - perhaps it was this that got things working?
you need to use the "internal" JIRA field name. In the case of custom fields, it looks like "customfield_12345" where 12345 is the field numerical ID you can see in the URL to the Edit Field screen.
I've update the documentation for post-functions, see the note at the top of the page for details.
The value you get from issue.get("customfield_12406") depends on the custom field type. If it's a Select list field, it will be an Option object, on which you can get the String value using .getValue().
Note that the result will then be a String, so you should compare it with a String constant using the .equals() method.
issue.get("customfield_12406") != null && issue.get("customfield_12406").getValue().equalsIgnoreCase("yes")
Thanks so much, I really appreciate the help, but I've used exactly the code you provided (coincidentally it was a "yes" option in the select list I was testing for) and still nothing is happenning (regardless of whether the custom field value is "yes" or "no").
If I just leave the clause
null then the field gets set as expected.
I can't get access to the logs until our Ops guys are back in on tuesday (we're about to shut down for Easter), so will try that then. In the meantime, any more thoughts appreciated.
Thanks both for your quick and helpful responses. But unfortauntely I still can't get the condition to work. I've checked the custom field id (and the value that corresponds to the "yes" pick list item) and tried updating the condition expression to :
issue.get("customfield_12406") == "11301"
issue.get("customfield_12406") == 11301
but it still doesn't work.
I've also tried
issue.cfValues["customfield_12406"] == "11301"
issue.cfValues["customfield_12406"] == 11301
Any more ideas? I've also tried doing a re-index before this step, but that didn't make a difference.
thanks in anticipation.
So you have a Select type custom field with two possible values ('yes' and 'no')? If so, I'm not sure why it doesn't work. Can you try:
issue.get("customfield_12406") != null && issue.get("customfield_12406").getValue() == "yes"
If you are also using JIRA Misc Custom Fields (another of our plugins, but this one's free), you could create a Calculated Text Field with the following formula:
<!-- @@Formula: issue.get("customfield_12406").getValue() -->
to see what value you actually get from the field.
Thanks David, I've just tried that as well withou success. (Our value is "Yes") but otherwise the same.
I also tried negating the query and saying != "Yes" at the end, and testing both yes/no options from the drop down, without success.
We've got Misc Custom Fields, so I'll give that a try next week to see what's going on there. I can't spend any more time onthis tonight.
Thanks again for all your help.
I've added a calculated text field with the expression...
<!-- @@Formula: issue.get("customfield_12406") -->
...and it correctly mirrors "Yes" or "No" from the custom field.
I also tried the expression you suggested (below), which didn't work - the field didn't diaply, suggesting the formula was failing.
<!-- @@Formula: issue.get("customfield_12406").getValue() -->
I've now been back and change the conditional expression to the following, but still with no joy.
issue.get("customfield_12406") != null && issue.get("customfield_12406").equalsIgnoreCase("yes")
I also disable JIRA Behaviours, in case that was conflicting in some way, but it didn't make a difference.
I will hopefully get access to the logs today, and will let you know what they say.
It seems that the problem was down to the "Copy only if not set" checkbox - I had ticked this, as I didn'ty want values to be overwritten, but it seems as if it was conflicting in some way with the conditional logic below. I unticked it, and changed the condition to the following, and everything now works as expected.
Should the "Copy only if not set" checkbox be doing this?
Regardless, I'm happy!
Thanks for your help,
I'm glad it worked. But I'm surprised by your explanation, as there is no relationship (in the code) between those two options. I suspect the value would not have been set even without the condition. Probably because the destination field is never really empty (== null).
I have a similar case, in transition linked issues and i would like to add a condition based on a value of a custom field.
I tried issue.get("customfield_12406").equalsIgnoreCase("yes") since it helped MArk to solve his issue, but it didn't work with me.
Any help please ?
You can add log.error(issue.get("customfield_12406")); log.error(issue.get("customfield_12406").getValue()); and then look inside atlassian-jira.log for "innovalog". You should find log entries or type "ERROR" with the value of these expressions. This will tell you if your test is correct.
Dear @David [Innovalog] , am getting this error in the logs. java.lang.NullPointerException at com.innovalog.jmwe.plugins.functions.TransitionIssueFunction.executeFunction(TransitionIssueFunction.java:48) at com.innovalog.jmwe.plugins.functions.AbstractPreserveChangesPostFunction.execute(AbstractPreserveChangesPostFunction.java:121)
Dear @David [Innovalog] , Now after putting the below, log.error("nadim is here"); issue.get("customfield_10611").equalsIgnoreCase("Billing Adjustment"); am not getting any error in the logs. I put the post function as final post function after the creation and reindexing and fire created issue. Thanks
What am trying to do is, based on a value of a custom field A, if it has the value of A, it will create a linked issue with the status open. if it has the value of B, it will create a linked issue with the status in progress. so i put this post function in the level of the linked issue to transit directly to the in progress status when this customfield has the value of B. It is now working, please advise.
You are getting a Null Pointer Exception in your Groovy script. issue.get("customfield_12406") must be returning NULL. Also, what you are trying to do won't work, because you need to use the "Transition Issue" post-function on the newly created linked issue, not the Transition Linked Issue post-function, which would need to be used on the original ("parent") issue. And the Transition Issue function doesn't work during the Create transition. See https://innovalog.atlassian.net/browse/JMWE-271.
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!
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