Return Value
This version's parent version if it has a parent; otherwise, null.
Exception | Description |
---|---|
ArcGIS.Core.Data.Exceptions.GeodatabaseException | A geodatabase-related exception has occurred. |
ArcGIS.Core.CalledOnWrongThreadException | This method or property must be called within the lambda passed to QueuedTask.Run |
public void ReconcileAndPost(Geodatabase geodatabase) { // Get a reference to our version and our parent if (geodatabase.IsVersioningSupported()) { using (VersionManager versionManager = geodatabase.GetVersionManager()) using (Version currentVersion = versionManager.GetCurrentVersion()) using (Version parentVersion = currentVersion.GetParent()) { //// Create a ReconcileDescription object //At 2.x - //ReconcileDescription reconcileDescription = new ReconcileDescription(parentVersion); //reconcileDescription.ConflictResolutionMethod = ConflictResolutionMethod.Continue; // continue if conflicts are found //reconcileDescription.WithPost = true; //// Reconcile and post //ReconcileResult reconcileResult = currentVersion.Reconcile(reconcileDescription); // ReconcileResult.HasConflicts can be checked as-needed // Create a ReconcileOptions object ReconcileOptions reconcileOptions = new ReconcileOptions(parentVersion); reconcileOptions.ConflictResolutionMethod = ConflictResolutionMethod.Continue; // continue if conflicts are found reconcileOptions.ConflictDetectionType = ConflictDetectionType.ByRow; //Default reconcileOptions.ConflictResolutionType = ConflictResolutionType.FavorTargetVersion;//or FavorEditVersion // Reconcile ReconcileResult reconcileResult = currentVersion.Reconcile(reconcileOptions); if (!reconcileResult.HasConflicts) { //No conflicts, perform the post PostOptions postOptions = new PostOptions(parentVersion); //var postOptions = new PostOptions(); for default version postOptions.ServiceSynchronizationType = ServiceSynchronizationType.Synchronous;//Default currentVersion.Post(postOptions); } } } }
public void ReconcileAndPost2(Geodatabase geodatabase) { // Get a reference to our version and our parent if (geodatabase.IsVersioningSupported()) { using (VersionManager versionManager = geodatabase.GetVersionManager()) using (Version currentVersion = versionManager.GetCurrentVersion()) using (Version parentVersion = currentVersion.GetParent()) { //// Create a ReconcileDescription object //At 2.x - //ReconcileDescription reconcileDescription = new ReconcileDescription(parentVersion); //reconcileDescription.ConflictResolutionMethod = ConflictResolutionMethod.Continue; // continue if conflicts are found //reconcileDescription.WithPost = true; //// Reconcile and post //ReconcileResult reconcileResult = currentVersion.Reconcile(reconcileDescription); // ReconcileResult.HasConflicts can be checked as-needed // Create a ReconcileOptions object ReconcileOptions reconcileOptions = new ReconcileOptions(parentVersion); reconcileOptions.ConflictResolutionMethod = ConflictResolutionMethod.Continue; // continue if conflicts are found reconcileOptions.ConflictDetectionType = ConflictDetectionType.ByRow; //Default reconcileOptions.ConflictResolutionType = ConflictResolutionType.FavorTargetVersion;//or FavorEditVersion PostOptions postOptions = new PostOptions(parentVersion); //var postOptions = new PostOptions(); for default version postOptions.ServiceSynchronizationType = ServiceSynchronizationType.Synchronous;//Default // Reconcile ReconcileResult reconcileResult = currentVersion.Reconcile(reconcileOptions, postOptions); if (reconcileResult.HasConflicts) { //TODO resolve conflicts } } } }
public async Task WorkingWithVersions() { await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() => { using (Geodatabase geodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file")))) using (VersionManager versionManager = geodatabase.GetVersionManager()) { IReadOnlyList<string> versionNames = versionManager.GetVersionNames(); Version defaultVersion = versionManager.GetDefaultVersion(); string testVersionName = versionNames.First(v => v.Contains("Test")); Version testVersion= versionManager.GetVersion(testVersionName); Version qaVersion = defaultVersion.GetChildren().First(version => version.GetName().Contains("QA")); Geodatabase qaVersionGeodatabase = qaVersion.Connect(); FeatureClass currentFeatureClass = geodatabase.OpenDataset<FeatureClass>("featureClassName"); FeatureClass qaFeatureClass = qaVersionGeodatabase.OpenDataset<FeatureClass>("featureClassName"); } }); }
// Check to see if the current version is default. // Works with both branch and traditional versioning. public bool IsDefaultVersion(Version version) { Version parentVersion = version.GetParent(); if (parentVersion == null) { return true; } parentVersion.Dispose(); return false; } public bool IsDefaultVersion(Geodatabase geodatabase) { if (!geodatabase.IsVersioningSupported()) return false; using (VersionManager versionManager = geodatabase.GetVersionManager()) using (Version currentVersion = versionManager.GetCurrentVersion()) { return IsDefaultVersion(currentVersion); } } // Gets the default version. // Works with both branch and traditional versioning. // Note that this routine depends on IsDefaultVersion(), above. public Version GetDefaultVersion(Version version) { if (IsDefaultVersion(version)) { return version; } else { Version parent = version.GetParent(); Version ancestor = GetDefaultVersion(parent); if (parent != ancestor) { parent.Dispose(); //If the versioning tree is more than 2 deep, we want to dispose any intermediary versions } return ancestor; } } public Version GetDefaultVersion(Geodatabase geodatabase) { if (!geodatabase.IsVersioningSupported()) return null; using (VersionManager versionManager = geodatabase.GetVersionManager()) { Version currentVersion = versionManager.GetCurrentVersion(); Version defaultVersion = GetDefaultVersion(currentVersion); if (currentVersion != defaultVersion) { currentVersion.Dispose(); // If we are not pointing to default, we want to dispose this Version object } return defaultVersion; } }
Target Platforms: Windows 11, Windows 10