How to Sync Cascading Select Custom Fields in Jira On-premise

    This article shows how to synchronize a custom field of type cascading select list.

    Cascading select field allows setting values for the list options. The value in the cascading select field is of type cascading and consists of two dependent options: parent value and child value.

    Exalate uses the following helper methods to sync cascading select fields:

    Source Side

    Include the custom field with the name 'Cascading select' in the replica sent to the other side

    Outgoing sync

    replica.customFields."Cascading select" = issue.customFields."Cascading select"

    Destination Side

    You can sync cascading select list option values in different ways:

    Ways to Sync Cascading Select List

    Cascading Select to Cascading Select

    It's possible that option values don't match on the source and destination sides. 

    There are different ways to handle this. If the option value does not exist on the receiving side Exalate can do the following:


      • don't sync
      • throw an error (helps to debug, add value to fix the error)
      • check if at least one value exists and sync only that value
      • create value with the help of external scripts
    • option values match

      Source Region/Country - a cascading select field on the source side; Destination Region/Country - a cascading select field on the destination side

      //check if at least one option value exists and sync only existing values
      def sourceRegion = replica.customFields."Source Region"?.value?.parent?.value
      def sourceCountry = replica.customFields."Source Region"?.value?.child?.value
      
      def region = nodeHelper.getOption(
        issue,
        "Destination Region",
        sourceRegion
      )
      def country = region.childOptions.find{it.value == sourceCountry}
      if ( region != null && (sourceCountry == null || country != null)) {
        issue.customFields."Destination Region"?.value = nodeHelper.getCascadingSelect(
                    region,
                    country
        )
      } else if (sourceRegion == null) {
        issue.customFields."Destination Region"?.value = null
      }

    Set Default Cascading Select List Values manually

    You can set default cascading select values using nodeHelper.getCascadingSelect method.

    There're multiple ways to set default values:

    Destination Region - cascading select field name on your side;

    def parent = nodeHelper.getOption(issue, "Destination Region", "Country")
    issue.customFields."Destination Region".value = nodeHelper.getCascadingSelect(
           parent, 
           parent.childOptions.find{it.value == "Belgium"}
    )

    Cascading Select List options to Text Custom Field

    Exalate allows extracting the received option values from the cascading select to a text field.

    For example, you have a custom field called Cascading Select (multi-select) to the custom field Cascading field details (text field).

    Receive Cascading Select field values and display them in the text custom field:

    Incoming sync

    replica.customFields."Cascading select".value is an object of type Cascading Select List. It contains the parent value and child value of the cascading select list field

    issue.customFields."Cascading field details".value is a text type custom field, which includes string value.

    issue.customFields."Cascading field details".value  = replica.customFields."Cascading select"?.value?.parent?.value +
              ", " +  replica.customFields."Cascading select"?.value?.child?.value