<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.appian.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Unique dropdown Validation</title><link>https://community.appian.com/discussions/f/user-interface/39522/unique-dropdown-validation</link><description>We have a dropdown value in the editable grid, and when we click on the add row button in the editable grid we have to get unique values for each row which means already selected value should be removed for next row in the grid dropdown. For your reference</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>RE: Unique dropdown Validation</title><link>https://community.appian.com/thread/150381?ContentTypeID=1</link><pubDate>Fri, 25 Jul 2025 15:26:57 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:38f9d21b-35bc-4942-bd11-91520b41a48e</guid><dc:creator>Shubham Aware</dc:creator><description>&lt;p&gt;Understood your requirement i added sample code for your reference you can make changes to your code accordingly&lt;br /&gt;&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;a!localVariables(
  /* Define available options */
  local!allOptions: {&amp;quot;Option A&amp;quot;, &amp;quot;Option B&amp;quot;, &amp;quot;Option C&amp;quot;, &amp;quot;Option D&amp;quot;, &amp;quot;Option E&amp;quot;},

  /* Initialize grid data */
  local!gridData: {
    a!map(id: 1, selectedValue: null),
    a!map(id: 2, selectedValue: null)
  },

  /* Get all currently selected values */
  local!selectedValues: reject(
    fn!isnull,
    a!forEach(
      items: local!gridData,
      expression: fv!item.selectedValue
    )
  ),

  a!formLayout(
    titleBar: &amp;quot;Unique Dropdown Example&amp;quot;,
    contents: {
      a!sectionLayout(
        label: &amp;quot;Instructions&amp;quot;,
        contents: {
          a!textField(
            label: &amp;quot;How it works:&amp;quot;,
            value: &amp;quot;Each dropdown will only show options that haven&amp;#39;t been selected in other rows. Try selecting values and adding new rows.&amp;quot;,
            readOnly: true
          )
        }
      ),

      a!gridLayout(
        label: &amp;quot;Grid with Unique Dropdowns&amp;quot;,
        labelPosition: &amp;quot;ABOVE&amp;quot;,
        headerCells: {
          a!gridLayoutHeaderCell(label: &amp;quot;Row ID&amp;quot;),
          a!gridLayoutHeaderCell(label: &amp;quot;Select Unique Value&amp;quot;),
          a!gridLayoutHeaderCell(label: &amp;quot;Action&amp;quot;)
        },
        columnConfigs: {
          a!gridLayoutColumnConfig(width: &amp;quot;NARROW&amp;quot;),
          a!gridLayoutColumnConfig(width: &amp;quot;MEDIUM&amp;quot;),
          a!gridLayoutColumnConfig(width: &amp;quot;ICON&amp;quot;)
        },
        rows: a!forEach(
          items: local!gridData,
          expression: a!localVariables(
            /* Get available options for this row (exclude values selected in other rows) */
            local!availableOptions: difference(
              local!allOptions,
              /* Remove current row&amp;#39;s value from selected values to allow editing */
            touniformstring(  remove(local!selectedValues, wherecontains(fv!item.selectedValue, touniformstring(local!selectedValues))))
            ),

            a!gridRowLayout(
              contents: {
                /* Row ID */
                a!textField(
                  value: fv!index,
                  readOnly: true
                ),

                /* Dropdown with filtered choices */
                a!dropdownField(
                  placeholder: &amp;quot;-- Select a value --&amp;quot;,
                  choiceLabels: local!availableOptions,
                  choiceValues: local!availableOptions,
                  value: fv!item.selectedValue,
                  saveInto: {
                    fv!item.selectedValue,
                    /* Update the selected values list */
                    a!save(
                      local!selectedValues,
                      reject(
                        fn!isnull,
                        a!forEach(
                          items: local!gridData,
                          expression: fv!item.selectedValue
                        )
                      )
                    )
                  },
                  validations: {}
                ),

                /* Delete button */
                a!richTextDisplayField(
                  value: {
                    a!richTextIcon(
                      icon: &amp;quot;times&amp;quot;,
                      link: a!dynamicLink(
                        saveInto: {
                          /* Remove row */
                          a!save(
                            local!gridData,
                            remove(local!gridData, fv!index)
                          ),
                          /* Update selected values */
                          a!save(
                            local!selectedValues,
                            reject(
                              fn!isnull,
                              a!forEach(
                                items: remove(local!gridData, fv!index),
                                expression: fv!item.selectedValue
                              )
                            )
                          )
                        }
                      ),
                      linkStyle: &amp;quot;STANDALONE&amp;quot;,
                      color: &amp;quot;NEGATIVE&amp;quot;
                    )
                  }
                )
              }
            )
          )
        ),
        addRowLink: a!dynamicLink(
          label: &amp;quot;Add Row&amp;quot;,
          saveInto: {
            a!save(
              local!gridData,
              append(
                local!gridData,
                a!map(
                  id: count(local!gridData) + 1,
                  selectedValue: null
                )
              )
            )
          },
          /* Disable when all options are used */
          showWhen: count(local!selectedValues) &amp;lt; count(local!allOptions)
        ),
        rowHeader: 1
      ),

      /* Display current state for debugging */
      a!sectionLayout(
        label: &amp;quot;Debug Information&amp;quot;,
        contents: {
          a!textField(
            label: &amp;quot;All Available Options&amp;quot;,
            value: joinarray(local!allOptions, &amp;quot;, &amp;quot;),
            readOnly: true
          ),
          a!textField(
            label: &amp;quot;Currently Selected Values&amp;quot;,
            value: if(
              length(local!selectedValues) = 0,
              &amp;quot;None&amp;quot;,
              joinarray(local!selectedValues, &amp;quot;, &amp;quot;)
            ),
            readOnly: true
          ),
          a!textField(
            label: &amp;quot;Remaining Options&amp;quot;,
            value: if(
              length(difference(local!allOptions,touniformstring(local!selectedValues))) = 0,
              &amp;quot;All options used&amp;quot;,
              joinarray(difference(local!allOptions,touniformstring( local!selectedValues)), &amp;quot;, &amp;quot;)
            ),
            readOnly: true
          )
        },
        isCollapsible: true
      )
    }
  )
)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sample code Similar to your English French Code&lt;br /&gt;&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;a!localVariables(
  /* Initialize the grid data */
  local!systemRecords: {
    a!map(
      id: 1,
      fieldLabelEnglish: &amp;quot;App Number&amp;quot;,
      fieldLabelFrench: &amp;quot;Num&amp;#233;ro d&amp;#39;App&amp;quot;,
      formattedValueEnglish: &amp;quot;&amp;lt;&amp;lt;data||App Number||data&amp;gt;&amp;gt;&amp;quot;,
      formattedValueFrench: &amp;quot;&amp;lt;&amp;lt;data||Num&amp;#233;ro d&amp;#39;App||data&amp;gt;&amp;gt;&amp;quot;,
      dynamicType: 6959, /* Replace with your constant */
      isActive: true
    )
  },

  /* Add this if you have inactive records tracking */
  local!inactiveSystemRecords: {},

  /* Assuming these are your constants - replace with actual values */
  local!englishOptions: {&amp;quot;App Number&amp;quot;, &amp;quot;Company Owner&amp;quot;, &amp;quot;Policy Number&amp;quot;, &amp;quot;Claim ID&amp;quot;, &amp;quot;Customer Name&amp;quot;},
  local!frenchOptions: {&amp;quot;Num&amp;#233;ro d&amp;#39;App&amp;quot;, &amp;quot;Propri&amp;#233;taire d&amp;#39;Entreprise&amp;quot;, &amp;quot;Num&amp;#233;ro de Police&amp;quot;, &amp;quot;ID de R&amp;#233;clamation&amp;quot;, &amp;quot;Nom du Client&amp;quot;},

  a!gridLayout(
    label: &amp;quot;DropDown&amp;quot;,
    labelPosition: &amp;quot;ABOVE&amp;quot;,
    headerCells: {
      a!gridLayoutHeaderCell(label: &amp;quot;Field Label - English&amp;quot;),
      a!gridLayoutHeaderCell(label: &amp;quot;Field Label - French&amp;quot;),
      a!gridLayoutHeaderCell(label: &amp;quot;&amp;quot;)
    },
    columnConfigs: {
      a!gridLayoutColumnConfig(width: &amp;quot;MEDIUM&amp;quot;),
      a!gridLayoutColumnConfig(width: &amp;quot;MEDIUM&amp;quot;),
      a!gridLayoutColumnConfig(width: &amp;quot;ICON&amp;quot;)
    },
    rows: a!forEach(
      local!systemRecords,
      {
        a!localVariables(
          /* Store current row index */
          local!currentRowIndex: fv!index,

          /* Get all selected English values EXCEPT current row */
          local!otherSelectedEnglishValues: reject(
            fn!isnull,
            a!forEach(
              items: local!systemRecords,
              expression: if(
                fv!index = local!currentRowIndex,
                null,
                fv!item.fieldLabelEnglish
              )
            )
          ),

          /* Get current row&amp;#39;s English value */
          local!currentEnglishValue: fv!item.fieldLabelEnglish,

          /* Calculate available choices - include current value if it exists */
          local!availableEnglishChoices: if(
            isnull(local!currentEnglishValue),
            /* If no current value, show all unselected options */
            difference(
              local!englishOptions,
              local!otherSelectedEnglishValues
            ),
            /* If has current value, show unselected options PLUS current value */
            union(
              {local!currentEnglishValue},
              difference(
                local!englishOptions,
                touniformstring(
                local!otherSelectedEnglishValues
                )
              )
            )
          ),

          a!gridRowLayout(
            contents: {
              /* English Dropdown */
              a!dropdownField(
                choiceLabels: local!availableEnglishChoices,
                choiceValues: local!availableEnglishChoices,
                placeholder: &amp;quot;-- Please select a value --&amp;quot;,
                value: local!currentEnglishValue,
                saveInto: {
                  fv!item.fieldLabelEnglish,
                  /* Auto-populate French value */
                  a!save(
                    fv!item.fieldLabelFrench,
                    if(
                      isnull(save!value),
                      null,
                      index(
                        local!frenchOptions,
                        wherecontains(
                          save!value,
                          local!englishOptions
                        ),
                        null
                      )
                    )
                  ),
                  /* Update formatted values */
                  a!save(
                    fv!item.formattedValueEnglish,
                    if(
                      isnull(save!value),
                      null,
                      &amp;quot;&amp;lt;&amp;lt;data||&amp;quot; &amp;amp; save!value &amp;amp; &amp;quot;||data&amp;gt;&amp;gt;&amp;quot;
                    )
                  ),
                  a!save(
                    fv!item.formattedValueFrench,
                    if(
                      isnull(save!value),
                      null,
                      &amp;quot;&amp;lt;&amp;lt;data||&amp;quot; &amp;amp; fv!item.fieldLabelFrench &amp;amp; &amp;quot;||data&amp;gt;&amp;gt;&amp;quot;
                    )
                  )
                }
              ),

              /* French Dropdown - Read Only */
              a!dropdownField(
                choiceLabels: local!frenchOptions,
                choiceValues: local!frenchOptions,
                placeholder: &amp;quot;-- Please select a value --&amp;quot;,
                value: fv!item.fieldLabelFrench,
                disabled: true
              ),

              /* Delete Icon */
              a!richTextDisplayField(
                value: {
                  a!richTextIcon(
                    icon: &amp;quot;times&amp;quot;,
                    link: a!dynamicLink(
                      saveInto: {
                        a!save(
                          local!systemRecords,
                          remove(local!systemRecords, fv!index)
                        )
                      }
                    ),
                    linkStyle: &amp;quot;STANDALONE&amp;quot;,
                    color: &amp;quot;NEGATIVE&amp;quot;
                  )
                }
              )
            }
          )
        )
      }
    ),
    addRowLink: a!dynamicLink(
      label: &amp;quot;Add Field&amp;quot;,
      saveInto: {
        a!save(
          local!systemRecords,
          append(
            local!systemRecords,
            a!map(
              id: count(local!systemRecords) + 1,
              fieldLabelEnglish: null,
              fieldLabelFrench: null,
              formattedValueEnglish: null,
              formattedValueFrench: null,
              dynamicType: 6959,
              isActive: true
            )
          )
        )
      },
      showWhen: count(
        reject(
          fn!isnull,
          a!forEach(
            items: local!systemRecords,
            expression: fv!item.fieldLabelEnglish
          )
        )
      ) &amp;lt; count(local!englishOptions)
    ),
    shadeAlternateRows: true
  )
)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also tried to make changes to your code too.&lt;br /&gt;Validate if this works properly as i don&amp;#39;t have access to much of your data.&lt;br /&gt;&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;a!localVariables(
  /* Get all currently selected English values */
  local!allSelectedEnglishValues: a!forEach(
    items: local!systemRecords,
    expression: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{d1a99936-fcc9-4f4e-b689-06a663a738f2}fieldLabelEnglish&amp;#39;]
  ),
  
  a!gridLayout(
    label: &amp;quot;DropDown&amp;quot;,
    labelPosition: &amp;quot;ABOVE&amp;quot;,
    headerCells: {
      a!gridLayoutHeaderCell(
        label: rule!INZ_I18N_displayLabel(
          i18nData: local!i18nInterfaceData,
          bundleKey: cons!INZ_CONS_TXT_INTERFACE_COMPONENT_INTERNATIONALIZATION &amp;amp; &amp;quot;.fieldLabelEnglish&amp;quot;
        )
      ),
      a!gridLayoutHeaderCell(
        label: rule!INZ_I18N_displayLabel(
          i18nData: local!i18nInterfaceData,
          bundleKey: cons!INZ_CONS_TXT_INTERFACE_COMPONENT_INTERNATIONALIZATION &amp;amp; &amp;quot;.fieldLabelFrench&amp;quot;
        )
      ),
      a!gridLayoutHeaderCell(label: &amp;quot;&amp;quot;)
    },
    columnConfigs: {
      a!gridLayoutColumnConfig(width: &amp;quot;MEDIUM&amp;quot;),
      a!gridLayoutColumnConfig(width: &amp;quot;MEDIUM&amp;quot;),
      a!gridLayoutColumnConfig(width: &amp;quot;ICON&amp;quot;)
    },
    rows: a!forEach(
      local!systemRecords,
      {
        a!localVariables(
          /* Store current row index */
          local!currentRowIndex: fv!index,
          
          /* Get selected values excluding current row */
          local!otherSelectedEnglishValues: a!forEach(
            items: local!systemRecords,
            expression: if(
              fv!index = local!currentRowIndex,
              null,
              fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{d1a99936-fcc9-4f4e-b689-06a663a738f2}fieldLabelEnglish&amp;#39;]
            )
          ),
          
          /* Calculate available English choices */
          local!availableEnglishChoices: difference(
            cons!UWG_CONS_TXT_ENGLISH_SYSTEM_DYNAMIC_VALUES,
            local!otherSelectedEnglishValues
          ),
          
          /* Calculate available French choices based on available English */
          local!availableFrenchChoices: a!forEach(
            items: local!availableEnglishChoices,
            expression: index(
              cons!UWG_CONS_TXT_FRENCH_SYSTEM_DYNAMIC_VALUES,
              wherecontains(
                fv!item,
                cons!UWG_CONS_TXT_ENGLISH_SYSTEM_DYNAMIC_VALUES
              ),
              null
            )
          ),
          
          a!gridRowLayout(
            contents: {
              a!dropdownField(
                choiceLabels: local!availableEnglishChoices,
                choiceValues: local!availableEnglishChoices,
                label: rule!INZ_I18N_displayLabel(
                  i18nData: local!i18nInterfaceData,
                  bundleKey: cons!INZ_CONS_TXT_INTERFACE_COMPONENT_INTERNATIONALIZATION &amp;amp; &amp;quot;.systemDynamicFields&amp;quot;
                ),
                labelPosition: &amp;quot;ABOVE&amp;quot;,
                placeholder: rule!INZ_I18N_displayLabel(
                  i18nData: local!i18nInterfaceData,
                  bundleKey: cons!INZ_CONS_TXT_INTERFACE_COMPONENT_INTERNATIONALIZATION &amp;amp; &amp;quot;.genericDropdownPlaceholder&amp;quot;
                ),
                value: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{d1a99936-fcc9-4f4e-b689-06a663a738f2}fieldLabelEnglish&amp;#39;],
                saveInto: {
                  fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{d1a99936-fcc9-4f4e-b689-06a663a738f2}fieldLabelEnglish&amp;#39;],
                  a!save(
                    fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{0298a955-2862-4526-b616-d79f0eaa2a6b}fieldLabelFrench&amp;#39;],
                    index(
                      cons!UWG_CONS_TXT_FRENCH_SYSTEM_DYNAMIC_VALUES,
                      wherecontains(
                        fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{d1a99936-fcc9-4f4e-b689-06a663a738f2}fieldLabelEnglish&amp;#39;],
                        cons!UWG_CONS_TXT_ENGLISH_SYSTEM_DYNAMIC_VALUES
                      ),
                      null
                    )
                  ),
                  a!save(
                    fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{804028d2-0a75-4acc-8a7c-909854b876f6}dynamicType&amp;#39;],
                    cons!UWG_CONS_INT_REFERENCE_ID_DYNAMIC_TYPE_SYSTEM
                  ),
                  if(
                    rule!GBL_isBlankOrEmpty(
                      fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{b6e4949b-f007-4523-b589-97f25058f745}formattedValueEnglish&amp;#39;]
                    ),
                    {
                      a!save(
                        ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{657f4be1-54fc-4b71-8af5-94fc937f67a1}templateEnglish&amp;#39;],
                        append(
                          ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{657f4be1-54fc-4b71-8af5-94fc937f67a1}templateEnglish&amp;#39;],
                          rule!UWG_generateAmendmentFormattedTextForDynamicFields(
                            fieldType: cons!UWG_CONS_TXT_FIELD_TYPE_SYSTEM,
                            fieldName: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{d1a99936-fcc9-4f4e-b689-06a663a738f2}fieldLabelEnglish&amp;#39;]
                          )
                        )
                      ),
                      a!save(
                        fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{b6e4949b-f007-4523-b589-97f25058f745}formattedValueEnglish&amp;#39;],
                        rule!UWG_generateAmendmentFormattedTextForDynamicFields(
                          fieldType: cons!UWG_CONS_TXT_FIELD_TYPE_SYSTEM,
                          fieldName: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{d1a99936-fcc9-4f4e-b689-06a663a738f2}fieldLabelEnglish&amp;#39;]
                        )
                      )
                    },
                    {
                      if(
                        rule!GBL_isBlankOrEmpty(
                          ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{657f4be1-54fc-4b71-8af5-94fc937f67a1}templateEnglish&amp;#39;]
                        ),
                        {},
                        {
                          a!save(
                            ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{657f4be1-54fc-4b71-8af5-94fc937f67a1}templateEnglish&amp;#39;],
                            /*substitute safe fix for 25.1*/
                            rule!CL_RULE_safeSubstitute(
                              text: ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{657f4be1-54fc-4b71-8af5-94fc937f67a1}templateEnglish&amp;#39;],
                              find: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{b6e4949b-f007-4523-b589-97f25058f745}formattedValueEnglish&amp;#39;],
                              replace_with: rule!UWG_generateAmendmentFormattedTextForDynamicFields(
                                fieldType: cons!UWG_CONS_TXT_FIELD_TYPE_SYSTEM,
                                fieldName: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{d1a99936-fcc9-4f4e-b689-06a663a738f2}fieldLabelEnglish&amp;#39;]
                              )
                            )
                          )
                        }
                      ),
                      a!save(
                        fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{b6e4949b-f007-4523-b589-97f25058f745}formattedValueEnglish&amp;#39;],
                        rule!UWG_generateAmendmentFormattedTextForDynamicFields(
                          fieldType: cons!UWG_CONS_TXT_FIELD_TYPE_SYSTEM,
                          fieldName: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{d1a99936-fcc9-4f4e-b689-06a663a738f2}fieldLabelEnglish&amp;#39;]
                        )
                      )/*French DropDown Population*/
                      
                    }
                  ),
                  a!save(
                    fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{804028d2-0a75-4acc-8a7c-909854b876f6}dynamicType&amp;#39;],
                    cons!UWG_CONS_INT_REFERENCE_ID_DYNAMIC_TYPE_SYSTEM
                  ),
                  if(
                    rule!GBL_isBlankOrEmpty(
                      fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{31c52958-8917-4eed-8c68-e2c1e8e495b7}formattedValueFrench&amp;#39;]
                    ),
                    {
                      a!save(
                        ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{a94f4383-91a2-48fd-a9bf-cd64a4bf3a16}templateFrench&amp;#39;],
                        append(
                          ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{a94f4383-91a2-48fd-a9bf-cd64a4bf3a16}templateFrench&amp;#39;],
                          rule!UWG_generateAmendmentFormattedTextForDynamicFields(
                            fieldType: cons!UWG_CONS_TXT_FIELD_TYPE_SYSTEM,
                            fieldName: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{0298a955-2862-4526-b616-d79f0eaa2a6b}fieldLabelFrench&amp;#39;]
                          )
                        )
                      ),
                      a!save(
                        fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{31c52958-8917-4eed-8c68-e2c1e8e495b7}formattedValueFrench&amp;#39;],
                        rule!UWG_generateAmendmentFormattedTextForDynamicFields(
                          fieldType: cons!UWG_CONS_TXT_FIELD_TYPE_SYSTEM,
                          fieldName: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{0298a955-2862-4526-b616-d79f0eaa2a6b}fieldLabelFrench&amp;#39;]
                        )
                      )
                    },
                    {
                      if(
                        rule!GBL_isBlankOrEmpty(
                          ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{a94f4383-91a2-48fd-a9bf-cd64a4bf3a16}templateFrench&amp;#39;]
                        ),
                        {},
                        {
                          a!save(
                            ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{a94f4383-91a2-48fd-a9bf-cd64a4bf3a16}templateFrench&amp;#39;],
                            /*substitute safe fix for 25.1*/
                            rule!CL_RULE_safeSubstitute(
                              text: ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{a94f4383-91a2-48fd-a9bf-cd64a4bf3a16}templateFrench&amp;#39;],
                              find: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{31c52958-8917-4eed-8c68-e2c1e8e495b7}formattedValueFrench&amp;#39;],
                              replace_with: rule!UWG_generateAmendmentFormattedTextForDynamicFields(
                                fieldType: cons!UWG_CONS_TXT_FIELD_TYPE_SYSTEM,
                                fieldName: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{0298a955-2862-4526-b616-d79f0eaa2a6b}fieldLabelFrench&amp;#39;]
                              )
                            )
                          )
                        }
                      ),
                      a!save(
                        fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{31c52958-8917-4eed-8c68-e2c1e8e495b7}formattedValueFrench&amp;#39;],
                        rule!UWG_generateAmendmentFormattedTextForDynamicFields(
                          fieldType: cons!UWG_CONS_TXT_FIELD_TYPE_SYSTEM,
                          fieldName: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{0298a955-2862-4526-b616-d79f0eaa2a6b}fieldLabelFrench&amp;#39;]
                        )
                      )
                    }
                  )
                },
                validations: {}
              ),
              a!dropdownField(
                choiceLabels: local!availableFrenchChoices,
                choiceValues: local!availableFrenchChoices,
                label: rule!INZ_I18N_displayLabel(
                  i18nData: local!i18nInterfaceData,
                  bundleKey: cons!INZ_CONS_TXT_INTERFACE_COMPONENT_INTERNATIONALIZATION &amp;amp; &amp;quot;.systemDynamicFields&amp;quot;
                ),
                labelPosition: &amp;quot;ABOVE&amp;quot;,
                placeholder: rule!INZ_I18N_displayLabel(
                  i18nData: local!i18nInterfaceData,
                  bundleKey: cons!INZ_CONS_TXT_INTERFACE_COMPONENT_INTERNATIONALIZATION &amp;amp; &amp;quot;.genericDropdownPlaceholder&amp;quot;
                ),
                value: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{0298a955-2862-4526-b616-d79f0eaa2a6b}fieldLabelFrench&amp;#39;],
                saveInto: {
                  fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{0298a955-2862-4526-b616-d79f0eaa2a6b}fieldLabelFrench&amp;#39;]                                
                },
                disabled: true,
                validations: {}
              ),
              a!richTextDisplayField(
                value: {
                  a!richTextIcon(
                    icon: &amp;quot;times&amp;quot;,
                    link: a!dynamicLink(
                      value: &amp;quot;&amp;quot;,
                      saveInto: {
                        if(
                          and(
                            ri!isUpdate,
                            not(
                              rule!GBL_isBlankOrEmpty(
                                fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{87562531-2dee-4e70-95c0-2633a2b76590}id&amp;#39;]
                              )
                            )
                          ),
                          {
                            if(
                              or(
                                rule!GBL_isBlankOrEmpty(
                                  ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{657f4be1-54fc-4b71-8af5-94fc937f67a1}templateEnglish&amp;#39;]
                                ),
                                rule!GBL_isBlankOrEmpty(
                                  fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{b6e4949b-f007-4523-b589-97f25058f745}formattedValueEnglish&amp;#39;]
                                )
                              ),
                              {},
                              {
                                a!save(
                                  ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{657f4be1-54fc-4b71-8af5-94fc937f67a1}templateEnglish&amp;#39;],
                                  /*substitute safe fix for 25.1*/
                                  rule!CL_RULE_safeSubstitute(
                                    text: ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{657f4be1-54fc-4b71-8af5-94fc937f67a1}templateEnglish&amp;#39;],
                                    find: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{b6e4949b-f007-4523-b589-97f25058f745}formattedValueEnglish&amp;#39;],
                                    replace_with: &amp;quot;&amp;quot;
                                  )
                                )
                              }
                            ),
                            if(
                              or(
                                rule!GBL_isBlankOrEmpty(
                                  ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{a94f4383-91a2-48fd-a9bf-cd64a4bf3a16}templateFrench&amp;#39;]
                                ),
                                rule!GBL_isBlankOrEmpty(
                                  fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{31c52958-8917-4eed-8c68-e2c1e8e495b7}formattedValueFrench&amp;#39;]
                                )
                              ),
                              {},
                              {
                                a!save(
                                  ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{a94f4383-91a2-48fd-a9bf-cd64a4bf3a16}templateFrench&amp;#39;],
                                  /*substitute safe fix for 25.1*/
                                  rule!CL_RULE_safeSubstitute(
                                    text: ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{a94f4383-91a2-48fd-a9bf-cd64a4bf3a16}templateFrench&amp;#39;],
                                    find: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{31c52958-8917-4eed-8c68-e2c1e8e495b7}formattedValueFrench&amp;#39;],
                                    replace_with: &amp;quot;&amp;quot;
                                  )
                                )
                              }
                            ),
                            a!save(
                              fv!item,
                              a!update(
                                data: fv!item,
                                index: {
                                  &amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{a5ce96d2-22e4-48d8-8b98-0cbe346855cf}updatedBy&amp;#39;,
                                  &amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{cf9b41d7-6cd2-4580-aab6-b304312c9da6}updatedOn&amp;#39;,
                                  &amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{6056a1f4-5e5e-45cf-a227-29d55e9bd7ce}isActive&amp;#39;
                                },
                                value: { loggedInUser(), now(), false }
                              )
                            ),
                            a!save(
                              local!inactiveSystemRecords,
                              append(
                                local!inactiveSystemRecords,
                                local!systemRecords[fv!index]
                              )
                            ),
                            a!save(
                              local!systemRecords,
                              remove(local!systemRecords, fv!index)
                            )
                          },
                          {
                            if(
                              or(
                                not(ri!isUpdate = true()),
                                and(
                                  ri!isUpdate,
                                  rule!GBL_isBlankOrEmpty(
                                    fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{87562531-2dee-4e70-95c0-2633a2b76590}id&amp;#39;]
                                  )
                                )
                              ),
                              {
                                if(
                                  or(
                                    rule!GBL_isBlankOrEmpty(
                                      ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{657f4be1-54fc-4b71-8af5-94fc937f67a1}templateEnglish&amp;#39;]
                                    ),
                                    rule!GBL_isBlankOrEmpty(
                                      fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{b6e4949b-f007-4523-b589-97f25058f745}formattedValueEnglish&amp;#39;]
                                    )
                                  ),
                                  {},
                                  {
                                    a!save(
                                      ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{657f4be1-54fc-4b71-8af5-94fc937f67a1}templateEnglish&amp;#39;],
                                      /*substitute safe fix for 25.1*/
                                      rule!CL_RULE_safeSubstitute(
                                        text: ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{657f4be1-54fc-4b71-8af5-94fc937f67a1}templateEnglish&amp;#39;],
                                        find: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{b6e4949b-f007-4523-b589-97f25058f745}formattedValueEnglish&amp;#39;],
                                        replace_with: &amp;quot;&amp;quot;
                                      )
                                    )
                                  }
                                ),
                                if(
                                  or(
                                    rule!GBL_isBlankOrEmpty(
                                      ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{a94f4383-91a2-48fd-a9bf-cd64a4bf3a16}templateFrench&amp;#39;]
                                    ),
                                    rule!GBL_isBlankOrEmpty(
                                      fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{31c52958-8917-4eed-8c68-e2c1e8e495b7}formattedValueFrench&amp;#39;]
                                    )
                                  ),
                                  {},
                                  {
                                    a!save(
                                      ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{a94f4383-91a2-48fd-a9bf-cd64a4bf3a16}templateFrench&amp;#39;],
                                      /*substitute safe fix for 25.1*/
                                      rule!CL_RULE_safeSubstitute(
                                        text: ri!record[&amp;#39;recordType!{bf842322-0f8a-429a-873a-f0d69ec9d438}UWG Amendment Reference.relationships.{cbd28086-f4ea-4c46-a88b-e1a617136bb8}amendmentReferenceMaster.fields.{a94f4383-91a2-48fd-a9bf-cd64a4bf3a16}templateFrench&amp;#39;],
                                        find: fv!item[&amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{31c52958-8917-4eed-8c68-e2c1e8e495b7}formattedValueFrench&amp;#39;],
                                        replace_with: &amp;quot;&amp;quot;
                                      )
                                    )
                                  }
                                ),
                                a!save(
                                  local!systemRecords,
                                  remove(local!systemRecords, fv!index)
                                )
                              },
                              {}
                            )
                          }
                        )
                      }
                    ),
                    linkStyle: &amp;quot;STANDALONE&amp;quot;,
                    color: &amp;quot;NEGATIVE&amp;quot;
                  )
                }
              )
            }
          )
        )
      }
    ),
    selectionSaveInto: {},
    addRowLink: a!dynamicLink(
      label: rule!INZ_I18N_displayLabel(
        i18nData: local!i18nInterfaceData,
        bundleKey: cons!INZ_CONS_TXT_INTERFACE_COMPONENT_INTERNATIONALIZATION &amp;amp; &amp;quot;.addField&amp;quot;
      ),
      value: &amp;quot;&amp;quot;,
      saveInto: {
        a!save(
          local!systemRecords,
          append(
            local!systemRecords,
            &amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields&amp;#39;(
              &amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{804028d2-0a75-4acc-8a7c-909854b876f6}dynamicType&amp;#39;: cons!UWG_CONS_INT_REFERENCE_ID_DYNAMIC_TYPE_SYSTEM,
              &amp;#39;recordType!{9d988a65-60b0-4735-b00d-5caf6ad59c60}UWG Amendment Master Dynamic Fields.fields.{6056a1f4-5e5e-45cf-a227-29d55e9bd7ce}isActive&amp;#39;: true
            )
          )
        )
      },
      /* Disable Add Field when all options are used */
      showWhen: count(
        reject(
          fn!isnull,
          local!allSelectedEnglishValues
        )
      ) &amp;lt; count(cons!UWG_CONS_TXT_ENGLISH_SYSTEM_DYNAMIC_VALUES)
    ),
    validations: {},
    shadeAlternateRows: true
  )
)&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Unique dropdown Validation</title><link>https://community.appian.com/thread/150380?ContentTypeID=1</link><pubDate>Fri, 25 Jul 2025 15:26:13 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:d845c28f-469b-446e-9ad8-28445e477a12</guid><dc:creator>vimalkumars</dc:creator><description>&lt;p&gt;Hi&amp;nbsp;&lt;a class="internal-link view-user-profile" href="/members/likhithan"&gt;likhithan&lt;/a&gt;,&lt;/p&gt;
&lt;p&gt;Here is the sample code to achieve it. Please apply the necessary null handling to avoid errors&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;a!localVariables(
  local!choicelist: {
    &amp;quot;Option 1&amp;quot;,
    &amp;quot;Option 2&amp;quot;,
    &amp;quot;Option 3&amp;quot;,
    &amp;quot;Option 4&amp;quot;,
    &amp;quot;Option 5&amp;quot;,
    &amp;quot;Option 6&amp;quot;,
    &amp;quot;Option 7&amp;quot;,
    &amp;quot;Option 8&amp;quot;
  },
  {
    a!gridLayout(
      label: &amp;quot;Editable Grid&amp;quot;,
      labelPosition: &amp;quot;ABOVE&amp;quot;,
      headerCells: { a!gridLayoutHeaderCell(label: &amp;quot;Select&amp;quot;) },
      columnConfigs: {},
      rows: {
        a!forEach(
          items: ri!a,
          expression: a!localVariables(
            local!rowChoiceList: difference(
              local!choicelist,
              difference(ri!a, ri!a[fv!index])
            ),
            a!gridRowLayout(
              contents: {
                a!dropdownField(
                  choiceLabels: local!rowChoiceList,
                  choiceValues: local!rowChoiceList,
                  label: &amp;quot;Dropdown&amp;quot;,
                  labelPosition: &amp;quot;ABOVE&amp;quot;,
                  value: ri!a[fv!index],
                  placeholder: &amp;quot;--- Select a Value ---&amp;quot;,
                  saveInto: { ri!a[fv!index] },
                  searchDisplay: &amp;quot;AUTO&amp;quot;,
                  validations: {}
                )
              }
            )
          )
        )
      },
      addRowLink: a!dynamicLink(
        label: &amp;quot;Add New Item&amp;quot;,
        saveInto: a!save(ri!a, append(ri!a, null()))
      ),
      selectionSaveInto: {},
      validations: {},
      shadeAlternateRows: true
    )
  }
)&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>