Get the version from the first feature layer in the TOC and feature class names from all feature layers in the TOC
public List<VersionChanges> GetChanges(Version version, List<string> featureclassnames)
{
List<VersionChanges> retval = new List<VersionChanges>();
using (Geodatabase versiongdb = version.Connect())
{
var defaultversion = versiongdb.GetVersionManager().GetVersions().First(v => v.GetParent() == null);
using (Geodatabase g = defaultversion.Connect())
{
foreach (var item in featureclassnames)
{
var versionchanges = GetVersionChangesByFeatureClass(g, versiongdb, item);
if (versionchanges != null)
retval.Add(versionchanges);
}
}
}
return retval;
}
private VersionChanges GetVersionChangesByFeatureClass(Geodatabase g, Geodatabase versiongdb, string featureclassname)
{
try
{
using (FeatureClass defaultFc = g.OpenDataset<FeatureClass>(featureclassname))
{
using (FeatureClass versionFc = versiongdb.OpenDataset<FeatureClass>(featureclassname))
{
var rtype = versionFc.GetRegistrationType();
if (rtype.Equals(RegistrationType.Nonversioned))
return null;
List<VersionChange> diffs = GetAllDifferences(defaultFc, versionFc);
return new VersionChanges { featureClassName = featureclassname, Changes = diffs };
}
}
}
catch (GeodatabaseEnterpriseException)
{
return null;
}
catch (GeodatabaseTableException)
{
return null;
}
}
private List<VersionChange> GetAllDifferences(FeatureClass defaultFc, FeatureClass versionFc)
{
List<VersionChange> retval = new List<VersionChange>();
retval.AddRange(GetDifferences(defaultFc, versionFc, DifferenceType.DeleteNoChange));
retval.AddRange(GetDifferences(defaultFc, versionFc, DifferenceType.DeleteUpdate));
retval.AddRange(GetDifferences(defaultFc, versionFc, DifferenceType.Insert));
retval.AddRange(GetDifferences(defaultFc, versionFc, DifferenceType.UpdateDelete));
retval.AddRange(GetDifferences(defaultFc, versionFc, DifferenceType.UpdateNoChange));
retval.AddRange(GetDifferences(defaultFc, versionFc, DifferenceType.UpdateUpdate));
return retval;
}
private List<VersionChange> GetDifferences(FeatureClass defaultFc, FeatureClass versionFc, DifferenceType differenceType)
{
List<VersionChange> retval = new List<VersionChange>();
using (DifferenceCursor differenceCursor = defaultFc.Differences(versionFc, differenceType))
{
List<long> diffs = new List<long>();
while (differenceCursor.MoveNext())
{
diffs.Add(differenceCursor.ObjectID);
}
retval.AddRange(diffs.Select(s => new VersionChange { objectId = s, differenceType = differenceType }));
}
return retval;
}
public class VersionChange
{
public DifferenceType differenceType { get; set; }
public long objectId { get; set; }
}
public class VersionChanges
{
public string featureClassName { get; set; }
public List<VersionChange> Changes {get;set;}
}