Scripted workflow validator - checking field context?

Alex Christensen
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
October 14, 2015

I have a workflow validator on the Create transition of one of my workflows that looks like this:

cfValues.get("Module / Subprocess")?.keySet()?.size() == 2

This field is a cascading select field and we want both dropdowns within that field to be required. As far as I know, when you make this field required in the field configuration, only the first dropdown is actually required. We need both filled out, which is the reason for the scripted validator on the Create transition.

This scripted validator works correctly - however, all of our projects use this field except ONE project, even though all projects use the same issue type on which this field applies. We only have one workflow for this issue type so we don't have to manage tons of workflows for every project, so we'd really like to avoid creating a separate workflow just to not have this validator on one project. Our team of JIRA admins isn't very big, so we try to keep everything we need to manage to a minimum as much as possible.

So, for my question - is it possible to create a scripted workflow validator that checks if this field has the current project within one of its contexts? If yes, then it will check the validator written above.

1 answer

1 accepted

0 votes
Answer accepted
Jeremy Gaudet
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
October 14, 2015

Probably, but I suspect it will be much easier to just check against the one project that doesn't have it, by name.

Alternately, you could check the count of the first half of the cascading field; since it is mandatory, it being zero/null/whatever, should be sufficient to indicate that you don't need to validate the second half.

JamieA
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
October 15, 2015

Yep, check the project key or name... issue.projectObject.key == "ABC" || what you have already

Alex Christensen
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
October 15, 2015

Hi, Jeremy and Jamie - thanks for your input. I'd like to go forward with the option to check the project key, but I can't seem to get that working. I've added the statement to what Jamie put and it looks like this now: issue.projectObject.key == "ABC" || cfValues.get("Module / Subprocess")?.keySet()?.size() == 2 We're using the correct project key in place of ABC, but it doesn't work correctly. It prevents the projects that do use this field from creating the issue (i.e. the validator returns as false). If I remove the new statement, the query works for the other projects as it did before. I also tried this variation (apologies - my groovy knowledge isn't great): issue.getProjectObject().getKey() == "ABC" || cfValues.get("Module / Subprocess")?.keySet()?.size() == 2 Anything I might be missing here? Thanks again for your help.

Jeremy Gaudet
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
October 15, 2015

It looks okay, but I've been trying to make it work here with no luck... I can't even get the basic project key check to work. It may be that the issue doesn't have a project object yet, in which case I've read of alternate ways of validating it, but maybe my other idea is simpler. If you make the field mandatory for the projects that have it, then you could use: cfValues.get("Module / Subprocess")?.keySet()?.size() == 2 || cfValues.get("Module / Subprocess")?.keySet()?.size() == 0 If we get past this validation for the 0 case, the field being mandatory will still kick in where relevant. Mind you, I'm assuming we'll get '0' if the field isn't defined, I haven't tested this one either.

Alex Christensen
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
October 15, 2015

That worked, Jeremy. One slight change - instead of "0" you have to use "null" since there is no value in the field. Thanks for your help!

Suggest an answer

Log in or Sign up to answer