/// <summary> /// Set Global fields /// </summary> /// <param name="map">Diagram Layer</param> internal static void GetParameters(Map map) { if (map == null) { CleanModule(); return; } if (GlobalActiveMapName != map.Name || GlobalDiagram == null || GlobalDiagramLayer == null) { GlobalActiveMap = map; GlobalActiveMapName = GlobalActiveMap.Name; GlobalDiagramLayer = GetDiagramLayerFromMap(map); if (GlobalDiagramLayer == null) { CleanModule(); } else { QueuedTask.Run(() => { try { GlobalDiagram = GlobalDiagramLayer.GetNetworkDiagram(); } catch { GlobalDiagram = null; } try { if (GlobalDiagram != null) { GlobalDiagramManager = GlobalDiagram.DiagramManager; GlobalUtilityNetwork = GlobalDiagramManager.GetNetwork <UtilityNetwork>(); GlobalGeodatabase = GlobalUtilityNetwork.GetDatastore() as Geodatabase; NetworkDiagramInfo networkDiagramInfo = GlobalDiagram.GetDiagramInfo(); if (networkDiagramInfo == null) { GlobalIsSystem = false; GlobalEnvelope = null; GlobalIsStored = false; GlobalContainerMargin = 0.5; } else { GlobalIsSystem = networkDiagramInfo.IsSystem; GlobalEnvelope = networkDiagramInfo.DiagramExtent; GlobalIsStored = networkDiagramInfo.IsStored; GlobalContainerMargin = networkDiagramInfo.ContainerMargin; } GlobalTypeGeo = GlobalGeodatabase.GetGeodatabaseType(); if (GlobalTypeGeo == GeodatabaseType.Service) { VersionManager vm = GlobalGeodatabase.GetVersionManager(); if (vm != null) { GlobalIsVersioned = (vm.GetCurrentVersion() != null); } else { GlobalIsVersioned = false; } } else { GlobalIsVersioned = false; } } else { GlobalDiagramLayer = null; } CleanSelections(); } catch (Exception ex) { ShowException(exception: ex); CleanModule(); } }); } } }
private string ValidateChangedFeatures(Layer layer) { StringBuilder resultString = new StringBuilder(); // Get utility network and geodatabase using (UtilityNetwork utilityNetwork = UtilityNetworkUtils.GetUtilityNetworkFromLayer(layer)) using (Geodatabase geodatabase = utilityNetwork.GetDatastore() as Geodatabase) { // Determine what to validate // File geodatabase - validate everything, synchronously // Default version - validate everything, asynchronously // Branch version - validate changes only, synchronously bool shouldValidateEverything; bool runAsync; if (!geodatabase.IsVersioningSupported()) { shouldValidateEverything = true; runAsync = false; } else { using (VersionManager versionManager = geodatabase.GetVersionManager()) using (Version currentVersion = versionManager.GetCurrentVersion()) { if (IsDefaultVersion(currentVersion)) { shouldValidateEverything = true; runAsync = true; } else { shouldValidateEverything = false; runAsync = false; } } } // If we validating everything, get an envelope from the dirty areas table EnvelopeBuilderEx envelopeBuilder = new EnvelopeBuilderEx(layer.GetSpatialReference()); if (shouldValidateEverything) { using (Table dirtyAreaTable = utilityNetwork.GetSystemTable(SystemTableType.DirtyAreas)) using (RowCursor rowCursor = dirtyAreaTable.Search()) { envelopeBuilder = GetExtentFromRowCursor(envelopeBuilder, rowCursor); } } // else get an envelope using version differences else { using (VersionManager versionManager = geodatabase.GetVersionManager()) using (Version currentVersion = versionManager.GetCurrentVersion()) using (Version defaultVersion = currentVersion.GetParent()) using (Geodatabase defaultGeodatabase = defaultVersion.Connect()) using (UtilityNetwork defaultUtilityNetwork = defaultGeodatabase.OpenDataset <UtilityNetwork>(utilityNetwork.GetName())) using (Table dirtyAreaTable = utilityNetwork.GetSystemTable(SystemTableType.DirtyAreas)) using (Table defaultDirtyAreaTable = defaultUtilityNetwork.GetSystemTable(SystemTableType.DirtyAreas)) using (DifferenceCursor inserts = dirtyAreaTable.Differences(defaultDirtyAreaTable, DifferenceType.Insert)) { envelopeBuilder = GetExtentFromDifferenceCursor(envelopeBuilder, inserts); } } // Run validate topology on our envelope Envelope extent = envelopeBuilder.ToGeometry(); ValidationResult result = utilityNetwork.ValidateNetworkTopologyInEditOperation(extent, runAsync ? ServiceSynchronizationType.Asynchronous : ServiceSynchronizationType.Synchronous); if (result.HasErrors) { resultString.AppendLine("Errors found."); } else { resultString.AppendLine("No errors found."); } } return(resultString.ToString()); }