<?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 Batch Apply Definition Query to all layers (within MXD) in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/batch-apply-definition-query-to-all-layers-within/m-p/588517#M46122</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hey Guys,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;So here's the issue&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;UL&gt;&lt;BR /&gt;&lt;LI&gt;I have multiple mxds in a folder&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;there are subfolders within this parent foder (e.g. c:\Temp\Folder1 etc)&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Each MXD has varying number of layers/feature classes&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Some MXDs have layer groups&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;The query I want to apply is so: "VALIDATIONSTATE = 3"&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;All layers/FCs have the field above (VALIDATIONSTATE) so no worries there (Except of course non-vectos etc)&lt;/LI&gt;&lt;BR /&gt;&lt;/UL&gt;&lt;SPAN&gt;Is there any way I can&lt;/SPAN&gt;&lt;BR /&gt;&lt;OL&gt;&lt;BR /&gt;&lt;LI&gt;Apply this en masse for each mxd?&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;If yes, would it be possible to apply en masse, to each mxd, for a given folder? (I'm willing to forego applying to subfolders, and just moving everything to one folder if need be)&lt;/LI&gt;&lt;BR /&gt;&lt;/OL&gt;&lt;SPAN&gt;I've tried so many code snippets online to no avail. Any help would be appreicated!! &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 02 Apr 2014 02:09:30 GMT</pubDate>
    <dc:creator>ArvinD</dc:creator>
    <dc:date>2014-04-02T02:09:30Z</dc:date>
    <item>
      <title>Batch Apply Definition Query to all layers (within MXD)</title>
      <link>https://community.esri.com/t5/python-questions/batch-apply-definition-query-to-all-layers-within/m-p/588517#M46122</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hey Guys,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;So here's the issue&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;UL&gt;&lt;BR /&gt;&lt;LI&gt;I have multiple mxds in a folder&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;there are subfolders within this parent foder (e.g. c:\Temp\Folder1 etc)&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Each MXD has varying number of layers/feature classes&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Some MXDs have layer groups&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;The query I want to apply is so: "VALIDATIONSTATE = 3"&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;All layers/FCs have the field above (VALIDATIONSTATE) so no worries there (Except of course non-vectos etc)&lt;/LI&gt;&lt;BR /&gt;&lt;/UL&gt;&lt;SPAN&gt;Is there any way I can&lt;/SPAN&gt;&lt;BR /&gt;&lt;OL&gt;&lt;BR /&gt;&lt;LI&gt;Apply this en masse for each mxd?&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;If yes, would it be possible to apply en masse, to each mxd, for a given folder? (I'm willing to forego applying to subfolders, and just moving everything to one folder if need be)&lt;/LI&gt;&lt;BR /&gt;&lt;/OL&gt;&lt;SPAN&gt;I've tried so many code snippets online to no avail. Any help would be appreicated!! &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Apr 2014 02:09:30 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/batch-apply-definition-query-to-all-layers-within/m-p/588517#M46122</guid>
      <dc:creator>ArvinD</dc:creator>
      <dc:date>2014-04-02T02:09:30Z</dc:date>
    </item>
    <item>
      <title>Re: Batch Apply Definition Query to all layers (within MXD)</title>
      <link>https://community.esri.com/t5/python-questions/batch-apply-definition-query-to-all-layers-within/m-p/588518#M46123</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi there, you can definitely do this, subfolders and all.&amp;nbsp; No file moving necessary.&amp;nbsp; Here is the skeleton of the code you will need:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;import os, arcpy&amp;nbsp; #here's an example of how to run through all the layers in an mxd def SetDefQueries(mxdobject, defquery): &amp;nbsp;&amp;nbsp;&amp;nbsp; fixed_layers = [] &amp;nbsp;&amp;nbsp;&amp;nbsp; for layer in arcpy.mapping.ListLayers(mxdobject):&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #this should weed out the group layers and rasters &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if layer.supports("DEFINTIONQUERY"): &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fixed_layers.append(layer.name) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layer.definitionQuery = defquery&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #have the function return a list summary of the layers that were changed (for fun) &amp;nbsp;&amp;nbsp;&amp;nbsp; return fixed_layers&amp;nbsp; #create and print query query = '"VALIDATIONSTATE" = 3' #may have to fix the syntax of this statement depending on the field type arcpy.AddMessage(query)&amp;nbsp; #to go through all of the folder, use os.walk(), you can find documentation on the python website for path, dirs, files in os.walk(top/folder/path): &amp;nbsp;&amp;nbsp;&amp;nbsp; for f in files: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if f.endswith(".mxd"):&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #this should get you all of the mxds in all of the folders. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd_path = path + "\\" + f &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage(mxd_path)&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #now you can make arcpy.mapping.MapDocument() objects &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd = arcpy.mapping.MapDocumentmxd_path)&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #use the SetDefQuery function on the mxd &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; changed_layers = SetDefQuery(mxd, query)&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #print a summary of what happened &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("In {}:".format(mxd_path)) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lyrs_summary = "\n&amp;nbsp; ".join(changed_layers) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage(lyrs_summary)&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #save the mxd at the end (won't work if you have it open) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd.save() &lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You may need to do a little bit of trouble shooting, but this should serve as a good basis for what you need in the end.&amp;nbsp; You could run it straight from a .py file on the desktop if you just change the arcpy.AddMessage() pieces to normal print statements.&amp;nbsp; Also, this is from my experience in 10.0, but I'm fairly certain that these things work the same way in 10.x&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Apr 2014 13:03:52 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/batch-apply-definition-query-to-all-layers-within/m-p/588518#M46123</guid>
      <dc:creator>AdamCox1</dc:creator>
      <dc:date>2014-04-02T13:03:52Z</dc:date>
    </item>
    <item>
      <title>Re: Batch Apply Definition Query to all layers (within MXD)</title>
      <link>https://community.esri.com/t5/python-questions/batch-apply-definition-query-to-all-layers-within/m-p/588519#M46124</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;It worked! Thanks mate!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Apr 2014 19:41:10 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/batch-apply-definition-query-to-all-layers-within/m-p/588519#M46124</guid>
      <dc:creator>ArvinD</dc:creator>
      <dc:date>2014-04-02T19:41:10Z</dc:date>
    </item>
    <item>
      <title>Re: Batch Apply Definition Query to all layers (within MXD)</title>
      <link>https://community.esri.com/t5/python-questions/batch-apply-definition-query-to-all-layers-within/m-p/588520#M46125</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Okay - so now thanks to that very helpful snippet, I have been successfully able to run the code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I thought I could make it so that it ADDs the definition query to the layers IF there was one existing. So the I've added the following:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;#use the SetDefQuery function on the mxd
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if layer.definitionQuery == True: #if a definitionQuery Exists...
&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; addquery = layer.definitionQuery + "AND" + query + "=" + "\"" + value + "\"" #Add new to old
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; changed_layers = SetDefQueries(mxd, query)
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;THen it's giving me &lt;/SPAN&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;"NameError: name 'layer' is not defined"&lt;/PRE&gt;&lt;SPAN&gt; Is this right? Even though this should have been defined with 'defquery' earlier?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;(Obviously sorry for the n00b ness.)&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 01:16:57 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/batch-apply-definition-query-to-all-layers-within/m-p/588520#M46125</guid>
      <dc:creator>ArvinD</dc:creator>
      <dc:date>2021-12-12T01:16:57Z</dc:date>
    </item>
    <item>
      <title>Re: Batch Apply Definition Query to all layers (within MXD)</title>
      <link>https://community.esri.com/t5/python-questions/batch-apply-definition-query-to-all-layers-within/m-p/588521#M46126</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Yeah, you'll have to make that modification within the function itself, not after you call it later in the script.&amp;nbsp; The following code should work.&amp;nbsp; One note, an empty definition query doesn't equal False, it's just an empty string, "".&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;

#just copy and paste this into the corresponding place in the SetDefQuery function
&amp;nbsp;&amp;nbsp;&amp;nbsp; if layer.supports("DEFINITIONQUERY"):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fixed_layers.append(layer.name)
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #get existing definition query
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exdefquery = layer.definitionQuery
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if the existing query is empty, set the normal defquery
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if exdefquery == "":
&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; layer.definitionQuery = defquery

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #otherwise, make a combination defquery 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&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; layer.definitionQuery = "{0} AND {1}".format(exdefquery, defquery)


&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 01:17:00 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/batch-apply-definition-query-to-all-layers-within/m-p/588521#M46126</guid>
      <dc:creator>AdamCox1</dc:creator>
      <dc:date>2021-12-12T01:17:00Z</dc:date>
    </item>
  </channel>
</rss>

