It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

Post function script get value of simple selection list Edited

Hi community !

 

I am trying to set up a post-function script in Jira workflow using scriptRunner.

I made it work for multiple selection list but it is not working for simple selection list...

import com.atlassian.jira.ComponentManager;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.issue.comments.CommentManager;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.util.ImportUtils;
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.user.util.UserManager;
import com.atlassian.crowd.embedded.api.User;
import com.atlassian.jira.user.UserUtils

def String m_assignee = 'Unassigned';
def cfIssueType = issue.issueType.name;
def cfLoc = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("Supplier Location");
Map cfLocation = issue.getCustomFieldValue(cfLoc) as Map

String first = cfLocation.get(null);
switch(first){
case 'North America':
m_assignee = 'iron.man';
break;
case 'Other':
m_assignee = 'spider.man';
break;
default :
m_assignee = 'super.man';
break;
}

issue.setAssigneeId(m_assignee);

 

I will have to combine this code with some other but first, I'm trying to make this block worked.

Can anyone give support on that please?

1 answer

1 accepted

1 vote
Answer accepted

You are very close - most people with this question don't realise the value from a select list is an array of elements.  (I'm not sure it's a map, I've just used arrays and collections in the past, so I'm not qualified to comment if that could be an extra problem)

The contents of the field is a list of one, but for a select list, the elements are "options", not strings, so your "first" variable will not contain what you expect. I think you need to treat it as an option.

The code here is what I tend to "borrow" nowadays - https://library.adaptavist.com/entity/update-priority-based-on-a-custom-field

Ok, I am not a hundred percent sure about what is the real difference but at least, I made it work thanks to you ! What I don't get is why is it working like this for "Single Select List" and not for "Cascading Select List"...?

 

Here is the code :

import com.atlassian.jira.ComponentManager;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.issue.comments.CommentManager;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.util.ImportUtils;
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.user.util.UserManager;
import com.atlassian.crowd.embedded.api.User;
import com.atlassian.jira.user.UserUtils
import com.atlassian.jira.config.PriorityManager
//Line added 1
import com.atlassian.jira.issue.customfields.option.LazyLoadedOption

def String m_assignee = 'Unassigned';
def cfIssueType = issue.issueType.name;
def cfLoc = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("Supplier Location");
//Line added 2 (just added "as LazyLoadedOption")
def first = issue.getCustomFieldValue(cfLoc) as LazyLoadedOption;

switch(first){
case "North America":
m_assignee = 'iron.man';
break
case "Other":
m_assignee = 'spider.man';
break
default:
m_assignee = 'super.man';
break
}
issue.setAssigneeId(m_assignee);

 

It's about different java objects being stored, and objects in java can have very different properties and behaviours.  

For example, a text field holds a string of characters which works as you would expect.  Numeric fields hold simple numbers.  These objects are significantly different because you can't do things like multiply strings together, or put letters (other than scientific notations) into numbers.

The objects that Jira has as "options" are more complex again.  They are made up of a unique id, a display name, a type, flags to say if they are enabled or not, methods to read and update these things, and data to say what their parent option is if they are an option in the second part of a cascading-select list.

A cascading select is a single value still, but the option you get back is more complex, and you need to look at the parent as well as child option.

https://docs.atlassian.com/software/jira/docs/api/8.4.0/index.html?com/atlassian/jira/issue/customfields/option/Options.html covers the basics.

Like Arthur SALMON likes this

Suggest an answer

Log in or Sign up to answer
Community showcase
Posted in Jira

Demo Den Ep. 7: New Jira Cloud Reports

Learn how to use two new reports for next-gen projects in Jira Cloud:  Cumulative flow diagram and Sprint burndown chart. Ivan Teong, Product Manager, Jira Software, demos the Cumulative ...

260 views 1 2
Join discussion

Community Events

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

Find an event

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

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you