Sync between Select List (single choice) and text custom field for Jira Cloud

    Exalate allows syncing any kind of custom field type combination.

    This article shows how to synchronize data between a select list and a text custom fields.

    Select-list to Text Custom Field

    For example, you have a custom field called Sports List (select list Single Choice) and you want to sync it to the custom field Sport Type (text field).

    Sending side

    Outgoing sync

    Send the select-list value to the remote side

    1 replica.customFields."Sports List"  = issue.customFields."Sports List"

    Receiving side

    Incoming sync

    replica.customFields."Sports List".value is an object of type optionThe option contains a value, which is the string of the option. 

     issue.customFields."Sport Type".value is a text type custom field, which includes string value

    1 issue.customFields."Sport Type".value = replica.customFields."Sports List".value.value

    Text Custom Field to Select-list

    The scripts below help to send the text custom field value to the destination side and add a new option to the existing select list field if there is no such option yet.

    Sending side

    Outgoing sync


    1 // SETTINGS
    2 final def textFieldCfName = "Text Custom Field Name"
    3 // END SETTINGS
    4
    5 def localOptionValue = issue.customFields[textFieldCfName]?.value
    6 if (localOptionValue == null) {
    7     throw new com.exalate.api.exception.IssueTrackerException(
    8     "Can not synchronize 
    9             `"+textFieldCfName+"` 
    10                to destination jira since there is no value set for issue 
    11            `"+ issueKey.URN +"` 
    12            ("+issueKey.id+"
    13     )"
    14   )
    15 }
    16 replica.customKeys."Text field Value" = localOptionValue


    Receiving side

    Incoming sync

    1 // SETTINGS
    2 final def nygSelectListCfName = "Select List Custom Field Name" 
    3 // END SETTINGS
    4
    5
    6 import com.atlassian.jira.component.ComponentAccessor
    7 import com.atlassian.jira.issue.context.IssueContext
    8
    9  def cfm = ComponentAccessor.getCustomFieldManager()
    10 def om = ComponentAccessor.getOptionsManager()
    11
    12 def remoteOptionValue = replica.customKeys."Text field Value" as String
    13 def cf = cfm.getCustomFieldObjectsByName(nygSelectListCfName).find()
    14 def fCfg = cf.getRelevantConfig(IssueContext.GLOBAL)
    15 def localOptions = om.getOptions(fCfg)
    16 if (!localOptions.any { o -> o.value == remoteOptionValue }) {
    17     //FieldConfig fieldConfig, Long parentOptionId, Long sequence, String value
    18     om.createOption(fCfg, null, 0L, remoteOptionValue)
    19 }

    In case an issue is not synchronized and you want to trigger synchronization by updating the issue filed, you need to create a JQL trigger.