Forums

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

Display options in Single select field based on input from Component/s field using Script Runner.

Vasanta Kumaar
Contributor
January 20, 2023

Hi All,

I am working to Display Selective options in the Single choice field based on the values selected in Component/s Field.

I tried with the below script but not working and there were no errors in the script.

I  added the script to the Components field.

 

import com.atlassian.jira.component.ComponentAccessor

import com.atlassian.jira.issue.Issue

import com.atlassian.jira.issue.IssueManager

import com.atlassian.jira.issue.CustomFieldManager

import com.atlassian.jira.issue.fields.CustomField

import com.onresolve.jira.groovy.user.FieldBehaviours

import com.atlassian.jira.issue.customfields.manager.OptionsManager

import static com.atlassian.jira.issue.IssueFieldConstants.COMPONENTS

import com.atlassian.jira.issue.*

import com.onresolve.jira.groovy.user.FieldBehaviours

import groovy.transform.BaseScript



def optionsManager = ComponentAccessor.getOptionsManager()

def customFieldManager = ComponentAccessor.getCustomFieldManager()

def comp = getFieldById("components")

def value = comp.getValue()

def category = getFieldById("customfield_20550")

def customField = customFieldManager.getCustomFieldObject(category.getFieldId())

def config = customField.getRelevantConfig(getIssueContext())

def options = optionsManager.getOptions(config)
if (value.toString() == "01 - MAILFLOW")

{

def optionsMap = options.findAll

{

it.value in ["Domains management", "System Administration"]

}.collectEntries

{

[(it.optionId.toString()): it.value]

}

category.setFieldOptions(optionsMap)

}

else if (comp.getValue() == "02 - CLASSIFY")

{

def optionsMap = options.findAll

{

it.value in ["AWS Support", "Mail Format", "Data Model", "Bug Fixing"]

}.collectEntries

{

[(it.optionId.toString()): it.value]

}

category.setFieldOptions(optionsMap)

}

 

1 answer

1 accepted

Suggest an answer

Log in or Sign up to answer
0 votes
Answer accepted
PD Sheehan
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.
January 20, 2023

I don't think you need to convert the list of options to a map.

But also, the components formfield value method will return an array of ProjectComponentImpl objects. So simply applying "toString()" on it will not give you predictable results.

This should be better:

import com.atlassian.jira.bc.project.component.ProjectComponent
import com.atlassian.jira.component.ComponentAccessor
import com.onresolve.jira.groovy.user.FieldBehaviours
import groovy.transform.BaseScript

@BaseScript FieldBehaviours fieldBehaviours

def optionsManager = ComponentAccessor.getOptionsManager()
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def comp = getFieldById("components")
def components = comp.value as List<ProjectComponent>
def category = getFieldById("customfield_20550")
def customField = customFieldManager.getCustomFieldObject(category.getFieldId())
def config = customField.getRelevantConfig(getIssueContext())
def options = optionsManager.getOptions(config)

if (components.any { it.name == "01 - MAILFLOW" }) {
def optionsMap = options.findAll {
it.value in ["Domains management", "System Administration"]
}
category.setFieldOptions(optionsMap)
} else if (components.any { it.name == "02 - CLASSIFY" }) {
def optionsMap = options.findAll {
it.value in ["AWS Support", "Mail Format", "Data Model", "Bug Fixing"]
}
category.setFieldOptions(optionsMap)
}
Vasanta Kumaar
Contributor
January 22, 2023

Hi @PD Sheehan ,

 

Thanks for the answer, I updated and checked, and it's working fine. I completely forgot the component field will return an array.

Thanks,

Vasantakumaar

TAGS
atlassian, likes for trees, atlassian community, social impact, tree planting campaign, community kudos, atlassian giving, environmental impact, sustainability, likes for good, atlassian social responsibility, community challenge

Make every click count—help us plant 50,000 trees! 🌳

Want to make your everyday Community actions directly contribute to reforestation? The Atlassian Community can achieve this goal by liking a post, attending an ACE, sending your peers kudos, and so much more!

Help us plant more trees
AUG Leaders

Atlassian Community Events