ArcGIS Pro 3.3 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

In This Topic
    DisableControllerInEditOperation Method
    In This Topic
    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
    )
    Public Shared Sub DisableControllerInEditOperation( _
       ByVal subnetworkManager As SubnetworkManager, _
       ByVal device As Element _
    ) 

    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.

    If all subnetwork controllers are deleted from a subnetwork, the subnetwork moves to the SubnetworkStates.DirtyAndDeleted state.

    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