Hi, I need to develop an add-In to work with utility network. After clicking a button, programmatically disable all subnetwork controllers that have a certain globalId within my device layer in map. For testing purposes, I tried to operate with only one subnetwork controller, in order: create an element, get subnetworkManager from un, disable controller in edit operation, save the project and then do subnetwork update. Sequential operations as in the documentation example
https://pro.arcgis.com/en/pro-app/3.0/sdk/api-reference/topic76342.html
What I notice is that no Dirty Area is created, as if the editing is not being done. I tried as well the DisableController method without editing operation and did not get the desired result.
I am currently using version 3.2.2 of Pro and Geodatabase File.
What am I doing wrong?
CODE SNIPPET:
globalIdSBC.Clear();
globalIdSBC.Add("{77725B0F-B758-4D54-B1D9-4A927CC14F01}");
// globalId string list
string globalIdStringList = string.Join(",", globalIdSBC.Select(id => $"'{id}'"));
QueryFilter filter = new QueryFilter
{
WhereClause = $"GLOBALID IN ({globalIdStringList})"
};
// filter.SubFields = "GLOBALID, OBJECTID";
// Count
int rowCount = GetFilteredFeatureCount(deviceLayer, filter);
Debug.WriteLine($"Count: {rowCount}");
var tierD = domainNetwork.GetTier("Distribuzione Primo Salto");
if (tierD == null)
{
Debug.WriteLine($"Tier: {tierD}");
return;
}
var subnetworks = utilityNetwork.GetSubnetworkManager().GetSubnetworks(tierD, SubnetworkStates.All);
var subnetwork = subnetworks.FirstOrDefault(x => x.Name == "R_GorlaMaggiore");
using (var cur = deviceLayer.Search(filter))
{
ArcGIS.Core.Data.UtilityNetwork.Element element = null;
while (cur.MoveNext())
{
var currentRow = cur.Current;
// Element from row
element = utilityNetwork.CreateElement(currentRow);
// Disable snc
utilityNetwork.GetSubnetworkManager().DisableControllerInEditOperation(element);
// Tried also validate network topology first
UtilityNetworkExtensions.ValidateNetworkTopologyInEditOperation(utilityNetwork);
// Save edits and update subnetwork
await Project.Current.SaveEditsAsync();
subnetwork.Update();
}
}
// Save edits
// await Project.Current.SaveEditsAsync();
// I tried update both ways
//foreach (Tier tier in domainNetwork.Tiers)
//{
// utilityNetwork.GetSubnetworkManager().UpdateAllSubnetworks(tier, true);
//}
//foreach (Tier tier in domainNetwork.Tiers)
//{
// var subnetworks = utilityNetwork.GetSubnetworkManager().GetSubnetworks(tier, SubnetworkStates.Dirty);
// foreach (Subnetwork subnetwork in subnetworks)
// {
// subnetwork.Update();
// }
//}
// subnetwork.Update();
mapView.Redraw(true);