Set environment custom field based on other fields
Using a https://docs.adaptavist.com/sr4js/latest/features/listeners , it is easy to update Environment Custom Fields .
In this example, we automatically select the target Environment in our Change Requests (Jira issues), depending on the type of change defined in the "Promotion Path" field (Production Fix, Change Request, Enhancement).
For that, we have created a ScriptRunner Listener:

ScriptRunner Listener
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
def customFieldManager = ComponentAccessor.customFieldManager
def issue = event.issue
final environmentCustomFieldName = 'Environment(s)'
def environmentCustomField = customFieldManager.getCustomFieldObjects(issue).findByName(environmentCustomFieldName)
assert environmentCustomField : "Could not find custom field with name $environmentCustomFieldName"
final triggerCustomFieldName = 'Promotion Path'
def triggerCustomField = customFieldManager.getCustomFieldObjects(issue).findByName(triggerCustomFieldName)
assert triggerCustomField : "Could not find custom field with name $triggerCustomFieldName"
if (issue.getCustomFieldValue(triggerCustomField).toString() == "Enhancement") {
def customFieldType = environmentCustomField.getCustomFieldType()
def environment1 = customFieldType.getSingularObjectFromString("58") // eCommerce DEV1
def environment2 = customFieldType.getSingularObjectFromString("467") // eCommerce Test
def environmentList = [environment1, environment2]
environmentCustomField.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(environmentCustomField), environmentList), new DefaultIssueChangeHolder())
}