Skip to main content
Skip table of contents

How to append values to multi-select fields

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.

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

Learn More

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.