{"id":1345902,"date":"2021-09-30T10:41:51","date_gmt":"2021-09-30T17:41:51","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1345902"},"modified":"2021-10-22T13:28:18","modified_gmt":"2021-10-22T20:28:18","slug":"whats-new-in-utility-network-javascript-api-4-21","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21","title":{"rendered":"What&#8217;s new in Utility Network JavaScript API 4.21"},"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":[23851],"tags":[],"industry":[],"product":[36831,515312],"class_list":["post-1345902","blog","type-blog","status-publish","format-standard","hentry","category-data-management","product-js-api-arcgis","product-utility-network"],"acf":{"short_description":"This blog demonstrates what is new in the Utility Network JavaScript API 4.21 ","flexible_content":[{"acf_fc_layout":"content","content":"<p>In the JavaScript API 4.20 release, <a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/utility-network-is-now-on-arcgis-javascript-api-4-20\/\">the official utility network for JavaScript API<\/a> was shipped with the ability to execute trace analytics using named trace configuration. In this release we extend this feature with the following capabilities:<\/p>\n<ul>\n<li>Create your own Trace Configuration &#8211; Create or override existing utility network trace configuration<\/li>\n<li>Retrieve more utility network Metadata &#8211; Access subnetwork management meta data<\/li>\n<\/ul>\n<p>In this blog we will explain and demonstrate the new capabilities with example source code.<\/p>\n<p>Edit 10-22-2021: You can download the demo source code for 4.21 from github <a href=\"https:\/\/github.com\/hussein-nasser\/un-js-api-demo\/blob\/master\/un-js-api-demo-421.html\">here\u00a0<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"content","content":"<h1>Create your own Trace Configuration<\/h1>\n<p>While you could run a utility network tracing analytic in the 4.20 release, you were restricted by the named trace configurations persisted on the backend. For example, if you have a utility network trace called <code>Downstream Trace<\/code> that only returns elements, and you wanted to draw the aggregated geometries instead, you had to author and persist a new named trace configuration <code>Downstream Trace - aggregated geometry<\/code> which returns aggregated geometries of the result and re-share the webmap.<\/p>\n<p>&nbsp;<\/p>\n<p>With 4.21, you can read the named trace configuration and override the result-type property to add aggregated geometries, create additional filters, and change various properties in trace. Do none of your shared named trace configuration do what you want in the client? No problem! You can also start from scratch and build your own trace configuration and execute a trace that way instead.<\/p>\n<p>&nbsp;<\/p>\n<p>Let us show some examples.<\/p>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"content","content":"<h2>Our Subnetwork is being edited!<\/h2>\n<p>When a feature is edited in the utility network, a dirty area is generated as a result. This is done so the validation process can pick up those dirty areas, which represent what has changed, and rebuild the network topology. The presence of dirty areas indicates inconsistencies in the network topology and could lead to incorrect trace analytic results. If a utility network trace detects a dirty area, an error is thrown by default when the <code>validateConsistency<\/code> option is enabled.<\/p>\n<p>In our example below, trying to run a subnetwork trace on subnetwork <code>RMT003<\/code> is returning an error : \u201cOne or more dirty areas were discovered\u201d. This indicates that the subnetwork is being edited.<\/p>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1345962,"id":1345962,"title":"pic1","filename":"pic1.png","filesize":20235,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21\/pic1-7","alt":"","author":"7511","description":"","caption":"","name":"pic1-7","status":"inherit","uploaded_to":1345902,"date":"2021-09-13 23:08:38","modified":"2021-09-13 23:08:38","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":1517,"height":377,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic1-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic1.png","medium-width":464,"medium-height":115,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic1.png","medium_large-width":768,"medium_large-height":191,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic1.png","large-width":1517,"large-height":377,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic1.png","1536x1536-width":1517,"1536x1536-height":377,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic1.png","2048x2048-width":1517,"2048x2048-height":377,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic1-826x205.png","card_image-width":826,"card_image-height":205,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic1.png","wide_image-width":1517,"wide_image-height":377}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>However, what if I still want to trace the subnetwork and am fine with getting inconsistent results as a side effect of the edits. I can overwrite the named trace configuration by setting the <code>validateConsistency<\/code> option to <code>false<\/code> and then re run the trace. As you can see the trace is now successful. Following is the source code to achieve this.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1364802,"id":1364802,"title":"pic2","filename":"pic2-1.png","filesize":71543,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic2-1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21\/pic2-7","alt":"","author":"7511","description":"","caption":"","name":"pic2-7","status":"inherit","uploaded_to":1345902,"date":"2021-09-30 22:15:18","modified":"2021-09-30 22:15:18","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":1261,"height":486,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic2-1-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic2-1.png","medium-width":464,"medium-height":179,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic2-1.png","medium_large-width":768,"medium_large-height":296,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic2-1.png","large-width":1261,"large-height":486,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic2-1.png","1536x1536-width":1261,"1536x1536-height":486,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic2-1.png","2048x2048-width":1261,"2048x2048-height":486,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic2-1-826x318.png","card_image-width":826,"card_image-height":318,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic2-1.png","wide_image-width":1261,"wide_image-height":486}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n\r\ntc = utilityNetwork.sharedNamedTraceConfigurations.find(tc =&gt; tc.title === <span style=\"color: #d14\">\"Subnetwork_RMT003_NoStartingPoint_AllResultTypes\"<\/span>)\r\n<span style=\"color: #998;font-style: italic\">\/\/create a new UNTraceConfiguration and pass in the named one<\/span>\r\nmytc = <span style=\"color: #333;font-weight: bold\">new<\/span> UNTraceConfiguration(tc.traceConfiguration.toJSON());\r\n<span style=\"color: #998;font-style: italic\">\/\/disable validate consistency so we skip dirty area checking<\/span>\r\nmytc.validateConsistency = <span style=\"color: #333;font-weight: 500\">false<\/span>;\r\n<span style=\"color: #998;font-style: italic\">\/\/prepare the trace parameter, note that we are tracing in a version.<\/span>\r\ntraceParameters = <span style=\"color: #333;font-weight: bold\">new<\/span> TraceParameters ({ \r\n                                        <span style=\"color: #d14\">\"traceLocations\"<\/span>: [],\r\n                                         <span style=\"color: #d14\">\"gdbVersion\"<\/span>: <span style=\"color: #d14\">\"unadmin.421-demo\"<\/span>,\r\n                                        <span style=\"color: #d14\">\"traceConfiguration\"<\/span>: mytc,\r\n                                        <span style=\"color: #d14\">\"resultTypes\"<\/span>: mytc.resultTypes,\r\n                                        <span style=\"color: #d14\">\"traceType\"<\/span>: <span style=\"color: #d14\">\"subnetwork\"<\/span>\r\n\t\t\t\t\t\t\t\t}); \r\nresults = <span style=\"color: #333;font-weight: bold\">await<\/span> Tracer.trace(utilityNetwork.networkServiceUrl, traceParameters);\r\n<span style=\"color: #998;font-style: italic\">\/\/the call will fail since we have dirty areas<\/span>\r\n<span style=\"color: #0086b3\">console<\/span>.log(results);\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h2>My Subnetwork Trace is not returning Containers<\/h2>\n<p>The named trace configuration for this particular trace has been configured with <code>includeContainers<\/code> set as <code>false<\/code>;however, I want to override that option and return all containers in my trace. We can easily do this by flipping the Boolean property <code>includeContainers<\/code>. Compare the results before and after making this change.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1364812,"id":1364812,"title":"pic3","filename":"pic3-1.png","filesize":64592,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic3-1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21\/pic3-4","alt":"","author":"7511","description":"","caption":"","name":"pic3-4","status":"inherit","uploaded_to":1345902,"date":"2021-09-30 22:15:19","modified":"2021-09-30 22:15:19","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":1210,"height":495,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic3-1-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic3-1.png","medium-width":464,"medium-height":190,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic3-1.png","medium_large-width":768,"medium_large-height":314,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic3-1.png","large-width":1210,"large-height":495,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic3-1.png","1536x1536-width":1210,"1536x1536-height":495,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic3-1.png","2048x2048-width":1210,"2048x2048-height":495,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic3-1-826x338.png","card_image-width":826,"card_image-height":338,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic3-1.png","wide_image-width":1210,"wide_image-height":495}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\ntc = utilityNetwork.sharedNamedTraceConfigurations.find(tc =&gt; tc.title === <span style=\"color: #d14\">\"Subnetwork_RMT003_NoStartingPoint_AllResultTypes\"<\/span>)\r\n<span style=\"color: #998;font-style: italic\">\/\/create a new UNTraceConfiguration and pass in the named one<\/span>\r\nmytc = <span style=\"color: #333;font-weight: bold\">new<\/span> UNTraceConfiguration(tc.traceConfiguration.toJSON());\r\n<span style=\"color: #998;font-style: italic\">\/\/disable validate consistency so we skip dirty area checking<\/span>\r\nmytc.includeContainers = <span style=\"color: #333;font-weight: 500\">true<\/span>\r\nmytc.validateConsistency = <span style=\"color: #333;font-weight: 500\">false<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/prepare the trace parameter, note that we are tracing in a version.<\/span>\r\ntraceParameters = <span style=\"color: #333;font-weight: bold\">new<\/span> TraceParameters ({ \r\n                                        <span style=\"color: #d14\">\"traceLocations\"<\/span>: [],\r\n                                         <span style=\"color: #d14\">\"gdbVersion\"<\/span>: <span style=\"color: #d14\">\"unadmin.421-demo\"<\/span>,\r\n                                        <span style=\"color: #d14\">\"traceConfiguration\"<\/span>: mytc,\r\n                                        <span style=\"color: #d14\">\"resultTypes\"<\/span>: mytc.resultTypes,\r\n                                        <span style=\"color: #d14\">\"traceType\"<\/span>: <span style=\"color: #d14\">\"subnetwork\"<\/span>\r\n\t\t\t\t\t\t\t\t}); \r\nresults = <span style=\"color: #333;font-weight: bold\">await<\/span> Tracer.trace(utilityNetwork.networkServiceUrl, traceParameters);\r\n<span style=\"color: #998;font-style: italic\">\/\/the call will fail since we have dirty areas<\/span>\r\n<span style=\"color: #0086b3\">console<\/span>.log(results);\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h2>But I only want the transformers back?<\/h2>\n<p>Most of the time, named trace configurations are configured to return everything they find which could be expensive for trace operations with large result-set. You can override the trace configuration to return only network features \u00a0you are interested in. For example, if you want your subnetwork trace to only return overhead single phase transformers. This could be done by providing output filters, here is the code:<\/p>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1364822,"id":1364822,"title":"pic4","filename":"pic4-1.png","filesize":77203,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic4-1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21\/pic4-5","alt":"","author":"7511","description":"","caption":"","name":"pic4-5","status":"inherit","uploaded_to":1345902,"date":"2021-09-30 22:15:20","modified":"2021-09-30 22:15: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":1239,"height":588,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic4-1-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic4-1.png","medium-width":464,"medium-height":220,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic4-1.png","medium_large-width":768,"medium_large-height":364,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic4-1.png","large-width":1239,"large-height":588,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic4-1.png","1536x1536-width":1239,"1536x1536-height":588,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic4-1.png","2048x2048-width":1239,"2048x2048-height":588,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic4-1-826x392.png","card_image-width":826,"card_image-height":392,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic4-1.png","wide_image-width":1239,"wide_image-height":588}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n\r\ntc = utilityNetwork.sharedNamedTraceConfigurations.find(tc =&gt; tc.title === <span style=\"color: #d14\">\"Subnetwork_RMT003_NoStartingPoint_AllResultTypes\"<\/span>)\r\n<span style=\"color: #998;font-style: italic\">\/\/create a new UNTraceConfiguration and pass in the named one<\/span>\r\nmytc = <span style=\"color: #333;font-weight: bold\">new<\/span> UNTraceConfiguration(tc.traceConfiguration.toJSON());\r\n<span style=\"color: #998;font-style: italic\">\/\/disable validate consistency so we skip dirty area checking<\/span>\r\nmytc.includeContainers = <span style=\"color: #333;font-weight: 500\">true<\/span>\r\nmytc.validateConsistency = <span style=\"color: #333;font-weight: 500\">false<\/span>\r\n   <span style=\"color: #998;font-style: italic\">\/\/ -- Return  Electric Device - Medium Voltage Transformer - Overhead Single Phase only\r\n<\/span>\r\n mytc.outputFilters.push ({    \r\n                                        <span style=\"color: #d14\">\"networkSourceId\"<\/span>: <span style=\"color: #008080\">9<\/span>,\r\n                                        <span style=\"color: #d14\">\"assetGroupCode\"<\/span>: <span style=\"color: #008080\">38<\/span>,\r\n                                        <span style=\"color: #d14\">\"assetTypeCode\"<\/span>: <span style=\"color: #008080\">785<\/span>\r\n                                    });                \r\n<span style=\"color: #998;font-style: italic\">\/\/prepare the trace parameter, note that we are tracing in a version.<\/span>\r\ntraceParameters = <span style=\"color: #333;font-weight: bold\">new<\/span> TraceParameters ({ \r\n                                        <span style=\"color: #d14\">\"traceLocations\"<\/span>: [],\r\n                                         <span style=\"color: #d14\">\"gdbVersion\"<\/span>: <span style=\"color: #d14\">\"unadmin.421-demo\"<\/span>,\r\n                                        <span style=\"color: #d14\">\"traceConfiguration\"<\/span>: mytc,\r\n                                        <span style=\"color: #d14\">\"resultTypes\"<\/span>: mytc.resultTypes,\r\n                                        <span style=\"color: #d14\">\"traceType\"<\/span>: <span style=\"color: #d14\">\"subnetwork\"<\/span>\r\n\t\t\t\t\t\t\t\t}); \r\nresults = <span style=\"color: #333;font-weight: bold\">await<\/span> Tracer.trace(utilityNetwork.networkServiceUrl, traceParameters);\r\n<span style=\"color: #998;font-style: italic\">\/\/the call will fail since we have dirty areas<\/span>\r\n<span style=\"color: #0086b3\">console<\/span>.log(results);\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h1>Domain Networks and Tiers<\/h1>\n<p>Now that you can create your own name trace configuration, you might need more metadata to build out the named trace configuration. DoHere are few more things brewing in our incubator for the upcoming releases.main networks and tiers can now be retrieved from the utility network class to enable tracing on different domain networks, and tiers. Here is an example demonstrating how you can obtain the domain networks and tiers in a given domain network:<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1364832,"id":1364832,"title":"pic5","filename":"pic5-1.png","filesize":50254,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic5-1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21\/pic5-3","alt":"","author":"7511","description":"","caption":"","name":"pic5-3","status":"inherit","uploaded_to":1345902,"date":"2021-09-30 22:15:21","modified":"2021-09-30 22:15:21","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":1194,"height":451,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic5-1-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic5-1.png","medium-width":464,"medium-height":175,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic5-1.png","medium_large-width":768,"medium_large-height":290,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic5-1.png","large-width":1194,"large-height":451,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic5-1.png","1536x1536-width":1194,"1536x1536-height":451,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic5-1.png","2048x2048-width":1194,"2048x2048-height":451,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic5-1-826x312.png","card_image-width":826,"card_image-height":312,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/pic5-1.png","wide_image-width":1194,"wide_image-height":451}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">\r\n<span style=\"color: #998;font-style: italic\">\/\/get all domain networks<\/span>\r\nutilityNetwork.domainNetworkNames\r\n<span style=\"color: #998;font-style: italic\">\/\/get all tiers in the \"Electric\" domain networks<\/span>\r\nutilityNetwork.getTierNames(<span style=\"color: #d14\">\"Electric\"<\/span>)\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h1>What\u2019s Next?<\/h1>\n<p>Here are few more things brewing in our incubator for the upcoming releases.<\/p>\n<ul>\n<li><strong>Query Network Topology Moments<\/strong><\/li>\n<\/ul>\n<p style=\"padding-left: 40px\">Additional functionality to read the state of the network topology, such as when it was last validated, when the last schema change was applied and more.<\/p>\n<ul>\n<li><strong>Rule-based Editing, Validate, Subnetwork Management<\/strong><\/li>\n<\/ul>\n<p style=\"padding-left: 40px\">The ability to run utility network functions such as validate network topology and update subnetwork to maintain network consistency while also exposing network rules for use to derive editing snapping.<\/p>\n<h1>Useful Resources<\/h1>\n<p>Here are few links that will help you get started.<\/p>\n<p><a href=\"https:\/\/www.esri.com\/en-us\/arcgis\/products\/arcgis-utility-network\/overview\">Overview on the Utility Network\u00a0<\/a><\/p>\n<p><a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/data\/utility-network\/about-trace-configurations.htm\" target=\"_blank\" rel=\"noopener\" aria-describedby=\"new-window\">Named Trace Configurations<\/a><\/p>\n<p><a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-networks-UtilityNetwork.html\">Utility Network JavaScript API Doc<\/a><\/p>\n<p><a href=\"https:\/\/github.com\/hussein-nasser\/un-js-api-demo\" target=\"_blank\" rel=\"noopener\" aria-describedby=\"new-window\">Utility Network Demo JavaScript API demo<\/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\/2021\/09\/Untitled-design-1.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/09\/esri-1-1.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>What&#039;s new in Utility Network JavaScript API 4.21<\/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\/whats-new-in-utility-network-javascript-api-4-21\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What&#039;s new in Utility Network JavaScript API 4.21\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21\" \/>\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=\"2021-10-22T20:28:18+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\/whats-new-in-utility-network-javascript-api-4-21#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21\"},\"author\":{\"name\":\"Hussein Nasser\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/78b7647b1db598b3c791d039593e5b2b\"},\"headline\":\"What&#8217;s new in Utility Network JavaScript API 4.21\",\"datePublished\":\"2021-09-30T17:41:51+00:00\",\"dateModified\":\"2021-10-22T20:28:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21\"},\"wordCount\":8,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"articleSection\":[\"Data Management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21\",\"name\":\"What's new in Utility Network JavaScript API 4.21\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2021-09-30T17:41:51+00:00\",\"dateModified\":\"2021-10-22T20:28:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What&#8217;s new in Utility Network JavaScript API 4.21\"}]},{\"@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":"What's new in Utility Network JavaScript API 4.21","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\/whats-new-in-utility-network-javascript-api-4-21","og_locale":"en_US","og_type":"article","og_title":"What's new in Utility Network JavaScript API 4.21","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2021-10-22T20:28:18+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\/whats-new-in-utility-network-javascript-api-4-21#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21"},"author":{"name":"Hussein Nasser","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/78b7647b1db598b3c791d039593e5b2b"},"headline":"What&#8217;s new in Utility Network JavaScript API 4.21","datePublished":"2021-09-30T17:41:51+00:00","dateModified":"2021-10-22T20:28:18+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21"},"wordCount":8,"commentCount":0,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"articleSection":["Data Management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21","name":"What's new in Utility Network JavaScript API 4.21","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2021-09-30T17:41:51+00:00","dateModified":"2021-10-22T20:28:18+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/utility-network\/data-management\/whats-new-in-utility-network-javascript-api-4-21#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"What&#8217;s new in Utility Network JavaScript API 4.21"}]},{"@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":"September 30, 2021","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\/2021\/09\/esri-1-1.png","primary_product":"ArcGIS Utility Network","tag_data":[],"category_data":[{"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"}],"product_data":[{"term_id":36831,"name":"ArcGIS Maps SDK for JavaScript","slug":"js-api-arcgis","term_group":0,"term_taxonomy_id":36831,"taxonomy":"product","description":"","parent":36601,"count":361,"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\/1345902","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=1345902"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/1345902\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=1345902"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=1345902"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=1345902"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=1345902"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=1345902"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}