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.
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?
you right i change it and i removed the update value method.
and use this in a service instead.
Thanks.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.