{"id":655692,"date":"2020-02-07T06:21:38","date_gmt":"2020-02-07T14:21:38","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=655692"},"modified":"2024-11-11T12:31:13","modified_gmt":"2024-11-11T20:31:13","slug":"featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8","title":{"rendered":"FeatureSetByAssociations &#8211; New Utility Network Arcade API to work with Associations (2.5\/10.8)"},"author":7511,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[777102,23851,25741],"tags":[32551,36071],"industry":[],"product":[36571,36561,515312],"class_list":["post-655692","blog","type-blog","status-publish","format-standard","hentry","category-arcade","category-data-management","category-electric-gas","tag-arcade","tag-arcgis-utility-network-management-extension","product-arcgis-enterprise","product-arcgis-pro","product-utility-network"],"acf":{"short_description":"Work with utility network associations in Arcade with the new FeatureSetByAssociation API ","flexible_content":[{"acf_fc_layout":"content","content":"<p>As you may already know, Arcade is the official <a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-online\/mapping\/try-arcade-expression\/\">ArcGIS scripting language<\/a> and it is getting more powerful with each release.<\/p>\n<p>&nbsp;<\/p>\n<p>In ArcGIS Pro 2.5\/Enterprise 10.8 (Arcade 1.9) you can start using the new Arcade API <a href=\"https:\/\/developers.arcgis.com\/arcade\/function-reference\/data_functions\/#featuresetbyassociation\">FeatureSetByAssociation<\/a> which will allow you to work with utility network associations. In this blog we will go through how we used to work with association in Arcade, then introduce the new FeatureSetByAssociation API signature and finally we will work with the API in different context such as popup and attribute rules.<\/p>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"content","content":"<h1>The past&#8230;<\/h1>\n<p>Before this API, answering simple association questions such as how many devices are contained in this substation through containment associations was challenging. We would have to first open the association table. To do that, we need the name of the association table which is tricky since it is uniquely tagged with the utility network dataset id. Then we need to craft the correct filter predicate against that table to retrieve the association rows, and this is also tricky since we need to know when to use <strong>FROMGLOBALID<\/strong> vs <strong>TOGLOBALID<\/strong> and when to filter against terminals and not. Once we figure out the where clause and execute the query, we need to identify what rows belong to which class using an internal <strong>NetworkSourceID<\/strong>. Here is an example of Arcade script working with association prior to 2.5.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #998;font-style: italic\">\/\/Before the API<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> associationTable = FeatureSetByName($datastore, <span style=\"color: #d14\">\"unadmin.gdb.un_6_association\"<\/span>, [<span style=\"color: #d14\">\"FROMGLOBALID\"<\/span>, <span style=\"color: #d14\">\"TOGLOBALID\"<\/span>])\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> globalId = $feature.globalId;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> sourceId = <span style=\"color: #008080\">7<\/span> <span style=\"color: #998;font-style: italic\">\/\/ have to know the internal network source Id of the Device class<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/need to know how to build the filter predict correctly to get the content <\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> devicesRows = Filter(associationTable, <span style=\"color: #d14\">\"FROMGLOBAL = @globalId AND TONETWORKSOURCEID = @sourceId\"<\/span>)\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> devicesCount = count(devicesRows);\r\n<span style=\"color: #333;font-weight: bold\">return<\/span> devicesCount\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h1>featureSetByAssociation to the rescue<\/h1>\n<p>Well we know the pain, so we sat down and worked a design for a utility network specific Arcade API and here is the signature. Don\u2019t worry we will go through examples.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>featureSetByAssociation<\/strong>(<em>feature<\/em>,<\/p>\n<p><em>associationType<\/em>,<\/p>\n<p><em>terminalName? string = &#8220;&#8221; (null can be used)<\/em>) -&gt; FeatureSet<\/p>\n<p>&nbsp;<\/p>\n<p><strong>feature<\/strong>: The feature to perform the query against<\/p>\n<p><strong>associationType<\/strong>: A required parameter for association type and can the following string values.<\/p>\n<p>&#8220;<strong>connected<\/strong>&#8221; &#8211; will return the features connected to the specified feature via a connectivity association<\/p>\n<p>&#8220;<strong>container<\/strong>&#8221; &#8211; will return the features containing the specified feature through a containment association<\/p>\n<p>&#8220;<strong>content<\/strong>&#8221; &#8211; will return the features contained inside the specified feature through a containment association<\/p>\n<p>&#8220;<strong>structure<\/strong>&#8221; &#8211; will return the feature the specified feature is attached to through a structural attachment association<\/p>\n<p>&#8220;<strong>attached<\/strong>&#8221; &#8211; will return the features attached to the specified feature through a structural attachment association<\/p>\n<p><strong>terminalName<\/strong>: Optional parameter applicable for connectivity associations only, passing null or means ignore the terminalName. Passing the terminalName will filter against the terminal.<\/p>\n<p>&nbsp;<\/p>\n<p>Data about all the associations is returned:<\/p>\n<p>&nbsp;<\/p>\n<p>`<strong>objectId<\/strong>:` ObjectID of row in Association Table<\/p>\n<p>`<strong>globalId<\/strong>:` Global ID of Feature in other Table (ie TOGLOBALID or FROMGLOBALID )<\/p>\n<p>`<strong>isContentVisible<\/strong>:` 1 or 0; IsContentVisible of row in Association Table<\/p>\n<p>`<strong>className<\/strong>:` String based on value of (TONETWORKSOURCEID or FROMNETWORKSOURCEID )<\/p>\n<p>&nbsp;<\/p>\n<p>If we want to rewrite our substation example above using the new API it will look like this. <strong>$feature<\/strong> is the substation. See how much more elegant this is now.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> allContent = featuresetbyAssociation ($feature, <span style=\"color: #d14\">\"content\"<\/span>)\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> devicesRows = Filter(allContent, <span style=\"color: #d14\">\"className = 'Electric Device'\"<\/span>)\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> devicesCount =  count(devicesRows);\r\n<span style=\"color: #333;font-weight: bold\">return<\/span> devicesCount\r\n\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h2>FeatureSetByAssociation in Popup Profile<\/h2>\n<p>Using Custom Popups in ArcGIS Pro we will create a set of arcade expressions on different layers. Consider the following utility network map.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":655722,"id":655722,"title":"Transformer Bank","filename":"1.png","filesize":27720,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8\/1-19","alt":"Transformer Bank","author":"7511","description":"Transformer Bank","caption":"Transformer Bank","name":"1-19","status":"inherit","uploaded_to":655692,"date":"2019-11-15 15:53:22","modified":"2019-11-15 15:53:37","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":801,"height":524,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/1-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/1.png","medium-width":399,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/1.png","medium_large-width":768,"medium_large-height":502,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/1.png","large-width":801,"large-height":524,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/1.png","1536x1536-width":801,"1536x1536-height":524,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/1.png","2048x2048-width":801,"2048x2048-height":524,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/1-711x465.png","card_image-width":711,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/1.png","wide_image-width":801,"wide_image-height":524}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>Structural Association<\/h2>\n<p>In the Pole layer, I have configured 4 popup expressions that uses structural association as follows:<\/p>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":655732,"id":655732,"title":"Structural associations","filename":"2.png","filesize":26212,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/2.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8\/2-20","alt":"Structural associations","author":"7511","description":"Structural associations","caption":"Structural associations","name":"2-20","status":"inherit","uploaded_to":655692,"date":"2019-11-15 15:54:49","modified":"2019-11-15 15:55: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":918,"height":527,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/2-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/2.png","medium-width":455,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/2.png","medium_large-width":768,"medium_large-height":441,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/2.png","large-width":918,"large-height":527,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/2.png","1536x1536-width":918,"1536x1536-height":527,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/2.png","2048x2048-width":918,"2048x2048-height":527,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/2-810x465.png","card_image-width":810,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/2.png","wide_image-width":918,"wide_image-height":527}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h3>#Attached Assets<\/h3>\n<p>An expression that will return all assets attached to the pole being explored.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> attachedRows = FeatureSetByAssociation($feature, <span style=\"color: #d14\">\"attached\"<\/span>)\r\n\r\n<span style=\"color: #333;font-weight: bold\">return<\/span> count(attachedRows);\r\n\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h3>#Attached Devices<\/h3>\n<p>An expression that will return all devices attached to the pole being explored.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> attachedRows = FeatureSetByAssociation($feature, <span style=\"color: #d14\">\"attached\"<\/span>)\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> devices = Filter(attachedRows, <span style=\"color: #d14\">\"className = 'ElectricDistribution Device'\"<\/span>);\r\n<span style=\"color: #333;font-weight: bold\">return<\/span> count(devices);\r\n\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h3>#Attached Junctions<\/h3>\n<p>An expression that will return all Junctions attached to the pole being explored<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> attachedRows = FeatureSetByAssociation($feature, <span style=\"color: #d14\">\"attached\"<\/span>)\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> junctions = Filter(attachedRows, <span style=\"color: #d14\">\"className = 'ElectricDistribution Junction'\"<\/span>);\r\n<span style=\"color: #333;font-weight: bold\">return<\/span> count(junctions);\r\n\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h3>#Attached Assemblies<\/h3>\n<p>An expression that will return all Assemblies attached to the pole being explored<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> attachedRows = FeatureSetByAssociation($feature, <span style=\"color: #d14\">\"attached\"<\/span>)\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> junctions = Filter(attachedRows, <span style=\"color: #d14\">\"className = 'ElectricDistribution Assembly'\"<\/span>);\r\n<span style=\"color: #333;font-weight: bold\">return<\/span> count(junctions);\r\n\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h2>Connectivity Association<\/h2>\n<p>On the transformer layer I have configured two pop up expressions to demonstrate connectivity associations as follows<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":655752,"id":655752,"title":"connectivity associations","filename":"3-1.png","filesize":28829,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/3-1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8\/3-21","alt":"connectivity associations","author":"7511","description":"connectivity associations","caption":"connectivity associations","name":"3-21","status":"inherit","uploaded_to":655692,"date":"2019-11-15 15:58:43","modified":"2019-11-15 15:58: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":1148,"height":586,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/3-1-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/3-1.png","medium-width":464,"medium-height":237,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/3-1.png","medium_large-width":768,"medium_large-height":392,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/3-1.png","large-width":1148,"large-height":586,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/3-1.png","1536x1536-width":1148,"1536x1536-height":586,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/3-1.png","2048x2048-width":1148,"2048x2048-height":586,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/3-1-826x422.png","card_image-width":826,"card_image-height":422,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/3-1.png","wide_image-width":1148,"wide_image-height":586}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #333;font-weight: bold\">var<\/span> connectedRows = FeatureSetByAssociation($feature, <span style=\"color: #d14\">\"connected\"<\/span>, <span style=\"color: #d14\">\"High\"<\/span>);\r\n<span style=\"color: #333;font-weight: bold\">return<\/span> count(connectedRows);\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h3>#Low Side Assets<\/h3>\n<p>An expression that returns all assets that have connectivity associations with the low side terminal of the transformer.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> connectedRows = FeatureSetByAssociation($feature, <span style=\"color: #d14\">\"connected\"<\/span>, <span style=\"color: #d14\">\"Low\"<\/span>);\r\n<span style=\"color: #333;font-weight: bold\">return<\/span> count(connectedRows);\r\n\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h2>Containment Association<\/h2>\n<p>Finally, I have a popup expression on the transformer bank layer to sum all the kVA of the content transformers. Here is how this works.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":655772,"id":655772,"title":"containment association","filename":"4.png","filesize":26165,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/4.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8\/4-23","alt":"containment association","author":"7511","description":"containment association","caption":"containment association","name":"4-23","status":"inherit","uploaded_to":655692,"date":"2019-11-15 16:02:01","modified":"2019-11-15 16:02:11","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":926,"height":491,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/4-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/4.png","medium-width":464,"medium-height":246,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/4.png","medium_large-width":768,"medium_large-height":407,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/4.png","large-width":926,"large-height":491,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/4.png","1536x1536-width":926,"1536x1536-height":491,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/4.png","2048x2048-width":926,"2048x2048-height":491,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/4-826x438.png","card_image-width":826,"card_image-height":438,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/4.png","wide_image-width":926,"wide_image-height":491}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h3>#TotalKVA<\/h3>\n<p>An expression defined on the transformer bank that finds all the content transformers and sums the kva field on the transformer field and returns.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> contentRows  = FeatureSetByAssociation($feature, <span style=\"color: #d14\">\"content\"<\/span>)\r\n\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> globalIds = [];\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> i = <span style=\"color: #008080\">0<\/span>;\r\n<span style=\"color: #333;font-weight: bold\">for<\/span> (<span style=\"color: #333;font-weight: bold\">var<\/span> v <span style=\"color: #333;font-weight: bold\">in<\/span> contentRows) {\r\n    globalIds[i++] = v.globalId\r\n}\r\n\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> deviceClass = FeatureSetByName($map, <span style=\"color: #d14\">\"ElectricDistribution Device\"<\/span>, [<span style=\"color: #d14\">\"kva\"<\/span>], <span style=\"color: #333;font-weight: 500\">false<\/span>)\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> devicesRows = Filter(deviceClass, <span style=\"color: #d14\">\"globalid in @globalIds\"<\/span>)\r\n<span style=\"color: #333;font-weight: bold\">return<\/span> sum(devicesRows, <span style=\"color: #d14\">\"kva\"<\/span>)\r\n\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h2>FeatureSetByAssociation in Attribute Rules Profile<\/h2>\n<p>Alternatively we can use FeatureSetByAssociation in an attribute rule, here is the TotalKVA expression written for attribute rules.<\/p>\n"},{"acf_fc_layout":"content","content":"<h3>#TotalKVA Attribute Rule<\/h3>\n<p>The calculation attribute rule SumKVA is added on the device class specifically the transformer subtype to trigger on update. When a transformer kVA field is updated*, the attribute rule will fire and find the transformer bank which is the container of edited transformer. Then it will find all the content of the transformer bank and sum all kVA minus the edited transformer. That sum is then added to the new edited kvA value. Finally we use the DML capability (new on 2.4\/10.7.1) on attribute rule to write the totalKVA on the transformer bank.<\/p>\n<p>* We make sure to only trigger an update if the kVA field is updated by using the new $originalFeature global in Arcade in 2.5\/10.8 which will give us the state of the feature before it was edited. Without $originalFeature this attribute rule will always execute regardless of any update (moving the transformer, updating any other attribute) which can lead to unnecessary executions that essentially yield the same result.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #998;font-style: italic\">\/\/if the kva value hasn't been updated just exit<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/$originalfeature can only be used in 2.5\/10.8 <\/span>\r\n<span style=\"color: #333;font-weight: bold\">if<\/span> ($originalfeature.kva == $feature.kva) <span style=\"color: #333;font-weight: bold\">return<\/span> $feature.kva \r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/$feature is the transformer, find its container (the transformer bank)<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> containerRows  = FeatureSetByAssociation($feature, <span style=\"color: #d14\">\"container\"<\/span>)\r\n<span style=\"color: #998;font-style: italic\">\/\/if no container is found exit<\/span>\r\n<span style=\"color: #333;font-weight: bold\">if<\/span> (count(containerRows) == <span style=\"color: #008080\">0<\/span>) <span style=\"color: #333;font-weight: bold\">return<\/span> $feature.kva;\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/get the globalId of the transformer<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> transformerGlobalId = $feature.globalId;\r\n<span style=\"color: #998;font-style: italic\">\/\/get the first container you find (usually this is just one)<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> transformerBankAssociationRow = first(containerRows)\r\n<span style=\"color: #998;font-style: italic\">\/\/get the transformer bank globalId<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> transformerBankGlobalId = transformerBankAssociationRow.globalId;\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/we just have the globalId need the full transformer bank feature<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> transformerBanks = FeatureSetByName($datastore, <span style=\"color: #d14\">\"ElectricDistributionAssembly\"<\/span>, [<span style=\"color: #d14\">\"kva\"<\/span>], <span style=\"color: #333;font-weight: 500\">false<\/span>)\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> transformerBank = First(Filter(transformerBanks, <span style=\"color: #d14\">\"globalid = @transformerBankGlobalId\"<\/span>));\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/now that we have the trasnformer bank feature get all its content (transformers)<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> contentRows  = FeatureSetByAssociation(transformerBank, <span style=\"color: #d14\">\"content\"<\/span>)\r\n<span style=\"color: #998;font-style: italic\">\/\/build a list of globalids of the children transformers<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> globalIds = [];\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> i = <span style=\"color: #008080\">0<\/span>;\r\n<span style=\"color: #333;font-weight: bold\">for<\/span> (<span style=\"color: #333;font-weight: bold\">var<\/span> v <span style=\"color: #333;font-weight: bold\">in<\/span> contentRows) {\r\n    globalIds[i++] = v.globalId\r\n}\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/we need to pull the kva field of those transforemrs<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/ we also dont' want to double count the current $feature transforemr<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/ so we remove it from the list<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> deviceClass = FeatureSetByName($datastore, <span style=\"color: #d14\">\"ElectricDistributionDevice\"<\/span>, [<span style=\"color: #d14\">\"kva\"<\/span>], <span style=\"color: #333;font-weight: 500\">false<\/span>)\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> devicesRows = Filter(deviceClass, <span style=\"color: #d14\">\"globalid &lt;&gt; @transformerGlobalId\"<\/span>)\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> devicesRows = Filter(devicesRows, <span style=\"color: #d14\">\"globalid in @globalIds\"<\/span>)\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/sum all transformers kVA<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> totalKVA =  <span style=\"color: #008080\">0<\/span>;\r\n<span style=\"color: #333;font-weight: bold\">for<\/span> (<span style=\"color: #333;font-weight: bold\">var<\/span> d <span style=\"color: #333;font-weight: bold\">in<\/span> devicesRows)\r\n    totalKVA+= number(d.kva);\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/add the new kva value of our transformer<\/span>\r\ntotalKVA += number($feature.kva);\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/return the result and persist the totalKva in the bank<\/span>\r\n<span style=\"color: #333;font-weight: bold\">return<\/span> {\r\n     <span style=\"color: #998;font-style: italic\">\/\/return the current kva as result<\/span>\r\n     <span style=\"color: #d14\">\"result\"<\/span>: $feature.kva,\r\n     <span style=\"color: #998;font-style: italic\">\/\/edit an external feature<\/span>\r\n     <span style=\"color: #d14\">\"edit\"<\/span>: [\r\n     {\r\n       <span style=\"color: #998;font-style: italic\">\/\/in this class<\/span>\r\n      <span style=\"color: #d14\">\"className\"<\/span>: <span style=\"color: #d14\">\"ElectricDistributionAssembly\"<\/span>, \r\n      <span style=\"color: #998;font-style: italic\">\/\/we want to do an update<\/span>\r\n\r\n      <span style=\"color: #d14\">\"updates\"<\/span>: [\r\n\r\n               { \r\n                 <span style=\"color: #998;font-style: italic\">\/\/to the assembly of globalId transformerBankGlobalId<\/span>\r\n                 <span style=\"color: #d14\">\"globalID\"<\/span>: transformerBankGlobalId,\r\n                 <span style=\"color: #998;font-style: italic\">\/\/ and we want to update its totalKva to this value<\/span>\r\n                 <span style=\"color: #d14\">\"attributes\"<\/span>: {<span style=\"color: #d14\">\"totalKva\"<\/span>: totalKVA }\r\n               }\r\n     ]\r\n\r\n\r\n} \r\n\r\n\r\n    ]\r\n}\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"image","image":{"ID":655832,"id":655832,"title":"Sum kVA with Attribute Rules and Associations","filename":"attributerulesdml.gif","filesize":435443,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/attributerulesdml.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8\/attributerulesdml","alt":"Sum kVA with Attribute Rules and Associations","author":"7511","description":"Sum kVA with Attribute Rules and Associations","caption":"Sum kVA with Attribute Rules and Associations","name":"attributerulesdml","status":"inherit","uploaded_to":655692,"date":"2019-11-15 16:17:10","modified":"2019-11-15 16:20:18","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":1296,"height":826,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/attributerulesdml-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/attributerulesdml.gif","medium-width":410,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/attributerulesdml.gif","medium_large-width":768,"medium_large-height":489,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/attributerulesdml.gif","large-width":1296,"large-height":826,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/attributerulesdml.gif","1536x1536-width":1296,"1536x1536-height":826,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/attributerulesdml.gif","2048x2048-width":1296,"2048x2048-height":826,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/attributerulesdml-730x465.gif","card_image-width":730,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/attributerulesdml.gif","wide_image-width":1296,"wide_image-height":826}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h1>Is that it?<\/h1>\n<p>No! We are still making more enhancement to the API to address even more complex use cases. We also want to hear from you about your use cases.<\/p>\n<p><a class=\"btn btn-large center-btn\" style=\"margin: 0 auto;max-width: 200px\" href=\"https:\/\/www.esri.com\/en-us\/arcgis\/products\/arcgis-pro\/trial\">Free ArcGIS Pro Trial<\/a><\/p>\n"}],"authors":[{"ID":7511,"user_firstname":"Hussein","user_lastname":"Nasser","nickname":"Hussein Nasser","user_nicename":"hussein-nasser","display_name":"Hussein Nasser","user_email":"HNasser@esri.com","user_url":"http:\/\/www.husseinnasser.com","user_registered":"2018-03-21 18:21:21","user_description":"Product Engineer at Esri, Author of several GIS books and Software Engineering Content Creator on YouTube and a podcast host.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/profile.png' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"related_articles":"","card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/Untitled-design2.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/Untitled-design1.png"},"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>FeatureSetByAssociations - New Utility Network Arcade API to work with Associations (2.5\/10.8)<\/title>\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\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"FeatureSetByAssociations - New Utility Network Arcade API to work with Associations (2.5\/10.8)\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8\" \/>\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=\"2024-11-11T20:31:13+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\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\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8\"},\"author\":{\"name\":\"Hussein Nasser\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/78b7647b1db598b3c791d039593e5b2b\"},\"headline\":\"FeatureSetByAssociations &#8211; New Utility Network Arcade API to work with Associations (2.5\/10.8)\",\"datePublished\":\"2020-02-07T14:21:38+00:00\",\"dateModified\":\"2024-11-11T20:31:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8\"},\"wordCount\":11,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"arcade\",\"ArcGIS Utility Network Management extension\"],\"articleSection\":[\"Arcade\",\"Data Management\",\"Electric &amp; Gas Utilities\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8\",\"name\":\"FeatureSetByAssociations - New Utility Network Arcade API to work with Associations (2.5\/10.8)\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2020-02-07T14:21:38+00:00\",\"dateModified\":\"2024-11-11T20:31:13+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FeatureSetByAssociations &#8211; New Utility Network Arcade API to work with Associations (2.5\/10.8)\"}]},{\"@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\/78b7647b1db598b3c791d039593e5b2b\",\"name\":\"Hussein Nasser\",\"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\/2018\/06\/profile.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/profile.png\",\"caption\":\"Hussein Nasser\"},\"description\":\"Product Engineer at Esri, Author of several GIS books and Software Engineering Content Creator on YouTube and a podcast host.\",\"sameAs\":[\"http:\/\/www.husseinnasser.com\",\"https:\/\/www.linkedin.com\/in\/hnaser\/\",\"https:\/\/x.com\/hnasr\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/hussein-nasser\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"FeatureSetByAssociations - New Utility Network Arcade API to work with Associations (2.5\/10.8)","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\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8","og_locale":"en_US","og_type":"article","og_title":"FeatureSetByAssociations - New Utility Network Arcade API to work with Associations (2.5\/10.8)","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2024-11-11T20:31:13+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8"},"author":{"name":"Hussein Nasser","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/78b7647b1db598b3c791d039593e5b2b"},"headline":"FeatureSetByAssociations &#8211; New Utility Network Arcade API to work with Associations (2.5\/10.8)","datePublished":"2020-02-07T14:21:38+00:00","dateModified":"2024-11-11T20:31:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8"},"wordCount":11,"commentCount":1,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["arcade","ArcGIS Utility Network Management extension"],"articleSection":["Arcade","Data Management","Electric &amp; Gas Utilities"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8","name":"FeatureSetByAssociations - New Utility Network Arcade API to work with Associations (2.5\/10.8)","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2020-02-07T14:21:38+00:00","dateModified":"2024-11-11T20:31:13+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/featuresetbyassocaitions-new-utility-network-arcade-api-to-work-with-associations-2-5-10-8#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"FeatureSetByAssociations &#8211; New Utility Network Arcade API to work with Associations (2.5\/10.8)"}]},{"@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\/78b7647b1db598b3c791d039593e5b2b","name":"Hussein Nasser","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\/2018\/06\/profile.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/profile.png","caption":"Hussein Nasser"},"description":"Product Engineer at Esri, Author of several GIS books and Software Engineering Content Creator on YouTube and a podcast host.","sameAs":["http:\/\/www.husseinnasser.com","https:\/\/www.linkedin.com\/in\/hnaser\/","https:\/\/x.com\/hnasr"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/hussein-nasser"}]}},"text_date":"February 7, 2020","author_name":"Hussein Nasser","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/hussein-nasser","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/11\/Untitled-design1.png","primary_product":"ArcGIS Utility Network","tag_data":[{"term_id":32551,"name":"arcade","slug":"arcade","term_group":0,"term_taxonomy_id":32551,"taxonomy":"post_tag","description":"","parent":0,"count":113,"filter":"raw"},{"term_id":36071,"name":"ArcGIS Utility Network Management extension","slug":"arcgis-utility-network-management-extension","term_group":0,"term_taxonomy_id":36071,"taxonomy":"post_tag","description":"","parent":0,"count":8,"filter":"raw"}],"category_data":[{"term_id":777102,"name":"Arcade","slug":"arcade","term_group":0,"term_taxonomy_id":777102,"taxonomy":"category","description":"","parent":0,"count":98,"filter":"raw"},{"term_id":23851,"name":"Data Management","slug":"data-management","term_group":0,"term_taxonomy_id":23851,"taxonomy":"category","description":"","parent":0,"count":920,"filter":"raw"},{"term_id":25741,"name":"Electric &amp; Gas Utilities","slug":"electric-gas","term_group":0,"term_taxonomy_id":25741,"taxonomy":"category","description":"","parent":0,"count":253,"filter":"raw"}],"product_data":[{"term_id":36571,"name":"ArcGIS Enterprise","slug":"arcgis-enterprise","term_group":0,"term_taxonomy_id":36571,"taxonomy":"product","description":"","parent":0,"count":976,"filter":"raw"},{"term_id":36561,"name":"ArcGIS Pro","slug":"arcgis-pro","term_group":0,"term_taxonomy_id":36561,"taxonomy":"product","description":"","parent":0,"count":2037,"filter":"raw"},{"term_id":515312,"name":"ArcGIS Utility Network","slug":"utility-network","term_group":0,"term_taxonomy_id":515312,"taxonomy":"product","description":"","parent":36981,"count":141,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=utility-network","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/655692","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\/7511"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=655692"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/655692\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=655692"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=655692"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=655692"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=655692"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=655692"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}