Goal
This section shows the instructions to use the ScriptRunner together with Lookup Manager to append values to multi-select fields.
Pre-requisites
✔️ Create a lookup table
✔️ Lookup Table Edit permission
✔️ ScriptRunner installed
Demonstration
Instead of overwriting the existing field value, I would like to append the value to a multi-select custom field.
Step 1: Create a Lookup Table
Project Key | Product | Product Owner |
---|---|---|
ACC | Attachment Checker for Confluence | Adam |
MCHART | Multiple Filters Chart Gadgets | Bob |
ACJ | Attachment Checker for Jira | Adam |
LOOKUP | Lookup Manager | Adam |
CQL | CQL for Confluence | Adam |
Step 2: Use the lookup ScriptRunner function to search for values and append to the multi-select custom field
a) Add a ScriptRunner post function
b) Select Custom Script post-function
c) Paste the following code into the Inline script field. This script will look up the App Management Table and search the column Product Owner which matches Adam. For those matching rows, it will collate All the corresponding values in the Project Key column. Then it will append the values to Product List which is a multi-select custom field.
import com.atlassian.jira.component.ComponentAccessor import com.onresolve.scriptrunner.runner.customisers.PluginModule import com.onresolve.scriptrunner.runner.customisers.WithPlugin import com.akelesconsulting.jira.plugins.rest.LookupService @WithPlugin("com.akelesconsulting.jira.plugins.LookupManager") @PluginModule LookupService lookupService int tableId = lookupService.getTableIdByName("App Management Table") def matchingValuesArray = lookupService.lookup(tableId, "Product Owner", "Adam", "Project Key") def customFieldManager = ComponentAccessor.customFieldManager // Name of the multi-select custom field to change def customFieldName = "Product List" def cf = customFieldManager.getCustomFieldObjectByName(customFieldName) def cfValue = issue.getCustomFieldValue(cf) as ArrayList if (cfValue == null) { cfValue = new ArrayList() } def optionsManager = ComponentAccessor.getOptionsManager() def newValues = cfValue matchingValuesArray.each { val -> def option = optionsManager.getOptions(cf.getRelevantConfig(issue)).find {it.value == val.trim()} newValues += [option] } issue.setCustomFieldValue(cf, newValues)