In this topic
Reconciling versions
The IVersionEdit4 interface contains the Reconcile4 method with the following five arguments:
- VersionName
- acquireLock
- abortIfConflicts
- ChildWins
- columnLevel
Each argument affects how the reconcile is performed. It is important to understand the impact of the different property values and influence they have on the reconcile process.
VersionName
The VersionName property is the name of the target version that the source version is reconciled against. The target version must be an ancestral version, for example, the immediate parent version or default version.
acquireLock
The default behavior of reconcile is to obtain a shared version lock on the target version. The lock ensures the target version cannot be reconciled while the source version can be reconciled. The purpose of the version lock on the target version is to ensure the version is available when the intention is to post. If the intention is not to post to the target version following a reconcile, the acquireLock parameter can be set to false.
abortIfConflicts
It is also possible to abort the reconcile when a conflict is detected. Setting the abortIfConflicts to true aborts the reconcile process when conflicts are detected; for example, this can be used when performing the reconcile in a batch process without human interaction to resolve the conflicts.
ChildWins
If conflicts occur, the conflicts are initially resolved in favor of the target version. Setting this argument to true replaces all conflicting features with the source version's representation of the object.
columnLevel
The reconcile method also provides the ability to define what constitutes a conflict during the reconcile. The columnLevel argument is a Boolean argument that if set to true, only promotes the same modified object in both versions as a conflict if the same attribute for the object has changed in both versions. For example, if a feature was moved in the target version, the same feature's attribute was updated in the edit version, and if column level conflict filtering was set to true, the reconcile would not detect this feature as a conflict.
The following code example shows how reconcile can be used in a versioned edit session:
[C#]
public void ReconcileandPost(IVersion editVersion, IVersion targetVersion)
{
IMultiuserWorkspaceEdit muWorkspaceEdit = (IMultiuserWorkspaceEdit)editVersion;
IWorkspaceEdit workspaceEdit = (IWorkspaceEdit2)editVersion;
IVersionEdit4 versionEdit = (IVersionEdit4)workspaceEdit;
if (muWorkspaceEdit.SupportsMultiuserEditSessionMode
(esriMultiuserEditSessionMode.esriMESMVersioned))
{
muWorkspaceEdit.StartMultiuserEditing
(esriMultiuserEditSessionMode.esriMESMVersioned);
//Reconcile with the target version.
bool conflicts = versionEdit.Reconcile4(targetVersion.VersionName, true,
false, false, false);
if (conflicts)
MessageBox.Show(" Conflicts Detected ");
else
MessageBox.Show(" No Conflicts Detected ");
workspaceEdit.StartEditOperation();
//Post to the target version.
if (versionEdit.CanPost())
versionEdit.Post(targetVersion.VersionName);
workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);
}
}
[VB.NET]
Public Sub ReconcileAndPost(ByVal editVersion As IVersion, ByVal targetVersion As IVersion)
Dim muWorkspaceEdit As IMultiuserWorkspaceEdit = CType(editVersion, IMultiuserWorkspaceEdit)
Dim workspaceEdit As IWorkspaceEdit = CType(editVersion, IWorkspaceEdit2)
Dim versionEdit As IVersionEdit4 = CType(workspaceEdit, IVersionEdit4)
If muWorkspaceEdit.SupportsMultiuserEditSessionMode(esriMultiuserEditSessionMode.esriMESMVersioned) Then
muWorkspaceEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned)
Dim conflicts As Boolean = versionEdit.Reconcile4(targetVersion.VersionName, True, False, False, False)
If conflicts Then
MessageBox.Show(" Conflicts Detected ")
Else
MessageBox.Show(" No Conflicts Detected ")
End If
workspaceEdit.StartEditOperation()
If versionEdit.CanPost Then
versionEdit.Post(targetVersion.VersionName)
End If
workspaceEdit.StopEditOperation()
workspaceEdit.StopEditing(True)
End If
End Sub
Using RecommendedReconcileOrder on IVersionedWorkspace2
The RecommendedReconcileOrder property returns an enumerator of version names based on the ascending order of each version's common ancestor state with respect to the default version. If a version's common ancestor state is equal to or greater than the state the default version references, it will not be included in the enumerator.
The property is intended to be used before running a compress. If all or some of the versions returned by RecommendedReconcileOrder are reconciled based on the enumerator's order, the compress operation can move more rows from a table's versioned delta tables to the base tables. The more versions reconciled based on the order of versions returned, the more rows will be compressed to the base table.
To use the code in this topic, reference the following assemblies in your Visual Studio project. In the code files, you will need using (C#) or Imports (VB .NET) directives for the corresponding namespaces (given in parenthesis below if different from the assembly name):
ESRI.ArcGIS.Geodatabase ESRI.ArcGIS.Geometry ESRI.ArcGIS.System (ESRI.ArcGIS.esriSystem)
Development licensing | Deployment licensing |
---|---|
ArcEditor | ArcEditor |
ArcInfo | ArcInfo |
Engine Developer Kit | Engine Runtime: Geodatabase Update |