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 = [] }