This article shows how to synchronize Group Picker Jira custom field.
Jira provides an advanced custom field Group Picker (single group or multiple groups) which helps to choose a user group(single or multiple) in a popup picker window. You can synchronize the field values using Exalate. When syncing the group picker field Exalate checks whether the group with a certain name exists on the remote side. In case the group with such a name does not exist on the receiving side you can do the following:
- set default value
- create a group with the received group name and set the value to the custom field on the receiving side (applicable only for Jira Server)
- don't set any value and skip the sync of this field
Below you can find examples of the group picker filed(single or multiple groups) synchronization for the last option: when the group does not exist on the remote side - don't set any value.
Jira Server
Group Picker(single group) Synchronization
Source side
Outgoing sync
if (issue.customFields."Group picker custom field name"?.value instanceof Iterable) {
issue.customFields."Group picker custom field name".value = issue.customFields."Group picker custom field name".value.find()
}
replica.customFields."Group picker custom field name" = issue.customFields."Group picker custom field name"Destination side
Incoming sync
def remoteGroup = replica.customFields."Group picker custom field name"?.value?.name?.asString
if (remoteGroup) {
def gm = com.atlassian.jira.component.ComponentAccessor.groupManager
def group = gm.getGroup(remoteGroup)
if (group) {
issue.customFields."Group picker custom field name".value = [group]
}
} else {
issue.customFields."Group picker custom field name".value = null // don't sync the group picker field if a local group is not found
}Group Picker (multiple groups) Synchronization
Source side
Outgoing sync
if (issue.customFields."Group picker custom field name"?.value instanceof Iterable) {
issue.customFields."Group picker custom field name".value = issue.customFields."Group picker custom field name".value
}
replica.customFields."Group picker custom field name" = issue.customFields."Group picker custom field name"
Destination side
Incoming sync
def remoteGroups = replica.customFields."Group picker custom field name"?.value?.collect { it.name?.asString }
if (remoteGroups?.any { it != null }) {
def gm = com.atlassian.jira.component.ComponentAccessor.groupManager
def groups = remoteGroups
.collect { g -> gm.getGroup(g) }
.findAll()
issue.customFields."Group picker custom field name".value = groups
} else {
issue.customFields."Group picker custom field name".value = []
}