ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.Data.UtilityNetwork Namespace / UtilityNetworkExtensions Class / DisableControllerInEditOperation Method
The SubnetworkManager instance used to disable a controller.
Corresponds to the feature to be disabled as a SubnetworkController.
Example Version

DisableControllerInEditOperation Method
Disables a feature corresponding to device from being a SubnetworkController. This method must be called on the MCT. Use QueuedTask.Run.
Syntax
public static void DisableControllerInEditOperation( 
   SubnetworkManager subnetworkManager,
   Element device
)

Parameters

subnetworkManager
The SubnetworkManager instance used to disable a controller.
device
Corresponds to the feature to be disabled as a SubnetworkController.
Exceptions
ExceptionDescription

The active ArcGIS.Desktop.Mapping.MapView is unavailable.

-or-

The ArcGIS.Desktop.Mapping.UtilityNetworkLayer is unavailable.

This method or property must be called within the lambda passed to QueuedTask.Run.
A geodatabase-related exception has occurred.
Remarks
  • This routine generates its own editing transaction and therefore cannot be wrapped inside a separate transaction.
  • If this operation is successful, it will create an edit operation on the Pro undo/redo stack, invalidate the affected layers and cause the ArcGIS.Desktop.Mapping.MapView to redraw. When writing a CoreHost application, use SubnetworkManager.DisableController.
  • If all subnetwork controllers are deleted from a subnetwork, the subnetwork moves to the SubnetworkStates.DirtyAndDeleted state.
  • If this operation is successful, it will invalidate the affected layers and cause the ArcGIS.Desktop.Mapping.MapView to redraw.
  • The input element, device must specify the terminal.
Example
Life cycle for a simple radial subnetwork with one controller
// Create a subnetwork named "Radial1" with a single controller
// elementR1 represents the device that serves as the subnetwork controller (e.g., circuit breaker)
Subnetwork subnetworkRadial1 = subnetworkManager.EnableControllerInEditOperation(mediumVoltageTier, elementR1, "Radial1", "R1", "my description", "my notes");

// ...

// Update the subnetwork and refresh the map
subnetworkRadial1.Update();
MapView.Active.Redraw(true);

// ...

// At some point, a subnetwork will need to be deleted.

// First step is to disable the controller
subnetworkManager.DisableControllerInEditOperation(elementR1);

// At this point, the subnetwork is deleted, but all of the rows that have been labeled with the subnetwork ID need to be updated
subnetworkRadial1.Update();
MapView.Active.Redraw(true);

// The final step is to notify external systems (if any) by exporting the subnetwork
SubnetworkExportOptions subnetworkExportOptions = new SubnetworkExportOptions()
{
  SetAcknowledged = true,
  IncludeDomainDescriptions = true,
  IncludeGeometry = true,
  ServiceSynchronizationType = ServiceSynchronizationType.Asynchronous,

  SubnetworkExportResultTypes = new List<SubnetworkExportResultType>()
  {
    SubnetworkExportResultType.Features
  }
  
  // Set networks attributes and attribute fields to export
  //ResultNetworkAttributes = new List<NetworkAttribute>(networkAttributes),

  //ResultFieldsByNetworkSourceID = new Dictionary<int, List<string>>()
  //  { { electricDevice.ID, new List<string>() { "AssetID" } } }

};
subnetworkRadial1.Export(new Uri($"{Path.GetTempPath()}SubnetworkExportResult.json"), subnetworkExportOptions);
Life cycle for a mesh subnetwork with multiple controllers
// Create a subnetwork named "Mesh1" from three controllers
// elementM1, elementM2, and elementM3 represent the devices that serve as subnetwork controllers (e.g., network protectors)
subnetworkManager.EnableController(lowVoltageMeshTier, elementM1, "Mesh1", "M1", "my description", "my notes");
subnetworkManager.EnableController(lowVoltageMeshTier, elementM2, "Mesh1", "M2", "my description", "my notes");
Subnetwork subnetworkMesh1 = subnetworkManager.EnableController(lowVoltageMeshTier, elementM3, "Mesh1", "M3", "my description", "my notes");
subnetworkMesh1.Update();
MapView.Active.Redraw(true);

// ...

// When deleting the subnetwork, each controller must be disabled before the subnetwork itself is deleted
subnetworkManager.DisableControllerInEditOperation(elementM1);
subnetworkManager.DisableControllerInEditOperation(elementM2);
subnetworkManager.DisableControllerInEditOperation(elementM3);

// After the subnetwork is deleted, all of the rows that have been labeled with the subnetwork ID need to be updated
subnetworkMesh1.Update();
MapView.Active.Redraw(true);

// The final step is to notify external systems (if any) by exporting the subnetwork
SubnetworkExportOptions subnetworkExportOptions = new SubnetworkExportOptions()
{
  SetAcknowledged = true,
  IncludeDomainDescriptions = true,
  IncludeGeometry = true,
  ServiceSynchronizationType = ServiceSynchronizationType.Asynchronous,

  SubnetworkExportResultTypes = new List<SubnetworkExportResultType>()
  {
    SubnetworkExportResultType.Features
  }
  
  // Set networks attributes and attribute fields to export
  //ResultNetworkAttributes = new List<NetworkAttribute>(networkAttributes),

  //ResultFieldsByNetworkSourceID = new Dictionary<int, List<string>>()
  //  { { electricDevice.ID, new List<string>() { "AssetID" } } }

};
subnetworkMesh1.Export(new Uri($"{Path.GetTempPath()}SubnetworkExportResult.json"), subnetworkExportOptions);
Life cycle for a multifeed radial subnetwork with two controllers
// Create a subnetwork named "R2, R3" from two controllers
// elementR2 and elementR3 represent the devices that serve as subnetwork controllers (e.g., circuit breakers)
subnetworkManager.EnableControllerInEditOperation(mediumVoltageTier, elementR2, "R2, R3", "R2", "my description", "my notes");
subnetworkManager.EnableControllerInEditOperation(mediumVoltageTier, elementR3, "R2, R3", "R3", "my description", "my notes");

// If the tie switch between them is opened, the original subnetwork controllers must be disabled and re-enabled with different names
// This will create two new subnetworks, named "R2" and "R3"
subnetworkManager.DisableControllerInEditOperation(elementR2);
subnetworkManager.DisableControllerInEditOperation(elementR3);

Subnetwork subnetworkR2 = subnetworkManager.EnableControllerInEditOperation(mediumVoltageTier, elementR2, "R2", "R2", "my description", "my notes");
Subnetwork subnetworkR3 = subnetworkManager.EnableControllerInEditOperation(mediumVoltageTier, elementR3, "R3", "R3", "my description", "my notes");

subnetworkR2.Update();
subnetworkR3.Update();
MapView.Active.Redraw(true);
Requirements

Target Platforms: Windows 11, Windows 10

ArcGIS Pro version: 3 or higher.
See Also