One of the most frequent questions I get from developer is “What is the best way to integrate with the Utility Network”? My answer is always the same: “The best way to integrate with the Utility Network is the way that works”. The truth is there is no one, right answer. You may prefer one strategy or API over another depending on the nature of your interface and your preferred language. This article is an overview of integration strategies and the APIs commonly used to develop behind-the-scenes interfaces and applications with the Utility Network. If you’re interested in learning more about extending the utility network through client-side customizations I recommend you watch the “Extending the Utility Network” presentation provided by Esri during the Esri Developer’s Summit and Esri User Conference, to access this content you will need to attend the conference or get digital access to conference content afterwards.
I’ve supplied a matrix below that you can use to quickly view the API or workflow you’re most interested in. I encourage you to read the details of all the workflows and APIs before you get too far into your implementation, especially if you’re using an approach that has some known limitations.
|ArcGIS API for Python
|ArcGIS Pro SDK
|ArcGIS Enterprise SDK
|ArcGIS Data Interoperability
|Analyze Network Data||✅||✅||✅||✅|
|Extract Network Data||✅||✅|
|Import External Datasets||✅||✅|
✅ Best Practice
You may notice that SQL is not listed as one of the available APIs, this is because direct SQL read/write access is not available for features in a utility network dataset. If you have a strict requirement to create sql-based reports against the data stored in your utility network dataset, I recommend you investigate setting up a reporting instance or data warehouse. It stores a replicated copy of your GIS that has all the transactional and topology information removed so it is safely accessible via sql.
This workflow should be used when the integrating the current state of the GIS with an external system like a Data Warehouse or Customer Information System (CIS). These workflows are read-only (Data Warehouse) or only interact with non-versioned features (CIS). If the interface needs to write a large amount of versioned data (Asset Management System), you should consider using a versioned feature data workflow since this will allow you to perform the edits in an isolated transaction that can be committed or rolled back without blocking other processes from reading/writing the database.
This workflow is primarily used when making a large volume of edits to versioned features in the GIS or when versioned edits require user validation or input before they are committed to the default version of the system like when importing the parcels for a proposed subdivision from a contractor. If these edits result in dirty areas in your network, you must use a Network Transaction. These the edits are made in a version where a user can review and act upon them before committing them to the system. If the edits do not require user interaction, an automated process can commit the changes to the system.
These are workflow where you need to write information to the GIS that will affect the state of the network like importing the features associated with a design from an external design tool. An example of this includes updating the open/closed status of a device, because this will affect flow in the network. For more information refer to the Dirty area management with the Utility Network blog post. In addition to the steps required for versioned feature data, you must also validate the topology for any dirty areas created by your edits and update subnetworks that are marked as dirty. The network will remain in an inconsistent state until all dirty areas and dirty subnetworks are resolved. Inconsistent network prevent users from tracing the network or other systems from exporting networks. The recommended workflow is to do the following:
- Create a version
- Apply all your edits to the version
- Validate topology for the resulting new dirty areas
- Update subnetworks on any dirty networks
- Reconcile/post your version
- Delete your version
Analyze Network Data
These are workflows when you need to answer questions about your data that require you to trace the network like when a CIS wants to validate customer connections to the network. You should keep performance in mind when designing these interfaces because a single trace may take one or more seconds to complete depending on the complexity and scope of the analysis. Executing individual traces may be suitable for incremental or near real-time interfaces but batch interfaces will require additional logic to ensure they can meet performance requirements.
Extract Network Data
These workflows involve extracting all the feature information associated with a Network for use in engineering analysis, planning, or operations. Before you develop your own extractor you should see if your vendor or a business partner has a solution that has been certified by Esri to be compatible with the ArcGIS Utility Network.
Import External Datasets
These are workflows where you are importing data into the GIS external non-Esri systems using either non-Esri formats or data that requires reprojection. This often takes the form of Shapefiles, CAD, BIM, or other spatial 2D/3D datasets into the GIS from external systems. It is also combined with other workflows for importing versioned feature data or network feature data.
The Utility Network runs on top of ArcGIS Enterprise, and anyone who has been involved with the technology over the past decade knows that there has been massive growth in the number and capabilities of methods of integrating GIS data with other systems. In this section I’ll be describing some of the most common technologies used for integration
The ArcPy library is a python API developed by Esri for performing analysis using the ArcGIS Desktop and ArcGIS Pro applications and architecture. It is a library of coarse-grained data management, spatial analysis, and data interoperability tools. These APIs are only capable of interacting with the default version of a database and lack many of the fine-grained functions required to maintain a valid utility network dataset. ArcPy has coarse grained operations for reading data, but write operations are applied to the server for individual rows, meaning it not suitable for updating large sets of data. This is different from the ArcGIS API for Python which can request and update features using collections of features, resulting in less client/server requests. Finally, because Esri Geoprocessing tools are known to have overhead with each call you should avoid calling them in a tight loop. You can mitigate this by only using GP tools for bulk operations, only using non-gp methods and classes in tight loops, or by using one of the other APIs.
You can find additional information in the online help: ArcGIS Pro Python Reference
ArcGIS API for Python
The ArcGIS API for Python is a series of python APIs developed for interacting with ArcGIS Online and ArcGIS Enterprise services. They have access to a large library of fine-grained administrative, analytical, and data management tools. These APIs have access to most of the capabilities of the service based functionality for the Utility Network including all the major capabilities of the transactional and network model. These APIs use feature sets to minimize the amount of client/server interactions which allows for more scalable read/write operations.
You can find additional information in the online help: ArcGIS API for Python Reference
ArcGIS Pro SDK
C# APIs developed for interacting with all forms of ArcGIS data using ArcGIS Pro. When you use this SDK to develop headless console applications you don’t have access to any of the APIs that require the application or a map.
You can find additional information in the online help: ArcGIS Pro SDK Reference
ArcGIS Enterprise SDK
C# and Java APIs developed for extending the capabilities of ArcGIS Enterprise. It provides the most comprehensive access to the APIs for interacting with the utility network dataset but is also one of the most complicated solutions to develop and deploy. It requires developing a custom server object extension (SOE) to expose new functionality / APIs or a server object interceptor (SOI) to inject new behaviors into existing services. You can learn more about creating our own SOE or SOI by reading the Extending Utility Network Services with the ArcGIS Enterprise SDK blog.
You can find additional information in the online help: ArcGIS Enterprise SDK Reference
ArcGIS Data Interoperability
This extension for ArcGIS Pro and ArcGIS Enterprise include desktop and client-based tool for manipulating data. It is capable of reading/writing hundreds of different spatial and non-spatial datasets using a variety of different operating systems, you can find a full list of supported file formats here. While it supports interacting with both local dataset and service-based datasets using readers/writers it does not have access to the Utility Network or Branch Versioning APIs. You can work around this by using a REST reader/writer. This extension is built on top of Safe Software’s Feature Manipulation Engine (FME), so you can find more about the processing capabilities of FME by referring to the online help for FME
You can find additional information in the online help: ArcGIS Data Interoperability
All the functionality of the Utility Network is available via the REST APIs, therefore they are the most powerful way of integrating or extending your implementation. Directly accessing the REST APIs is a way that any language or application can integrate with ArcGIS Enterprise and Utility Network data. These APIs supply fine-grained access to all the functions needed to read/write data as well as access to all the utility network and branch versioning APIs.
In the table above, I show that you should use caution when implementing a REST interface. This is because there is no formal REST contract to compile or build against. Any interfaces built directly against the APIs will be harder to support through upgrades and can be more difficult to troubleshoot than the structured / managed APIs. Customers who have a dedicated GIS developer will find this to be a powerful way of developing interfaces. IT departments that support many applications without a dedicated GIS developer may have more difficultly keeping up with the technology required to develop and maintain these interfaces.
You can find additional information in the online help: ArcGIS Rest APIs Documentation
Hopefully, you’ve found your integration requirement(s) and API, I recommend that you bookmark this blog and revisit it as you are developing your solutions to ensure you’re following best practices. Once you’ve started with the API, I recommend that you begin searching for examples from conferences, blog posts, videos, or other online resources to get you started. Finally, over the coming weeks I will be releasing additional blog posts providing specific examples of how to architect interfaces between the utility network many of the major systems at a utility: customer information systems, asset management systems, outage management systems, and more!