Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Script runner - add all Unreleased versions in jira to multi select custom field

Michael Shechter July 4, 2018

 Hello,

I'm trying to create new Script field that will get  all Unreleased version in Jira and check if the  unreleased version excites in other custom field (the multi select field) if  not, add it.

 i used the following script. but i got  this error:

com.atlassian.jira.issue.customfields.option.LazyLoadedOption cannot be cast to java.util.Collection 

Why i'm getting this Error ? 

The Script :

package com.atlassian.jira.project.version

import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.customfields.manager.OptionsManager;
import com.atlassian.jira.issue.customfields.option.Option;
import com.atlassian.jira.issue.customfields.option.Options;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.fields.config.FieldConfig;
import com.atlassian.jira.issue.fields.config.FieldConfigScheme
import com.atlassian.jira.project.Project



def issue = ComponentAccessor.getIssueManager().getIssueObject("SMAR-903")
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def versionManager = ComponentAccessor.getVersionManager()
//Get all unreleased versions
Collection <Version> allVersions = versionManager.getAllVersionsUnreleased(true)

//Get targetField versions field
def targetField = customFieldManager.getCustomFieldObjectByName("targetField")
Options options = ComponentAccessor.getOptionsManager().getOptions(targetField.getConfigurationSchemes().listIterator().next().getOneAndOnlyConfig());
for (int i = 0; i< allVersions.size(); i++){



if(!Arrays.asList(options).toString().contains(allVersions[i].name)){


targetField.updateValue(null, issue, new ModifiedValue(null, addOptionToCustomField(targetField,allVersions[i].name)), new DefaultIssueChangeHolder())
}
}

public Option addOptionToCustomField(CustomField customField, String value) {
Option newOption = null;
if (customField != null) {
List<FieldConfigScheme> schemes = customField.getConfigurationSchemes();
if (schemes != null && !schemes.isEmpty()) {
FieldConfigScheme sc = schemes.get(0);
Map configs = sc.getConfigsByConfig();
if (configs != null && !configs.isEmpty()) {
FieldConfig config = (FieldConfig) configs.keySet().iterator().next();
OptionsManager optionsManager = ComponentAccessor.getOptionsManager();
Options l = optionsManager.getOptions(config);
int nextSequence = l.isEmpty() ? 1 : l.getRootOptions().size() + 1;
newOption = optionsManager.createOption(config, null, (long) nextSequence, value);

}
}
}

return newOption
}


Thanks.

1 answer

1 accepted

0 votes
Answer accepted
Mark Markov
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.
July 4, 2018

Hello @Michael Shechter
It's very strange code. What are you tryin to achieve?

You get all ureleased versions
Check if some options field contains this options

If not, you create Option object and try to set this Option in field that doesnt contain that option.

 And why you place this code in Scripted field?

Michael Shechter July 5, 2018

@Mark Markov

you right i change it and i removed the update value method.

and use this  in a service instead.

Thanks.  

Suggest an answer

Log in or Sign up to answer