{"id":2608682,"date":"2024-12-09T06:20:28","date_gmt":"2024-12-09T14:20:28","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2608682"},"modified":"2026-01-12T13:50:15","modified_gmt":"2026-01-12T21:50:15","slug":"build-custom-tools-in-arcgispro","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro","title":{"rendered":"Build Better Custom Geoprocessing tools (now with Enable Undo) in ArcGIS Pro!"},"author":314022,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[23341,37101],"tags":[776862,24321,39401,24331,24341],"industry":[],"product":[36561],"class_list":["post-2608682","blog","type-blog","status-publish","format-standard","hentry","category-analytics","category-announcements","tag-arcgis-pro-3-4","tag-geoprocessing","tag-geoprocessing-tool","tag-modelbuilder","tag-python","product-arcgis-pro"],"acf":{"authors":[{"ID":314022,"user_firstname":"Margaret","user_lastname":"Crawford","nickname":"Margaret Crawford","user_nicename":"mcrawford","display_name":"Margaret Crawford","user_email":"mcrawford@esri.com","user_url":"","user_registered":"2022-06-28 19:13:27","user_description":"Margaret is a Product Engineer on the Geoprocessing team. Her passion for GIS began with her interest in human-environmental relationships, and her graduate thesis studied the growing impact of flood-induced cascading disasters caused by sea level rise. Margaret leverages her foundation in research methodologies and spatial analysis techniques in her role at Esri, where she creates written content and demonstrations on features in ArcGIS Pro. She also contributes to refining and redesigning geoprocessing tools and functions. In her personal life, Margaret is a loving cat parent to three beautiful cats, and enjoys swimming and snowboarding.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/03\/PXL_20230310_184124630.PORTRAIT234-465x465.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"short_description":"This blog explores some tips and new features introduced in the latest releases for building custom tools.","flexible_content":[{"acf_fc_layout":"image","image":{"ID":2617382,"id":2617382,"title":"Toolbox_bannerimage","filename":"Toolbox_bannerimage.png","filesize":2951553,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Toolbox_bannerimage.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\/toolbox_bannerimage","alt":"banner image","author":"314022","description":"","caption":"","name":"toolbox_bannerimage","status":"inherit","uploaded_to":2608682,"date":"2024-12-09 18:08:02","modified":"2024-12-09 18:13:59","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1920,"height":1080,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Toolbox_bannerimage-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Toolbox_bannerimage.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Toolbox_bannerimage.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Toolbox_bannerimage.png","large-width":1920,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Toolbox_bannerimage-1536x864.png","1536x1536-width":1536,"1536x1536-height":864,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Toolbox_bannerimage.png","2048x2048-width":1920,"2048x2048-height":1080,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Toolbox_bannerimage-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Toolbox_bannerimage.png","wide_image-width":1920,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><strong>Approximate reading time:<\/strong> 7 min<\/p>\n<p><strong>ArcGIS Pro Release:<\/strong> 3.4<\/p>\n<p>Building <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/use-a-custom-geoprocessing-tool.htm\" target=\"_blank\" rel=\"noopener\">custom tools<\/a><\/span> in ArcGIS Pro gives you the opportunity to automate repetitive workflows or design tools that are tailored to your analysis. You can use ModelBuilder or Python to create tools inside <span style=\"color: #3366ff\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/use-a-custom-geoprocessing-tool.htm\" target=\"_blank\" rel=\"noopener\">custom toolboxes<\/a><\/span>. And by designing and sharing your toolboxes, you enable others to benefit from your expertise with a customized tool to help them work more efficiently.<\/p>\n<p>This blog explores some tips and new features in the latest releases for building custom tools, including:<\/p>\n<p><strong>\u2022\u00a0 <\/strong><span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"#CreateACustomTool\"><strong>Build custom tools<\/strong><\/a><\/span>\u2013Learn how to build a custom <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/arcpy\/geoprocessing_and_python\/a-quick-tour-of-creating-script-tools.htm\" target=\"_blank\" rel=\"noopener\">script<\/a><\/span> tool.<\/p>\n<p><strong>\u2022\u00a0 <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"#DocumentCustomTools\">Document custom tools<\/a><\/span><\/strong>\u2013Use the <strong>Tool Properties<\/strong> dialog box to document custom tools.<\/p>\n<p><strong>\u2022\u00a0 <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"#CustomToolAttributes\">Attributes<\/a><\/span><\/strong>\u2013Add an <strong>Enable Undo<\/strong> toggle and banner messages to custom tools.<\/p>\n<p><strong>\u2022\u00a0 <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"#CustomToolEnvironments\">Environments<\/a><\/span><\/strong>\u2013Select a subset of <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/geoprocessing-environment-settings.htm\" target=\"_blank\" rel=\"noopener\">environment settings<\/a><\/span> your custom tool supports.<\/p>\n<p><strong>\u2022\u00a0 <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"#ParameterControls\">Parameter Controls<\/a><\/span><\/strong>\u2013Use the <code>controlCLSID<\/code> property to set a custom tool parameter control.<\/p>\n<p><strong>Note<\/strong>: Much of this new functionality is only available for custom tools stored in the new ArcGIS toolbox (.atbx) format introduced in Pro 2.9. So, if you\u2019re still using legacy toolboxes (.tbx), copy and paste your tools into a new toolbox for an enhanced experience.<\/p>\n"},{"acf_fc_layout":"content","content":"<p><a name=\"CreateACustomTool\"><\/a><\/p>\n<h1>Create a custom tool<\/h1>\n<p>ArcGIS Pro projects have a default toolbox that is automatically created and available in the <strong>Catalog<\/strong> and <strong>Geoprocessing<\/strong> panes.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2609322,"id":2609322,"title":"Default_ArcGISToolbox","filename":"Default_ArcGISToolbox.png","filesize":22105,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Default_ArcGISToolbox.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\/default_arcgistoolbox","alt":"Default Toolbox","author":"314022","description":"","caption":"Default toolbox in the Catalog (left) and Geoprocessing (right) panes.","name":"default_arcgistoolbox","status":"inherit","uploaded_to":2608682,"date":"2024-12-03 19:08:22","modified":"2024-12-03 19:09:02","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":597,"height":252,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Default_ArcGISToolbox-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Default_ArcGISToolbox.png","medium-width":464,"medium-height":196,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Default_ArcGISToolbox.png","medium_large-width":597,"medium_large-height":252,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Default_ArcGISToolbox.png","large-width":597,"large-height":252,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Default_ArcGISToolbox.png","1536x1536-width":597,"1536x1536-height":252,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Default_ArcGISToolbox.png","2048x2048-width":597,"2048x2048-height":252,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Default_ArcGISToolbox.png","card_image-width":597,"card_image-height":252,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Default_ArcGISToolbox.png","wide_image-width":597,"wide_image-height":252}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>You can also add other toolboxes including legacy toolboxes (.tbx) and Python toolboxes (.pyt) to your project or view toolboxes in your project folders or <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/projects\/project-favorites.htm\" target=\"_blank\" rel=\"noopener\">Favorites<\/a><\/span>.<\/p>\n<p>Similar to a new toolbox you\u2019d buy at a hardware store, you should fill your Pro toolbox with useful tools, like custom script and model tools. Custom tools give you the power to automate and streamline both simple and complex workflows that string together sequences of geoprocessing tools.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2612882,"id":2612882,"title":"toolbox_needs_tools","filename":"toolbox_needs_tools.png","filesize":21854,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/toolbox_needs_tools.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\/toolbox_needs_tools","alt":"","author":"314022","description":"","caption":"","name":"toolbox_needs_tools","status":"inherit","uploaded_to":2608682,"date":"2024-12-04 17:59:07","modified":"2024-12-04 17:59:07","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":359,"height":180,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/toolbox_needs_tools-213x180.png","thumbnail-width":213,"thumbnail-height":180,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/toolbox_needs_tools.png","medium-width":359,"medium-height":180,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/toolbox_needs_tools.png","medium_large-width":359,"medium_large-height":180,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/toolbox_needs_tools.png","large-width":359,"large-height":180,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/toolbox_needs_tools.png","1536x1536-width":359,"1536x1536-height":180,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/toolbox_needs_tools.png","2048x2048-width":359,"2048x2048-height":180,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/toolbox_needs_tools.png","card_image-width":359,"card_image-height":180,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/toolbox_needs_tools.png","wide_image-width":359,"wide_image-height":180}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>For example, here is a custom script tool, <code>Delete Features By Attribute<\/code>, that deletes features based on a query. There are multiple ways to create this tool; you can use multiple geoprocessing tools in sequence, or you can use <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/arcpy\/data-access\/what-is-the-data-access-module-.htm\" target=\"_blank\" rel=\"noopener\">arcpy data access (da)<\/a><\/span> cursors to delete records from a dataset.<\/p>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2609462,"id":2609462,"title":"Delete_Feautres_By_Attributes","filename":"Delete_Feautres_By_Attributes.png","filesize":14255,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\/delete_feautres_by_attributes","alt":"Example of a custom script tool","author":"314022","description":"","caption":"Custom script tool: Delete Features by Attributes","name":"delete_feautres_by_attributes","status":"inherit","uploaded_to":2608682,"date":"2024-12-03 20:26:19","modified":"2024-12-03 20:26:58","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":293,"height":320,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes.png","medium-width":239,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes.png","medium_large-width":293,"medium_large-height":320,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes.png","large-width":293,"large-height":320,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes.png","1536x1536-width":293,"1536x1536-height":320,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes.png","2048x2048-width":293,"2048x2048-height":320,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes.png","card_image-width":293,"card_image-height":320,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes.png","wide_image-width":293,"wide_image-height":320}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>You can create this script tool in a toolbox by following these steps:<\/p>\n<p><strong>1)\u00a0<\/strong> Right-click a toolbox, then select <strong>New<\/strong> &gt; <strong>Script<\/strong><br \/>\nThis opens the <strong>Tool Properties<\/strong> dialog box, where you can set the tool\u2019s general properties, parameters, execution and validation code, and environments.<\/p>\n<p><strong>2)<\/strong> On the <span style=\"color: #005ab5\"><strong><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/create-a-python-script-tool.htm#ESRI_SECTION1_0E7C909B7BB843B0A2341DD8F42F48F6\" target=\"_blank\" rel=\"noopener\">General<\/a><\/strong><\/span> tab, provide the tool with a <strong>Name<\/strong> and <strong>Label<\/strong>.<\/p>\n<p><strong>3)<\/strong> All tools have parameters, which are the input and output values or conditions that define how a tool runs. On the <span style=\"color: #005ab5\"><strong><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/create-a-python-script-tool.htm#ESRI_SECTION1_30B095D2B3D7403D9760BBEE7DB2B4D8\" target=\"_blank\" rel=\"noopener\">Parameters<\/a><\/strong><\/span> tab, you can set the tool\u2019s parameter properties in a grid. This custom tool has three parameters:<\/p>\n<table width=\"654\">\n<tbody>\n<tr>\n<td style=\"background-color: #ebebeb\" width=\"132\"><strong>Label<\/strong><\/td>\n<td style=\"background-color: #ebebeb\" width=\"132\"><strong>Name<\/strong><\/td>\n<td style=\"background-color: #ebebeb\" width=\"120\"><strong>Data Type<\/strong><\/td>\n<td style=\"background-color: #ebebeb\" width=\"78\"><strong>Type<\/strong><\/td>\n<td style=\"background-color: #ebebeb\" width=\"82\"><strong>Direction<\/strong><\/td>\n<td style=\"background-color: #ebebeb\" width=\"110\"><strong>Dependency<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #f7f8f8\" width=\"132\">Input Feature<\/td>\n<td style=\"background-color: #f7f8f8\" width=\"132\">Input_Feature<\/td>\n<td style=\"background-color: #f7f8f8\" width=\"120\">Table View<\/td>\n<td style=\"background-color: #f7f8f8\" width=\"78\">Required<\/td>\n<td style=\"background-color: #f7f8f8\" width=\"82\">Input<\/td>\n<td style=\"background-color: #f7f8f8\" width=\"110\"><\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #c4dcee\" width=\"132\">Expression<\/td>\n<td style=\"background-color: #c4dcee\" width=\"132\">Expression<\/td>\n<td style=\"background-color: #c4dcee\" width=\"120\">SQL Expression<\/td>\n<td style=\"background-color: #c4dcee\" width=\"78\">Optional<\/td>\n<td style=\"background-color: #c4dcee\" width=\"82\">Input<\/td>\n<td style=\"background-color: #c4dcee\" width=\"110\">Input_Feature<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #f7f8f8\" width=\"132\">Updated Feature<\/td>\n<td style=\"background-color: #f7f8f8\" width=\"132\">Updated_Feature<\/td>\n<td style=\"background-color: #f7f8f8\" width=\"120\">Table View<\/td>\n<td style=\"background-color: #f7f8f8\" width=\"78\">Derived<\/td>\n<td style=\"background-color: #f7f8f8\" width=\"82\">Output<\/td>\n<td style=\"background-color: #f7f8f8\" width=\"110\">Input_Feature<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Note<\/strong>: The tool needs a <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/arcpy\/geoprocessing_and_python\/setting-script-tool-parameters.htm#:~:text=Derived%E2%80%94Use%20derived%20parameters%20for%20the%20following%20cases\">derived<\/a><\/span> parameter with a dependency on the input parameter. This indicates the dataset specified as the input is updated by the tool\u2019s code, and it allows the tool\u2019s updated output to be chained to other tools in ModelBuilder.<br \/>\n<a name=\"ExecutionCode\"><\/a><br \/>\n4) If you were to try to run the tool at this point, it would not work. When someone clicks <strong>Run<\/strong> on the tool dialog box, the tool runs a script to process the parameter values. Open the <a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/create-a-python-script-tool.htm#ESRI_SECTION1_9A70368A919E4AB0B4F350CAB192C5F5\" target=\"_blank\" rel=\"noopener\"><strong><span style=\"color: #005ab5\">Execution<\/span><\/strong><\/a> tab to see the script editor. Below is the tool\u2019s execution code:<\/p>\n"},{"acf_fc_layout":"sidebar","content":"<p><span style=\"color: #3366ff\">import<\/span> arcpy<\/p>\n<p><span style=\"color: #3366ff\">def<\/span> DeleteFeaturesByAttribute(in_feature, expression):<\/p>\n<p style=\"padding-left: 40px\">select_features = arcpy.management.SelectLayerByAttribute(<br \/>\nin_layer_or_view=in_feature,<br \/>\nselection_type=&#8221;NEW_SELECTION&#8221;,<br \/>\nwhere_clause=expression<br \/>\n)<br \/>\n<span style=\"color: #339966\">#You can delete records using DeleteRows<\/span><br \/>\n<span style=\"color: #339966\">#arcpy.management.DeleteRows(<\/span><br \/>\n<span style=\"color: #339966\">#in_rows=select_features<\/span><br \/>\n<span style=\"color: #339966\">#)<\/span><\/p>\n<p style=\"padding-left: 40px\">\n<span style=\"color: #339966\"># Or you can delete records using an arcpy.da UpdateCursor<\/span><br \/>\n<span style=\"color: #339966\"># First get the workspace containing the input dataset<\/span><br \/>\nworkspace = arcpy.Describe(in_feature).path<br \/>\neditor = arcpy.da.Editor(workspace)<\/p>\n<p style=\"padding-left: 40px\"><span style=\"color: #339966\"># Start an edit session<\/span><br \/>\neditor.startEditing(with_undo=True)<br \/>\nwith arcpy.da.UpdateCursor(in_feature, &#8220;OID@&#8221;) as update_cursor:<\/p>\n<p style=\"padding-left: 80px\">for row in update_cursor:<\/p>\n<p style=\"padding-left: 120px\">update_cursor.deleteRow()<\/p>\n<p style=\"padding-left: 40px\"><span style=\"color: #339966\"># Stop the edit session and save the changes<\/span><\/p>\n<p style=\"padding-left: 40px\">editor.stopEditing(save_changes=True)<\/p>\n<p style=\"padding-left: 40px\"><span style=\"color: #3366ff\">return<\/span><\/p>\n<p><span style=\"color: #3366ff\">if<\/span> <span style=\"color: #993366\">__name__ <span style=\"color: #000000\">==<\/span> &#8220;__main__&#8221;:<\/span><\/p>\n<p style=\"padding-left: 40px\"><span style=\"color: #339966\">#Read the parameter values specified by the user into the script<\/span><br \/>\nin_feature = arcpy.GetParameter(0)<br \/>\nexpression = arcpy.GetParameterAsText(1)<\/p>\n<p style=\"padding-left: 40px\">DeleteFeaturesByAttribute(in_feature, expression)<br \/>\narcpy.SetParameterAsText(1, in_feature)<\/p>\n","image_reference":false,"layout":"standard","image_reference_figure":"","snippet":"","spotlight_name":"","section_title":"","position":"Center","spotlight_image":false},{"acf_fc_layout":"content","content":"<p><a name=\"DocumentCustomTools\"><\/a><\/p>\n<h1>Use Tool Properties to Document Custom Tools<\/h1>\n<p>If you want to share your tools with other people, you should provide information, illustrations, and details about how the tool works. You can <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/document-a-custom-tool.htm\">document custom tools<\/a><\/span> in the <strong>Tool Properties<\/strong> dialog box or the tool <strong>metadata<\/strong>.<\/p>\n<p>Over the past few releases, we\u2019ve added and refined several features in the <strong>Tool Properties <\/strong>dialog box for documenting custom geoprocessing tools:<\/p>\n<p><strong>\u2022\u00a0 <\/strong>Use the <strong>General<\/strong> tab to set a <strong>Description<\/strong>, <strong>Summary<\/strong>, <strong>Illustration<\/strong>, and <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/geoprocessing-enhancements-in-arcgis-pro-for-arcmap-users\/#:~:text=Icons%20for%20custom%20script%20and%20model%20tools\"><strong>Icon<\/strong><\/a><\/span> for custom tools. The <strong>Description<\/strong> will display when you search for the tool, and the <strong>Summary<\/strong> and <strong>Illustration<\/strong> will display on the tool dialog box when you hover the tool help.<\/p>\n<p><strong>\u2022\u00a0 <\/strong>On the <strong>Parameters<\/strong> tab, click the <strong>Description<\/strong> button\u00a0<img decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/GenericPencil16-2.png\" alt=\"pencil\" \/> on each parameter to set <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/arcpy\/geoprocessing_and_python\/setting-script-tool-parameters.htm#ESRI_SECTION1_3622AFB2795B4405937786134B249AF9\">parameter descriptions<\/a><\/span>. This content will display when you hover the information icon \u00a0next to the parameters on the tool dialog box.<\/p>\n"},{"acf_fc_layout":"kaltura","video_id":"1_5aviidru","time":false,"start":0,"stop":""},{"acf_fc_layout":"content","content":"<p><a name=\"CustomToolAttributes\"><\/a><\/p>\n<h1>Attribute Options: Enable Undo for Custom Tools<\/h1>\n<p>In <strong>ArcGIS Pro 3.4<\/strong>, custom tools have four new <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/create-a-python-script-tool.htm#ESRI_SECTION1_0E7C909B7BB843B0A2341DD8F42F48F6\">Attributes<\/a><\/span> to control the tool\u2019s user experience:<\/p>\n<p><strong>\u2022\u00a0 Show banner that tool modifies the input data<\/strong><\/p>\n<p><strong>\u2022\u00a0 Do not add tool outputs to map<\/strong><\/p>\n<p><strong>\u2022\u00a0 Show Enable Undo toggle<\/strong><\/p>\n<p><strong>\u2022\u00a0 Show banner that tool consumes ArcGIS credits<\/strong><\/p>\n<p>For the <code>Delete Features By Attribute<\/code> example, I\u2019ve checked the attributes: <strong>Show banner that tool modifies the input data <\/strong>and<strong> Show Enable Undo toggle<\/strong>.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2609692,"id":2609692,"title":"atribute_options","filename":"atribute_options.png","filesize":4871,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/atribute_options.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\/atribute_options","alt":"Custom tool Attributes","author":"314022","description":"","caption":"Custom tool Attributes in the Tool Properties dialog box.","name":"atribute_options","status":"inherit","uploaded_to":2608682,"date":"2024-12-03 21:08:53","modified":"2024-12-04 16:26:41","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":380,"height":92,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/atribute_options-213x92.png","thumbnail-width":213,"thumbnail-height":92,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/atribute_options.png","medium-width":380,"medium-height":92,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/atribute_options.png","medium_large-width":380,"medium_large-height":92,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/atribute_options.png","large-width":380,"large-height":92,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/atribute_options.png","1536x1536-width":380,"1536x1536-height":92,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/atribute_options.png","2048x2048-width":380,"2048x2048-height":92,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/atribute_options.png","card_image-width":380,"card_image-height":92,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/atribute_options.png","wide_image-width":380,"wide_image-height":92}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>With these attributes set, a banner will display at the top of the tool dialog box, and the <strong>Enable<\/strong> <strong>Undo<\/strong> toggle will appear next to the <strong>Run<\/strong> button.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2609722,"id":2609722,"title":"Delete_Feautres_By_Attributes_withbannerandundo","filename":"Delete_Feautres_By_Attributes_withbannerandundo.png","filesize":18214,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes_withbannerandundo.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\/delete_feautres_by_attributes_withbannerandundo","alt":"Custom tool with enable undo button.","author":"314022","description":"","caption":"You can add a banner message and the enable undo button to custom tools.","name":"delete_feautres_by_attributes_withbannerandundo","status":"inherit","uploaded_to":2608682,"date":"2024-12-03 21:12:52","modified":"2024-12-03 21:13:20","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":293,"height":385,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes_withbannerandundo-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes_withbannerandundo.png","medium-width":199,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes_withbannerandundo.png","medium_large-width":293,"medium_large-height":385,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes_withbannerandundo.png","large-width":293,"large-height":385,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes_withbannerandundo.png","1536x1536-width":293,"1536x1536-height":385,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes_withbannerandundo.png","2048x2048-width":293,"2048x2048-height":385,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes_withbannerandundo.png","card_image-width":293,"card_image-height":385,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/Delete_Feautres_By_Attributes_withbannerandundo.png","wide_image-width":293,"wide_image-height":385}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>In the execution code, the script tool can either use the <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/3.3\/tool-reference\/data-management\/delete-rows.htm\" target=\"_blank\" rel=\"noopener\"><strong>Delete Rows<\/strong><\/a><\/span> geoprocessing tool (commented out <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"#ExecutionCode\">above<\/a><\/span>) or the <code>arcpy.da<\/code> cursor to perform the edits. Depending on the method used, set the execution script as follows:<\/p>\n<p><strong>\u2022\u00a0 Geoprocessing tool<\/strong>\u2013If a custom tool uses a geoprocessing tool to perform edits, no execution code changes are needed for the <strong>Enable Undo<\/strong> toggle to work.<\/p>\n<p><strong>\u2022\u00a0 <code>arcpy.da<\/code> cursor<\/strong>\u2013If a script tool uses an arcpy.da cursor to perform edits, the tool\u2019s execution code must contain the <span style=\"color: #005ab5\"><code><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/arcpy\/data-access\/editor.htm\" target=\"_blank\" rel=\"noopener\">Editor<\/a><\/code><\/span> class and the <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/arcpy\/data-access\/editor.htm#M2_GUID-AAE0637D-9CE2-4DAF-A306-BD21F61AF4FB\" target=\"_blank\" rel=\"noopener\"><code>startEditing<\/code><\/a><\/span> method to use edit sessions. Set the <code>Editor<\/code> class to the workspace containing the dataset being edited. When the code calls to the <code>startEditing<\/code> method, set the <code>with_undo<\/code> argument to <code>True<\/code> or leave it blank, so the edit can be undone after the tool runs.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2613632,"id":2613632,"title":"enable_undo_in_a_customtool","filename":"enable_undo_in_a_customtool.gif","filesize":5488919,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/enable_undo_in_a_customtool.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\/enable_undo_in_a_customtool","alt":"Run your custom tool with Enable Undo","author":"314022","description":"","caption":"Run your custom tool with Enable Undo.","name":"enable_undo_in_a_customtool","status":"inherit","uploaded_to":2608682,"date":"2024-12-04 21:28:08","modified":"2024-12-04 21:28:35","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":824,"height":450,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/enable_undo_in_a_customtool-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/enable_undo_in_a_customtool.gif","medium-width":464,"medium-height":253,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/enable_undo_in_a_customtool.gif","medium_large-width":768,"medium_large-height":419,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/enable_undo_in_a_customtool.gif","large-width":824,"large-height":450,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/enable_undo_in_a_customtool.gif","1536x1536-width":824,"1536x1536-height":450,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/enable_undo_in_a_customtool.gif","2048x2048-width":824,"2048x2048-height":450,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/enable_undo_in_a_customtool.gif","card_image-width":824,"card_image-height":450,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/enable_undo_in_a_customtool.gif","wide_image-width":824,"wide_image-height":450}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><a name=\"CustomToolEnvironments\"><\/a><\/p>\n<h1><strong>Environments<\/strong><\/h1>\n<p><span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/geoprocessing-environment-settings.htm#:~:text=Only%20certain%20environment%20settings%20will%20be%20used%20by%20a%20given%20geoprocessing%20tool.\" target=\"_blank\" rel=\"noopener\">Tool environments<\/a><\/span> are additional, <em>optional<\/em> settings that modify how a tool runs.<\/p>\n<p>In ArcGIS Pro 3.3, the <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/create-a-python-script-tool.htm#ESRI_SECTION1_D72D310B532B4987805022413DBE68FA\" target=\"_blank\" rel=\"noopener\"><strong>Environments<\/strong><\/a><\/span> tab was added to the <strong>Tool Properties<\/strong> dialog box so you can choose the environment settings supported by your custom tool and displayed in the tool environments. By <em>default<\/em>, all environments are listed as supported for custom tools. Choosing a subset of environments can make your custom tool more user-friendly. Instead of displaying all 40+ environment settings, you can display a few that are relevant to your custom tool<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2609842,"id":2609842,"title":"custom_tool_env","filename":"custom_tool_env.png","filesize":42776,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/custom_tool_env.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\/custom_tool_env","alt":"Set the custom tool Environments","author":"314022","description":"","caption":"The Environments tab in the Tool Properties and tool dialog boxes.","name":"custom_tool_env","status":"inherit","uploaded_to":2608682,"date":"2024-12-03 21:23:01","modified":"2024-12-03 23:22:48","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1178,"height":400,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/custom_tool_env-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/custom_tool_env.png","medium-width":464,"medium-height":158,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/custom_tool_env.png","medium_large-width":768,"medium_large-height":261,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/custom_tool_env.png","large-width":1178,"large-height":400,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/custom_tool_env.png","1536x1536-width":1178,"1536x1536-height":400,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/custom_tool_env.png","2048x2048-width":1178,"2048x2048-height":400,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/custom_tool_env-826x280.png","card_image-width":826,"card_image-height":280,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/custom_tool_env.png","wide_image-width":1178,"wide_image-height":400}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><a name=\"ParameterControls\"><\/a><\/p>\n<h1>Customize Parameter Controls using the controlCLSID property<\/h1>\n<p>Parameters are like the control panel for your tools, where you set the inputs, outputs, fields, distances, or make other modifications to guide how users work with your tool. In custom script tools and Python toolbox tools, you can modify the interface of your <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/arcpy\/geoprocessing_and_python\/parameter-controls.htm\" target=\"_blank\" rel=\"noopener\">parameter controls<\/a><\/span> to potentially make your tools more interactive and easier to use.<\/p>\n"},{"acf_fc_layout":"content","content":"<p><strong>Note<\/strong>: Parameter controls cannot be customized in <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/create-a-model-tool.htm\" target=\"_blank\" rel=\"noopener\">model<\/a><\/span> tools. Model parameters typically come from the geoprocessing tools inside the model, and the control is inherited from the original tool.<\/p>\n<p>To modify a parameter control, you must set the <code>controlCLSID<\/code> property in the tool\u2019s <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/create-a-python-script-tool.htm#ESRI_SECTION1_4D46DC5B5975422AAE671EFD57454374\" target=\"_blank\" rel=\"noopener\">validation<\/a><\/span> code with a value that is compatible with the parameters <strong>Data Type<\/strong> property.<\/p>\n<p>Alternative controls are supported only by specific parameter data types. For example, say you have a tool with a parameter that uses a <code>Double<\/code> or <code>Long<\/code> data type with a defined minimum and maximum value (Range Filter).<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2609902,"id":2609902,"title":"param_control_01","filename":"param_control_01.png","filesize":17539,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/param_control_01.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\/param_control_01","alt":"Set a filter on a numeric parameter","author":"314022","description":"","caption":"Set a filter on a numeric parameter.","name":"param_control_01","status":"inherit","uploaded_to":2608682,"date":"2024-12-03 21:26:38","modified":"2024-12-03 21:27:00","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":872,"height":210,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/param_control_01-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/param_control_01.png","medium-width":464,"medium-height":112,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/param_control_01.png","medium_large-width":768,"medium_large-height":185,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/param_control_01.png","large-width":872,"large-height":210,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/param_control_01.png","1536x1536-width":872,"1536x1536-height":210,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/param_control_01.png","2048x2048-width":872,"2048x2048-height":210,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/param_control_01-826x199.png","card_image-width":826,"card_image-height":199,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/param_control_01.png","wide_image-width":872,"wide_image-height":210}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>You can find which controls are compatible with <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/arcpy\/geoprocessing_and_python\/parameter-controls.htm#ESRI_SECTION1_6C08E75AC99E493095013E65E89D4F3E\" target=\"_blank\" rel=\"noopener\">numeric<\/a><\/span> parameters, then use a slider bar control by specifying a <code>controlCLSID<\/code>\u00a0value of <code>{C8C46E43-3D27-4485-9B38-A49F3AC588D9}<\/code>.<\/p>\n"},{"acf_fc_layout":"sidebar","content":"","image_reference":false,"layout":"code_snippet","image_reference_figure":"","snippet":"class ToolValidator:\r\n  # Class to add custom behavior and properties to the tool and tool parameters.\r\n\r\n    def __init__(self):\r\n        # Set self.params for use in other validation methods.\r\n        self.params = arcpy.GetParameterInfo()\r\n        self.params[2].controlCLSID = '{C8C46E43-3D27-4485-9B38-A49F3AC588D9}'","spotlight_name":"","section_title":"","position":"Center","spotlight_image":false},{"acf_fc_layout":"content","content":"<p>This provides a more visual and interactive way for users to select the parameter values in your custom tool.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2610082,"id":2610082,"title":"cnt_ovrlping_ft_range","filename":"cnt_ovrlping_ft_range.png","filesize":13742,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/cnt_ovrlping_ft_range.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\/cnt_ovrlping_ft_range","alt":"slider bar control","author":"314022","description":"","caption":"Add a slider bar control to your custom tools","name":"cnt_ovrlping_ft_range","status":"inherit","uploaded_to":2608682,"date":"2024-12-03 21:45:31","modified":"2024-12-03 21:46:40","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":293,"height":298,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/cnt_ovrlping_ft_range-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/cnt_ovrlping_ft_range.png","medium-width":257,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/cnt_ovrlping_ft_range.png","medium_large-width":293,"medium_large-height":298,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/cnt_ovrlping_ft_range.png","large-width":293,"large-height":298,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/cnt_ovrlping_ft_range.png","1536x1536-width":293,"1536x1536-height":298,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/cnt_ovrlping_ft_range.png","2048x2048-width":293,"2048x2048-height":298,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/cnt_ovrlping_ft_range.png","card_image-width":293,"card_image-height":298,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/cnt_ovrlping_ft_range.png","wide_image-width":293,"wide_image-height":298}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h1>Summary<\/h1>\n<p>In ArcGIS Pro, you can create custom tools using Python or ModelBuilder, and you can use the <strong>Tool Properties<\/strong> dialog box to configure your tool\u2019s properties. Over the past few releases, we\u2019ve added more options to make it easier to document and design your custom tools. You can use <strong>Tool Properties<\/strong> to <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/document-a-custom-tool.htm\" target=\"_blank\" rel=\"noopener\">document<\/a><\/span> your tools, set tool <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/create-a-python-script-tool.htm#ESRI_SECTION1_0E7C909B7BB843B0A2341DD8F42F48F6\" target=\"_blank\" rel=\"noopener\">attributes<\/a><\/span>, tool <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/analysis\/geoprocessing\/basics\/create-a-python-script-tool.htm#ESRI_SECTION1_D72D310B532B4987805022413DBE68FA\" target=\"_blank\" rel=\"noopener\">environments<\/a><\/span>, and modify the <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/arcpy\/geoprocessing_and_python\/parameter-controls.htm\" target=\"_blank\" rel=\"noopener\">parameter controls<\/a><\/span>.<\/p>\n<p>To see what else is new in <strong>ArcGIS Pro 3.4<\/strong>, please visit the <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/get-started\/whats-new-in-arcgis-pro.htm#ESRI_SECTION1_463DCA76A448429C8EE22ED94F1E70B0\" target=\"_blank\" rel=\"noopener\">What\u2019s New documentation<\/a><\/span> and post your questions in the <span style=\"color: #005ab5\"><a style=\"color: #005ab5\" href=\"https:\/\/community.esri.com\/t5\/arcgis-pro\/ct-p\/arcgis-pro\" target=\"_blank\" rel=\"noopener\">ArcGIS Pro board<\/a><\/span> in the Esri Community.<\/p>\n"}],"related_articles":[{"ID":2604992,"post_author":"3981","post_date":"2024-11-27 17:40:26","post_date_gmt":"2024-11-28 01:40:26","post_content":"","post_title":"What\u2019s New from the Geodatabase Team (November 2024)","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"whats-new-from-the-geodatabase-team-november-2024","to_ping":"","pinged":"","post_modified":"2024-12-11 17:18:44","post_modified_gmt":"2024-12-12 01:18:44","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2604992","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":2593202,"post_author":"4051","post_date":"2024-11-20 14:00:15","post_date_gmt":"2024-11-20 22:00:15","post_content":"","post_title":"What's New for Spatial Analyst in ArcGIS Pro 3.4","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"whats-new-for-spatial-analyst-in-arcgis-pro-3-4","to_ping":"","pinged":"","post_modified":"2024-11-20 15:13:20","post_modified_gmt":"2024-11-20 23:13:20","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2593202","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"}],"show_article_image":true,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/12\/card_cutomtoolblog.png","wide_image":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Build Better Custom Tools with Enable Undo in ArcGIS Pro<\/title>\n<meta name=\"description\" content=\"Learn how to build a custom geoprocessing tool and about some new features, like Enable Undo for Script and Model tools, in ArcGIS Pro 3.4\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Build Better Custom Geoprocessing tools (now with Enable Undo) in ArcGIS Pro!\" \/>\n<meta property=\"og:description\" content=\"Learn how to build a custom geoprocessing tool and about some new features, like Enable Undo for Script and Model tools, in ArcGIS Pro 3.4\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-12T21:50:15+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\"},\"author\":{\"name\":\"Margaret Crawford\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/6e92f41055bccb65bf59c3eaccebea25\"},\"headline\":\"Build Better Custom Geoprocessing tools (now with Enable Undo) in ArcGIS Pro!\",\"datePublished\":\"2024-12-09T14:20:28+00:00\",\"dateModified\":\"2026-01-12T21:50:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\"},\"wordCount\":12,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"ArcGIS Pro 3.4\",\"geoprocessing\",\"geoprocessing tool\",\"ModelBuilder\",\"python\"],\"articleSection\":[\"Analytics\",\"Announcements\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\",\"name\":\"Build Better Custom Tools with Enable Undo in ArcGIS Pro\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2024-12-09T14:20:28+00:00\",\"dateModified\":\"2026-01-12T21:50:15+00:00\",\"description\":\"Learn how to build a custom geoprocessing tool and about some new features, like Enable Undo for Script and Model tools, in ArcGIS Pro 3.4\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Build Better Custom Geoprocessing tools (now with Enable Undo) in ArcGIS Pro!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/6e92f41055bccb65bf59c3eaccebea25\",\"name\":\"Margaret Crawford\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/03\/PXL_20230310_184124630.PORTRAIT234-465x465.jpg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/03\/PXL_20230310_184124630.PORTRAIT234-465x465.jpg\",\"caption\":\"Margaret Crawford\"},\"description\":\"Margaret is a Product Engineer on the Geoprocessing team. Her passion for GIS began with her interest in human-environmental relationships, and her graduate thesis studied the growing impact of flood-induced cascading disasters caused by sea level rise. Margaret leverages her foundation in research methodologies and spatial analysis techniques in her role at Esri, where she creates written content and demonstrations on features in ArcGIS Pro. She also contributes to refining and redesigning geoprocessing tools and functions. In her personal life, Margaret is a loving cat parent to three beautiful cats, and enjoys swimming and snowboarding.\",\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Product Engineer\",\"worksFor\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/mcrawford\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Build Better Custom Tools with Enable Undo in ArcGIS Pro","description":"Learn how to build a custom geoprocessing tool and about some new features, like Enable Undo for Script and Model tools, in ArcGIS Pro 3.4","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro","og_locale":"en_US","og_type":"article","og_title":"Build Better Custom Geoprocessing tools (now with Enable Undo) in ArcGIS Pro!","og_description":"Learn how to build a custom geoprocessing tool and about some new features, like Enable Undo for Script and Model tools, in ArcGIS Pro 3.4","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2026-01-12T21:50:15+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","twitter_misc":{"Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro"},"author":{"name":"Margaret Crawford","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/6e92f41055bccb65bf59c3eaccebea25"},"headline":"Build Better Custom Geoprocessing tools (now with Enable Undo) in ArcGIS Pro!","datePublished":"2024-12-09T14:20:28+00:00","dateModified":"2026-01-12T21:50:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro"},"wordCount":12,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["ArcGIS Pro 3.4","geoprocessing","geoprocessing tool","ModelBuilder","python"],"articleSection":["Analytics","Announcements"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro","name":"Build Better Custom Tools with Enable Undo in ArcGIS Pro","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2024-12-09T14:20:28+00:00","dateModified":"2026-01-12T21:50:15+00:00","description":"Learn how to build a custom geoprocessing tool and about some new features, like Enable Undo for Script and Model tools, in ArcGIS Pro 3.4","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/build-custom-tools-in-arcgispro#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Build Better Custom Geoprocessing tools (now with Enable Undo) in ArcGIS Pro!"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/6e92f41055bccb65bf59c3eaccebea25","name":"Margaret Crawford","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/03\/PXL_20230310_184124630.PORTRAIT234-465x465.jpg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/03\/PXL_20230310_184124630.PORTRAIT234-465x465.jpg","caption":"Margaret Crawford"},"description":"Margaret is a Product Engineer on the Geoprocessing team. Her passion for GIS began with her interest in human-environmental relationships, and her graduate thesis studied the growing impact of flood-induced cascading disasters caused by sea level rise. Margaret leverages her foundation in research methodologies and spatial analysis techniques in her role at Esri, where she creates written content and demonstrations on features in ArcGIS Pro. She also contributes to refining and redesigning geoprocessing tools and functions. In her personal life, Margaret is a loving cat parent to three beautiful cats, and enjoys swimming and snowboarding.","knowsLanguage":["English"],"jobTitle":"Product Engineer","worksFor":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/author\/mcrawford"}]}},"text_date":"December 9, 2024","author_name":"Margaret Crawford","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/mcrawford","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/08\/Newsroom-Keyart-Wide-1920-x-1080.jpg","primary_product":"ArcGIS Pro","tag_data":[{"term_id":776862,"name":"ArcGIS Pro 3.4","slug":"arcgis-pro-3-4","term_group":0,"term_taxonomy_id":776862,"taxonomy":"post_tag","description":"","parent":0,"count":17,"filter":"raw"},{"term_id":24321,"name":"geoprocessing","slug":"geoprocessing","term_group":0,"term_taxonomy_id":24321,"taxonomy":"post_tag","description":"","parent":0,"count":129,"filter":"raw"},{"term_id":39401,"name":"geoprocessing tool","slug":"geoprocessing-tool","term_group":0,"term_taxonomy_id":39401,"taxonomy":"post_tag","description":"","parent":0,"count":9,"filter":"raw"},{"term_id":24331,"name":"ModelBuilder","slug":"modelbuilder","term_group":0,"term_taxonomy_id":24331,"taxonomy":"post_tag","description":"","parent":0,"count":28,"filter":"raw"},{"term_id":24341,"name":"python","slug":"python","term_group":0,"term_taxonomy_id":24341,"taxonomy":"post_tag","description":"","parent":0,"count":171,"filter":"raw"}],"category_data":[{"term_id":23341,"name":"Analytics","slug":"analytics","term_group":0,"term_taxonomy_id":23341,"taxonomy":"category","description":"","parent":0,"count":1328,"filter":"raw"},{"term_id":37101,"name":"Announcements","slug":"announcements","term_group":0,"term_taxonomy_id":37101,"taxonomy":"category","description":"","parent":0,"count":1962,"filter":"raw"}],"product_data":[{"term_id":36561,"name":"ArcGIS Pro","slug":"arcgis-pro","term_group":0,"term_taxonomy_id":36561,"taxonomy":"product","description":"","parent":0,"count":2036,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=arcgis-pro","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2608682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/314022"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=2608682"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2608682\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=2608682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=2608682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=2608682"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=2608682"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=2608682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}