ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.Data Namespace / Version Class / GetParent Method
Example

In This Topic
    GetParent Method (Version)
    In This Topic
    Gets this version's parent version. This method must be called on the MCT. Use QueuedTask.Run.
    Syntax
    public Version GetParent()
    Public Function GetParent() As Version

    Return Value

    This version's parent version if it has a parent; otherwise, null.
    Exceptions
    ExceptionDescription
    A geodatabase-related exception has occurred.
    This method or property must be called within the lambda passed to QueuedTask.Run
    Example
    Reconciling and Posting a Version with its Parent in separate edit sessions
    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);
                }
    
            }
        }
    }
    Reconciling and Posting a Version with its Parent in the same edit session
    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
    
                }
    
            }
        }
    }
    Working with Versions
    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");
            }
        });
    }
    Working with the Default Version
    // 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;
        }
    }
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3 or higher.
    See Also