Auto Populate Multiselect custom field values based on single select list field value?

manikanta ch October 29, 2020

Hello All,

How to auto-populate Multiselect custom field values based on a single select list field value?

For Example -

We have a single select custom field Region with values EU, EAEU, and Mutliselect field with values Austria, Bulgaria, Spain, Poland.

If the user selects values called EU from the Region field it has to auto-select the following values Spain, Poland from Mutliselect field same way if user select value EAEU from Region field multi-select list field auto select to Austra and Bulgaria.

We have a script runner installed in our instance. 

Thanks in advance,

Manikanta

 

 

1 answer

1 accepted

0 votes
Answer accepted
Leo
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
November 2, 2020

Hi @manikanta ch ,

Below Behaviour snippet may give you some idea

 

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

@BaseScript FieldBehaviours fieldBehaviours

def multiSelectListName = 'MultiSelectList'
def region = getFieldByName("Region") as String

def selectField = getFieldByName(multiSelectListName)

def selectCustomField = customFieldManager.customFieldObjects.findByName(multiSelectListName)
def selectConfig = selectCustomField.getRelevantConfig(issueContext)
def selectOptions = ComponentAccessor.optionsManager.getOptions(selectConfig)

if (region == "EU") {
def defaultValue = selectAvailableOptions.findAll { it.value in ['Spain', 'Poland'] }
multiSelectListName.setFormValue(defaultValues*.optionId)
} else if (region == "EAEU") {
def defaultValues = selectAvailableOptions.findAll { it.value in ['Austra', 'Bulgaria'] }
multiSelectListName.setFormValue(defaultValues*.optionId)
}

 

Regards,

Leo

manikanta ch November 3, 2020

Thanks @Leo 

It worked with the below script

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()

final singleSelectListName = 'Region'
final multiSelectListName = 'Countries'

def subRegField = getFieldByName(singleSelectListName)
def subRegion = subRegField.getValue()

def countriesField = getFieldByName(multiSelectListName)
def customField = customFieldManager.getCustomFieldObject(countriesField.getFieldId())
def config = customField.getRelevantConfig(getIssueContext())
def options = optionsManager.getOptions(config)
def EUList = ['AUSTRIA', 'BULGARIA']
def gulfList = ['UNITED ARAB EMIRATES']
def EAList = ['REPUBLIC']
def optionsToSelect = []
if(subRegion == 'EU'){
optionsToSelect = options.findAll { it.value in EUList }
} else if(subRegion == 'GCC') {
optionsToSelect = options.findAll { it.value in gulfList }
} else if(subRegion == 'EAEU') {
optionsToSelect = options.findAll { it.value in EAEUList }
}
countriesField.setFormValue(optionsToSelect*.optionId)

Pratibha Tambakad November 16, 2022

Hello Leo,

I have the similar requirement and I used the above script but its troughing the error in the line "countriesField.setFormValue(optionsToSelect*.optionId)"

static type errors:

[Static type checking] - No such property: optionId for class: java.util.List <?>
and also, can we use the same script to implement similar requirement like Restricting the values in multiselect field based on the value selected in another multiselect fied?
If there is a solution to implement this, please let me know

Suggest an answer

Log in or Sign up to answer