今天又考虑了下在Engine里实现版本协调、提交的过程,主要的方法还是IVersionEdit4.Reconcile4,开发文档里关于这个方法有很多的要求和说明,比如需要在协调的时候避免其它用户编辑这个版本或同时进行协调。
在ArcMap中是可以在协调的时候查看每条记录的各个版本下的情况,再决定到底按哪个版本来协调这条记录,Engine中如何实现这点呢?
可以通过Reconcile4方法先进行协调,协调的时候指定目标版本,冲突要素全部会按指定的规则来协调,完成后获取ConflictClass,通过IConflictClass.RestoreRow来改变具体要素的协调规则(恢复到另一个版本)。这样版本A和版本B协调的时候,就能实现针对具体的要素按A版本来协调,或者按B版本来协调了。
说明一下IVersionedTable.Difference方法,它也可以针对两边版本不同的编辑情况获取到相应的要素,而且可以有查询条件。但这个接口是在reconcile之前去获取的,也就是它只能帮助我们查看两边版本都对应的做了哪些编辑。