<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Python script Tool Multi-Value parameter re-ordering buttons in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435165#M34193</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi-&lt;/P&gt;&lt;P&gt;I'm trying to set the values of one control (Multi-value, data type: string &amp;lt;via checkboxes&amp;gt;) to another parameter control (Multi-value, data type: "any value" which produces a drop down with grid for items entered or selected with the add, delete, and re-ordering (up/down) buttons).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The goal is to use the reorder buttons on the 2nd control (of the auto-populated items) to reorganize the list by moving rows up and down, then taking the values out (as text type is fine) and processing them further.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The issue is that I can get the items to populate into the 2nd control (via the ToolValidator class, updateParameters method) but I can't change their order.&amp;nbsp; If I use the text entry box to populate the grid, it will allow me to change the order of the items.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here's the updated code snip:&lt;/P&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&amp;nbsp; def __init__(self):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; """Setup arcpy and the list of tool parameters."""&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.params = arcpy.GetParameterInfo()&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; global PriorParam&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PriorParam = ""&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; def initializeParameters(self):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; """Refine the properties of a tool's parameters.&amp;nbsp; This method is&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; called when the tool is opened."""&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; global PriorParam&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PriorParam = ""&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp; def updateParameters(self):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; global PriorParam, selected_items_list&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if self.params[2].value:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domains = arcpy.da.ListDomains(self.params[2].value)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.params[3].filter.list = [domain.name for domain in domains if domain.domainType == "CodedValue"]&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if self.params[3].value:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domains = arcpy.da.ListDomains(self.params[2].value)&lt;BR /&gt;#Probably a more direct way to grab the actual domain object but this works for now.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for domain in domains:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if domain.name == self.params[3].value:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; coded_values = domain.codedValues&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.params[5].filter.list = [val.encode('utf-8') for val,desc in coded_values.items()]&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if self.params[5].values&amp;nbsp; &amp;lt;&amp;gt; PriorParam:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PriorParam = self.params[5].values&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IncomingParam = arcpy.GetParameterAsText(6)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; working_param = self.params[5].values&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.params[6].values =&amp;nbsp; working_param # .params[5].values&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("Param5 didn't change after validate review.")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here's what the parameter page looks like:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG __jive_id="439517" class="image-1 jive-image" src="https://community.esri.com/legacyfs/online/439517_pastedImage_213.png" /&gt;&lt;/P&gt;&lt;P&gt;Even though the Up/Down arrows are enabled, they don't actually re-order the items.&amp;nbsp; Am I using the wrong Data Type or is there some other storage location I should manually be moving the items from the "Code(s) to move"&amp;nbsp; to get them into the SequenceTheMoveCodes parameter control?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please help!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks!&lt;BR /&gt;Tad Hammer&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 14 Mar 2019 21:25:51 GMT</pubDate>
    <dc:creator>TadHammer3</dc:creator>
    <dc:date>2019-03-14T21:25:51Z</dc:date>
    <item>
      <title>Python script Tool Multi-Value parameter re-ordering buttons</title>
      <link>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435165#M34193</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi-&lt;/P&gt;&lt;P&gt;I'm trying to set the values of one control (Multi-value, data type: string &amp;lt;via checkboxes&amp;gt;) to another parameter control (Multi-value, data type: "any value" which produces a drop down with grid for items entered or selected with the add, delete, and re-ordering (up/down) buttons).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The goal is to use the reorder buttons on the 2nd control (of the auto-populated items) to reorganize the list by moving rows up and down, then taking the values out (as text type is fine) and processing them further.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The issue is that I can get the items to populate into the 2nd control (via the ToolValidator class, updateParameters method) but I can't change their order.&amp;nbsp; If I use the text entry box to populate the grid, it will allow me to change the order of the items.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here's the updated code snip:&lt;/P&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&amp;nbsp; def __init__(self):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; """Setup arcpy and the list of tool parameters."""&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.params = arcpy.GetParameterInfo()&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; global PriorParam&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PriorParam = ""&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; def initializeParameters(self):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; """Refine the properties of a tool's parameters.&amp;nbsp; This method is&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; called when the tool is opened."""&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; global PriorParam&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PriorParam = ""&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp; def updateParameters(self):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; global PriorParam, selected_items_list&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if self.params[2].value:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domains = arcpy.da.ListDomains(self.params[2].value)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.params[3].filter.list = [domain.name for domain in domains if domain.domainType == "CodedValue"]&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if self.params[3].value:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domains = arcpy.da.ListDomains(self.params[2].value)&lt;BR /&gt;#Probably a more direct way to grab the actual domain object but this works for now.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for domain in domains:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if domain.name == self.params[3].value:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; coded_values = domain.codedValues&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.params[5].filter.list = [val.encode('utf-8') for val,desc in coded_values.items()]&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if self.params[5].values&amp;nbsp; &amp;lt;&amp;gt; PriorParam:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PriorParam = self.params[5].values&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IncomingParam = arcpy.GetParameterAsText(6)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; working_param = self.params[5].values&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.params[6].values =&amp;nbsp; working_param # .params[5].values&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("Param5 didn't change after validate review.")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here's what the parameter page looks like:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG __jive_id="439517" class="image-1 jive-image" src="https://community.esri.com/legacyfs/online/439517_pastedImage_213.png" /&gt;&lt;/P&gt;&lt;P&gt;Even though the Up/Down arrows are enabled, they don't actually re-order the items.&amp;nbsp; Am I using the wrong Data Type or is there some other storage location I should manually be moving the items from the "Code(s) to move"&amp;nbsp; to get them into the SequenceTheMoveCodes parameter control?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please help!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks!&lt;BR /&gt;Tad Hammer&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 14 Mar 2019 21:25:51 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435165#M34193</guid>
      <dc:creator>TadHammer3</dc:creator>
      <dc:date>2019-03-14T21:25:51Z</dc:date>
    </item>
    <item>
      <title>Re: Python script Tool Multi-Value parameter re-ordering buttons</title>
      <link>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435166#M34194</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;DIV&gt;Can you provide&amp;nbsp;some more code, i.e a tool class that implements just the bit that you are asking about.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Are you selecting a value in the SequenceTheMoveCodes parameter control before trying to use the up/down arrows?&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Mar 2019 01:36:47 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435166#M34194</guid>
      <dc:creator>Luke_Pinner</dc:creator>
      <dc:date>2019-03-15T01:36:47Z</dc:date>
    </item>
    <item>
      <title>Re: Python script Tool Multi-Value parameter re-ordering buttons</title>
      <link>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435167#M34195</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Luke-&lt;/P&gt;&lt;P&gt;Thanks for getting back with me.&amp;nbsp; I've updated the code snippet to include almost all the of ToolValidator (except the Messages part that I haven't added anything to).&amp;nbsp; I am selecting a row before I try to use the buttons (the row turns blue).&amp;nbsp; Then when I hit an arrow button, say I hit "Up" the item doesn't move up, but a grey bar (like a selected row) moves upward.&amp;nbsp; It's like it doesn't take the data value&amp;nbsp;along with it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I just noticed something else that I think might be connected.&amp;nbsp; I can either make manual entries to the SeqTheMoveCodes (once all have been cleared) or have them populated by the UpdateParameters code, but not both.&amp;nbsp; For instance, I can't add values manually through the + button&amp;nbsp;to the list once they are have pre-populated values in them.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BTW:&amp;nbsp; I'm using ArcMap 10.6 against MS SQL Server&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Mar 2019 13:38:37 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435167#M34195</guid>
      <dc:creator>TadHammer3</dc:creator>
      <dc:date>2019-03-15T13:38:37Z</dc:date>
    </item>
    <item>
      <title>Re: Python script Tool Multi-Value parameter re-ordering buttons</title>
      <link>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435168#M34196</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Could you describe the properties/settings&amp;nbsp;you are using for&amp;nbsp;the "SequenceTheMoveCodes" control?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Mar 2019 16:32:25 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435168#M34196</guid>
      <dc:creator>RandyBurton</dc:creator>
      <dc:date>2019-03-15T16:32:25Z</dc:date>
    </item>
    <item>
      <title>Re: Python script Tool Multi-Value parameter re-ordering buttons</title>
      <link>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435169#M34197</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Randy-&lt;/P&gt;&lt;P&gt;SequenceTheMoveCodes is Required, Input, Multi-Value, "Any Value" data type-- that data type allowed me to have the re-order grid as well as a data entry box-- even though I don't need the drop down.&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Tad&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Mar 2019 16:38:27 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435169#M34197</guid>
      <dc:creator>TadHammer3</dc:creator>
      <dc:date>2019-03-15T16:38:27Z</dc:date>
    </item>
    <item>
      <title>Re: Python script Tool Multi-Value parameter re-ordering buttons</title>
      <link>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435170#M34198</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You have a puzzler here.&amp;nbsp; I've always had problems using global variables in&amp;nbsp;the ToolValidator class.&amp;nbsp; In addition, the .altered property doesn't always work as expected (at least for me).&amp;nbsp; The trick seems to be: don't refresh a parameter if a proceeding one hasn't really changed.&amp;nbsp;I think that is the basic problem you're having, and your globals weren't remembering any previous values correctly.&amp;nbsp; Thus, every updateParameters check found a change, and the tool interface seemed as if it was locked up. It was actually being constantly refreshed to its previous state.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For my testing, I created a simple script tool with two input variables.&amp;nbsp; The first&amp;nbsp;used a multi-value&amp;nbsp;string input from a value list filter "A;B;C;D" which gave me the check boxes.&amp;nbsp; I used the multi-value&amp;nbsp;"Any value" input to match your "SequenceTheMoveCodes" section.&amp;nbsp; I did not use any globals in the ToolValidator.&amp;nbsp; The operation seemed a bit quirky, but I could alter the order of the items, and delete some.&amp;nbsp; This section would immediately refresh to new values when I deleted all values.&amp;nbsp; Here's the code section&amp;nbsp;from the ToolValidator:&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;    &lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;updateParameters&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
        &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;altered&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# a checkbox has changed&lt;/SPAN&gt;
            &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;values&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# something is checked&lt;/SPAN&gt;
                &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;values&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# the select section has values&lt;/SPAN&gt;
                    &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; v &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;values&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# add new values&lt;/SPAN&gt;
                         &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; v &lt;SPAN class="operator token"&gt;not&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;values&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
                            self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;values&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;append&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;v&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
                &lt;SPAN class="keyword token"&gt;else&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# populate select section with checkbox items&lt;/SPAN&gt;
                    self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;values &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;values
        &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt;
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;As I mentioned, the operation seemed a bit quirky.&amp;nbsp; I am also wondering if there is any value in adding the list of checkboxes when items can be deleted and reordered in the "sequence" section if it is working correctly.&amp;nbsp; So I tested the following code.&amp;nbsp; The first parameter was set to "workspace" so I could select a geodatabase.&amp;nbsp; The second parameter was a "string" which could be populated with a dropdown list of domain names. The final parameter was the multi-value "any value" option to match your "sequence" section.&amp;nbsp; These parameters seem to be the most important of what you are working with.&amp;nbsp; Again, I did not use any global variables.&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;    &lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;updateParameters&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;

        &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;altered&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# geodatabase parameter has changed&lt;/SPAN&gt;
            &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;value&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# it has a value&lt;/SPAN&gt;
                &lt;SPAN class="comment token"&gt;# do checks on params[0] if required - confirm it is geodatabase&lt;/SPAN&gt;
                &lt;SPAN class="comment token"&gt;# get domain information&lt;/SPAN&gt;
                domains &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; arcpy&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;da&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;ListDomains&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;value&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
                &lt;SPAN class="comment token"&gt;# populate parameter with coded value domain names&lt;/SPAN&gt;
                self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;filter&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;list &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; sorted&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;d&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;name &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; d &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; domains &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; d&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;domainType &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"CodedValue"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;                     
                &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;value &lt;SPAN class="operator token"&gt;not&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;filter&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;list&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# set domain selection if needed&lt;/SPAN&gt;
                    self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;filter&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;list&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;

        &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;altered&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# selected domain has changed&lt;/SPAN&gt;
            &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;value&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# it has a value&lt;/SPAN&gt;
                domains &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; arcpy&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;da&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;ListDomains&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;value&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
                &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; d &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; domains&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# get the coded values&lt;/SPAN&gt;
                    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; d&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;name &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;value&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
                        coded_values &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; d&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;codedValues
                        dVals &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;val &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; val&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; desc &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; coded_values&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;items&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;
                &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;not&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;values&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# the select list has no values in it&lt;/SPAN&gt;
                    self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;values &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; dVals &lt;SPAN class="comment token"&gt;# insert new values&lt;/SPAN&gt;
                &lt;SPAN class="keyword token"&gt;else&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# check the current values&lt;/SPAN&gt;
                    &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; v &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;values&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
                        &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; v &lt;SPAN class="operator token"&gt;not&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; dVals&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;# if not in dVals, then domain selection has changed &lt;/SPAN&gt;
                            self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;values &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; dVals &lt;SPAN class="comment token"&gt;# reset choices&lt;/SPAN&gt;
                        &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;

        &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Basically, if a geodatabase and a domain name have been selected, the sequence section of the tool is populated with the codes from the first coded-value domain found.&amp;nbsp; When a domain code is highlighted, the "x" button will remove it from the list.&amp;nbsp; The up and down arrows should move the code in the list.&amp;nbsp; If the domain name is changed, the script checks to see that all values in the sequence area are in the codes used by the newly selected domain.&amp;nbsp; If a value exists that is not in the domain codes, it is assumed the domain name was changed, and the sequence section is refreshed.&amp;nbsp; As noted in the code, I do not check that the workspace is an actual database.&amp;nbsp; Also there is no error processing if the selected database does not have coded value domains.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here's what my test tool interface looks like&lt;/P&gt;&lt;P&gt;&lt;IMG __jive_id="439641" alt="Domain Tool test" class="image-1 jive-image j-img-original" src="https://community.esri.com/legacyfs/online/439641_domaintool.png" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope this helps.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 19:30:12 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435170#M34198</guid>
      <dc:creator>RandyBurton</dc:creator>
      <dc:date>2021-12-11T19:30:12Z</dc:date>
    </item>
    <item>
      <title>Re: Python script Tool Multi-Value parameter re-ordering buttons</title>
      <link>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435171#M34199</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Randy, I appreciate it!!!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 18 Mar 2019 02:16:12 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435171#M34199</guid>
      <dc:creator>TadHammer3</dc:creator>
      <dc:date>2019-03-18T02:16:12Z</dc:date>
    </item>
    <item>
      <title>Re: Python script Tool Multi-Value parameter re-ordering buttons</title>
      <link>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435172#M34200</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Randy-&lt;/P&gt;&lt;P&gt;Do you know if I were to write a Python toolbox, could I take closer "control" of the checkbox control?&amp;nbsp; Meaning, could I&amp;nbsp;run validation code &amp;nbsp;every time a checkbox was checked or unchecked?&amp;nbsp; Right now, it's only validated after another control gains "focus".&amp;nbsp; I didn't see where that was possible, but was wondering if you knew.&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Tad&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 18 Mar 2019 02:25:57 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435172#M34200</guid>
      <dc:creator>TadHammer3</dc:creator>
      <dc:date>2019-03-18T02:25:57Z</dc:date>
    </item>
    <item>
      <title>Re: Python script Tool Multi-Value parameter re-ordering buttons</title>
      <link>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435173#M34201</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Although I haven't worked with check boxes in a Python toolbox, I would suspect that you would have a little bit more control.&amp;nbsp; I do know that global variables work a little better in the Python toolbox provided they are created in getParameterInfo.&amp;nbsp; See: &lt;A href="https://gis.stackexchange.com/questions/156939" rel="nofollow noopener noreferrer" target="_blank"&gt;Python toolbox tool objects do not remember instance variables between function calls?&lt;/A&gt;&amp;nbsp;and &lt;A href="https://gis.stackexchange.com/questions/264110" rel="nofollow noopener noreferrer" target="_blank"&gt;Using Global Variables in Python Toolbox?&lt;/A&gt;&amp;nbsp; From the discussion, I noticed the use of the pythonaddins.MessageBox that can be very useful in debugging a script tool or Python toolbox.&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;&lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; arcpy
&lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; pythonaddins

&lt;SPAN class="keyword token"&gt;class&lt;/SPAN&gt; &lt;SPAN class="token class-name"&gt;ToolValidator&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;object&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;

    &lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;updateParameters&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;

        &lt;SPAN class="comment token"&gt;# MessageBox( message, boxtitle)&lt;/SPAN&gt;
        pythonaddins&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;MessageBox&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;'Altered:\n{}'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;format&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;altered&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;'self.params[0]'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
        pythonaddins&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;MessageBox&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;'Value:\n{}'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;format&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;value&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;'self.params[0]'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;By using the pythonaddins MessageBox I discovered that the .altered and .value property are very similar.&amp;nbsp; The .altered appears to be a Boolean indicating if the parameter has a value (the parameter has been altered from being None to having some value).&amp;nbsp; Once a parameter has a value, it will always test as being .altered = True.&amp;nbsp; If you delete the parameter value, the it will test as false.&amp;nbsp;&amp;nbsp;I have not found&amp;nbsp;a way to set .altered to false after a parameter has been checked/validated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Once you are done with debug/testing, you would want to remove the pythonaddins as the MessageBox is extremely annoying for normal operation of a tool.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 19:30:14 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/python-script-tool-multi-value-parameter-re/m-p/435173#M34201</guid>
      <dc:creator>RandyBurton</dc:creator>
      <dc:date>2021-12-11T19:30:14Z</dc:date>
    </item>
  </channel>
</rss>

