ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.Data Namespace / Version Class / Reconcile Method / Reconcile(ReconcileOptions) Method
If ReconcileOptions.TargetVersion is not specified in reconcileOptions, then the target version is the Default version.
Example

In This Topic
    Reconcile(ReconcileOptions) Method
    In This Topic
    Reconciles this version against a target version specified in reconcileOptions. This method must be called on the MCT. Use QueuedTask.Run.
    Syntax
    Public Overloads Function Reconcile( _
       ByVal reconcileOptions As ReconcileOptions _
    ) As ReconcileResult

    Parameters

    reconcileOptions
    If ReconcileOptions.TargetVersion is not specified in reconcileOptions, then the target version is the Default version.

    Return Value

    An instance of ReconcileResult indicating the results of the operation.
    Exceptions
    ExceptionDescription
    reconcileOptions is null.

    This operation is not supported in client-server mode because the data store supports multi-branch versioning.

    -or-

    Multi-branch versioning does not support a ConflictResolutionType that favors the target version.

    Reconcile cannot be performed in an active edit session.
    A geodatabase-related exception has occurred.
    This method or property must be called within the lambda passed to QueuedTask.Run
    Example
    Illustrate version conflict information from a reconcile operation
    public void GetVersionConflictsInfoInUpdateDeleteType(ServiceConnectionProperties featureServiceConnectionProperties, string featureClassName)
    {
        // To illustrate the conflict between versions,
        // the feature is updated in the child version and deleted in the parent version.
    
        long featureObjectIDForEdit = Int64.MinValue;
    
        // Get branch versioned service
        using (Geodatabase fsGeodatabase = new Geodatabase(featureServiceConnectionProperties))
        using (VersionManager versionManager = fsGeodatabase.GetVersionManager())
        using (Version defaultVersion = versionManager.GetDefaultVersion())
        using (Geodatabase defaultGeodatabase = defaultVersion.Connect())
        using (FeatureClass defaultFeatureClass = defaultGeodatabase.OpenDataset<FeatureClass>(featureClassName))
        using (FeatureClassDefinition defaultFeatureClassDefinition = defaultFeatureClass.GetDefinition())
        {
            // Create a feature in the default version to edit in a branch
            defaultGeodatabase.ApplyEdits(() =>
            {
                using (RowBuffer rowBuffer = defaultFeatureClass.CreateRowBuffer())
                {
                    rowBuffer["NAME"] = "Loblolly Pine";
                    rowBuffer["TREEAGE"] = 1;
                    rowBuffer[defaultFeatureClassDefinition.GetShapeField()] = new MapPointBuilderEx(new Coordinate2D(1, 1),
              SpatialReferenceBuilder.CreateSpatialReference(4152, 0)).ToGeometry();
    
                    using (Feature feature = defaultFeatureClass.CreateRow(rowBuffer))
                    {
                        featureObjectIDForEdit = feature.GetObjectID();
                    }
                }
            });
    
            // Add newly created feature in the filter
            QueryFilter queryFilter = new QueryFilter { ObjectIDs = new List<long> { featureObjectIDForEdit } };
    
            // Create a branch version
            VersionDescription versionDescription = new VersionDescription("UpdateDeleteConflictType",
              "Update-Delete version conflict type", VersionAccessType.Private);
    
            // Edit the feature in the branch 
            using (Version editVersion = versionManager.CreateVersion(versionDescription))
            using (Geodatabase branchGeodatabase = editVersion.Connect())
            using (FeatureClass featureClass = branchGeodatabase.OpenDataset<FeatureClass>(featureClassName))
            using (RowCursor rowCursor = featureClass.Search(queryFilter, false))
            {
                branchGeodatabase.ApplyEdits(() =>
                {
                    while (rowCursor.MoveNext())
                    {
                        using (Row row = rowCursor.Current)
                        {
                            row["TREEAGE"] = 100;
                            row["NAME"] = $"{row["Name"]}_EditInBranch";
                            row.Store();
                        }
                    }
                });
    
                // Delete the feature from the default version
                defaultFeatureClass.DeleteRows(queryFilter);
    
                // Reconcile options
                ReconcileOptions reconcileOptions = new ReconcileOptions(defaultVersion)
                {
                    ConflictResolutionType = ConflictResolutionType.FavorEditVersion,
                    ConflictDetectionType = ConflictDetectionType.ByRow,
                    ConflictResolutionMethod = ConflictResolutionMethod.Continue
                };
    
                // Reconcile with default
                ReconcileResult reconcileResult = editVersion.Reconcile(reconcileOptions);
    
                // Check for conflicts
                bool hasConflictsReconcileResults = reconcileResult.HasConflicts;
                bool hasConflictsAfterReconcile = editVersion.HasConflicts();
    
                // Fetch conflicts
                IReadOnlyList<Conflict> conflictsAfterReconcile = editVersion.GetConflicts();
    
                // Iterate conflicts
                foreach (Conflict conflict in conflictsAfterReconcile)
                {
                    // Object ID of row where conflict occurs
                    long objectId = conflict.ObjectID;
    
                    ConflictType conflictType = conflict.ConflictType;
    
                    IReadOnlyList<FieldValue> ancestorVersionValues = conflict.AncestorVersionValues;
                    object nameAncestor = ancestorVersionValues.FirstOrDefault(f => f.FieldName.Contains("NAME")).Value;
                    object treeAgeAncestor = ancestorVersionValues.FirstOrDefault(f => f.FieldName.Contains("TREEAGE")).Value;
    
                    IReadOnlyList<FieldValue> childVersionValues = conflict.ChildVersionValues;
                    object nameChild = childVersionValues.FirstOrDefault(f => f.FieldName.Contains("NAME")).Value;
                    object treeAgeChild = childVersionValues.FirstOrDefault(f => f.FieldName.Contains("TREEAGE")).Value;
    
                    IReadOnlyList<FieldValue> parentVersionValues = conflict.ParentVersionValues;
    
                    IReadOnlyList<Field> originalFields = defaultFeatureClassDefinition.GetFields();
    
                    string datasetName = conflict.DatasetName;
                }
            }
        }
    }
    
    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);
                }
    
            }
        }
    }
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3 or higher.
    See Also