ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.Data Namespace / ConflictResolutionType Enumeration
Example Example

In This Topic
    ConflictResolutionType Enumeration
    In This Topic
    Specifies how conflicts are resolved.
    Syntax
    Members
    MemberDescription
    FavorEditVersion When a conflict is found, it is resolved in favor of the edit version.
    FavorTargetVersion When a conflict is found, it is resolved in favor of the target version. This option is not supported with branch versioning.
    Example
    Get and Set Versioning Options
    var vOptions = ApplicationOptions.VersioningOptions;
    
    vOptions.DefineConflicts = (vOptions.DefineConflicts == ConflictDetectionType.ByRow) ? 
      ConflictDetectionType.ByColumn : ConflictDetectionType.ByRow;
    vOptions.ConflictResolution = (
      vOptions.ConflictResolution == ConflictResolutionType.FavorEditVersion) ? 
        ConflictResolutionType.FavorTargetVersion : ConflictResolutionType.FavorEditVersion;
    vOptions.ShowConflictsDialog = !vOptions.ShowConflictsDialog;
    vOptions.ShowReconcileDialog = !vOptions.ShowReconcileDialog;
    
    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);
                }
    
            }
        }
    }
    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
    
                }
    
            }
        }
    }
    Inheritance Hierarchy

    System.Object
       System.ValueType
          System.Enum
             ArcGIS.Core.Data.ConflictResolutionType

    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3 or higher.
    See Also