Use users set in environments to approve a Booking Request
Use Case
Imagine that we have the following situation
Our user names of our approvers are defined in an environment attribute called “Approvers” (separated by a comma when several approvers)
We use an “Approvers” multi-user select custom field in our Booking Requests to approve the transition
We would like to achieve the following:
When the requester selects an Environment in the Environment Custom Field “Environment(s) to Book”, we would like to automatically populate the “Approvers” custom field with all user names found in “Approvers” attribute of the environments to book
You can perform this by adding a Script Runner Listener or a Script Runner Post Function with following script. Example of a Listener:

Requirements
You are using Jira Data Center. If you’re using Jira Cloud, refer to the Use users set as environment attribute to approve booking requests [Add the URL of prod web site]
You have ScriptRunner installed.
You must using Golive v9.1 or higher.
Main Script GOLIVE 9.1.+
Adapt this script to use the names of attributes and custom fields that are setup in your context.
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.user.ApplicationUser
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.apwide.env.api.GoliveAccessor
import com.atlassian.jira.component.ComponentAccessor
@WithPlugin("com.holydev.env.plugin.jira-holydev-env-plugin")
@PluginModule
GoliveAccessor goliveAccessor
def environmentCustomFieldName = "Environment(s) to book"
def environmentAttributeName = "Approver(s)"
def userNameDelimiter = ","
def multiUsersPickerCustomFieldName = "Approvers"
def getUserByName(String username) {
try {
return ComponentAccessor.userManager.getUserByName(username)
}
catch (Throwable e){
return null
}
}
def assignUsers(Issue issue, String multiUsersPickerCustomFieldName, List<ApplicationUser> users) {
def loggedInUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser
def customField = ComponentAccessor.customFieldManager.getCustomFieldObjectsByName(multiUsersPickerCustomFieldName)?.find({ cf -> cf.isRelevantForIssueContext(issue) })
if (customField) {
issue.setCustomFieldValue(customField, users)
issue = ComponentAccessor.issueManager.updateIssue(loggedInUser, issue, EventDispatchOption.DO_NOT_DISPATCH, false)
}
}
def environmentsToBookField = goliveAccessor.golive().environmentFields.getByName(issue, environmentCustomFieldName)
def environmentsToBook = environmentsToBookField.getValue()
def usernames = environmentsToBook.collect {environment ->
return environment.attributes[environmentAttributeName]?.split(userNameDelimiter)
}.flatten()
List<ApplicationUser> users = usernames
.collect { username -> getUserByName(username) }
.findAll { user -> user != null }
assignUsers(issue, multiUsersPickerCustomFieldName, users)