public void FindDifferences(IWorkspace ws, List<string> tableNames)
{
try
{
// Searching for insert differences
foreach (string tableName in tableNames)
FindDiff(ws, tableName);
}
catch (Exception ex)
{
//Logging
}
}
public void FindDiff(IWorkspace workspace, string tabName)
{
IVersionedWorkspace versionedWorkspace = (IVersionedWorkspace)workspace;
IVersion childVersion = versionedWorkspace.DefaultVersion;
IVersion parentVersion = versionedWorkspace.FindVersion("MY_VERSION");
// Cast to the IVersion2 interface to find the common ancestor.
IVersion2 childVersion2 = (IVersion2)childVersion;
IVersion commonAncestorVersion = childVersion2.GetCommonAncestor(parentVersion);
// Cast the child version to IFeatureWorkspace and open the table.
IFeatureWorkspace childFWS = (IFeatureWorkspace)childVersion;
ITable childTable = childFWS.OpenTable(tabName);
// Cast the common ancestor version to IFeatureWorkspace and open the table.
IFeatureWorkspace commonAncestorFWS = (IFeatureWorkspace)commonAncestorVersion;
ITable commonAncestorTable = commonAncestorFWS.OpenTable(tabName);
IVersionedTable versionedTable = (IVersionedTable)childTable;
IDifferenceCursor differenceCursor = versionedTable.Differences(commonAncestorTable,
esriDifferenceType.esriDifferenceTypeInsert, null);
// Create output variables for the IDifferenceCursor.Next method.
IRow differenceRow = null;
int objectID = -1;
// Step through the cursor, showing the ID of each modified row.
differenceCursor.Next(out objectID, out differenceRow);
while (objectID != -1)
{
differenceCursor.Next(out objectID, out differenceRow);
ReleaseObject(differenceRow);
}
ReleaseObject(differenceCursor);
ReleaseObject(commonAncestorTable);
ReleaseObject(versionedTable);
}
public static void ReleaseObject(object comObj)
{
try
{
if (comObj != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(comObj);
}
}
catch { }
}
Hi Harrison,
I am implementing the same thing in JAVA. I have implemented same code you quoted above both JAVA and .NET. I could able to get correct results in .NET. However, I am not getting any results in JAVA. Below is my code in JAVA. Could you please help me out.
IVersionedWorkspace versionedWorkspace = new VersionedWorkspace(workspace);
IVersion childVersion = versionedWorkspace.findVersion("SDE.Test");
IVersion parentVersion = versionedWorkspace.getDefaultVersion();
// Cast to the IVersion2 interface to find the common ancestor.
IVersion2 childVersion2 = new IVersion2Proxy(childVersion);
commonAncestorVersion = childVersion2.getCommonAncestor(parentVersion);
// Cast the child version to IFeatureWorkspace and open the table.
IFeatureWorkspace childFWS = new IFeatureWorkspaceProxy(childVersion);
ITable childTable = childFWS.openTable(tableName);
// Cast the common ancestor version to IFeatureWorkspace and open the table.
commonAncestorFWS = new IFeatureWorkspaceProxy(commonAncestorVersion);
commonAncestorTable = commonAncestorFWS.openTable(tableName);
// Cast to the IVersionedTable interface to create a difference cursor.
IVersionedTable versionedTable = new IVersionedTableProxy(childTable);
differenceCursor = versionedTable.differences(commonAncestorTable, esriDifferenceType.esriDifferenceTypeInsert, null);
int countChildRecords = childTable.rowCount(null);
int countParentRecords = commonAncestorTable.rowCount(null);
// Create output variables for the IDifferenceCursor.Next method and a FID set.
IFIDSet fidSet = new FIDSet();
IRow[] differenceRow = null;
int[] objectID = null;
// Step through the cursor, showing the ID of each modified row.
differenceCursor.next(objectID, differenceRow);
Thanks & Regards,
Vara Prasad.