ArcGIS离线数据编辑【二】

0
分享 2014-04-24

在《ArcGIS离线数据编辑【一】》中介绍了ArcGIS的离线数据编辑技术的主要实现过程,本节将在上文的基础上介绍在离线数据编辑中的ArcSDE数据库版本的管理有关内容。
设定当前的ArcSDE数据库中除了默认的Default版本外,在Default版本基础上创建两个子版本V1、V2,并将这三个版本分别赋予sde、Version1、Version2三个用户。
分别以V1、V2两个版本登录,执行相应的离线编辑,确保编辑后的结果在向其父版本提交时存在冲突。
在提交版本过程中,首先使用IWorkspaceEdit4接口的Reconcile4方法进行版本协调,监测是否存在冲突;Reconcile4方法参数要根据冲突解决方案来设定
监测出来的冲突提供了如下三种解决方案:
(1)数据库版本替换当前版本:使用Default版本中的内容替换当前提交的版本。
(2)当前版本替换数据库版本:使用当前提交的编辑版本替换Default版本中的内容。
(3)用户自定义冲突解决方案:根据实际的情况对冲突要素实体逐个解决。
版本提交的源代码:
publicstaticvoid CommitVsn(IWorkspacewsp, clsPublic.ConflictCheck pCheck, AxMapControl sMapCtrl)
{

IWorkspaceEdit pWSE = wsp asIWorkspaceEdit;

IVersionEdit4 pVsnE = wsp asIVersionEdit4;

try

{

boolbLock = true;

boolbabortIfConflict = false;

boolbChildWin = false;

boolbattributeCheck = true;

if(pCheck == clsPublic.ConflictCheck.Current)

bChildWin = true;

pWSE.StartEditing(false);

if(!pWSE.IsBeingEdited()) return;

pWSE.StartEditOperation();

if(!pVsnE.Reconcile4(“SDE.DEFAULT”, bLock, babortIfConflict, bChildWin,battributeCheck))

{

if(pVsnE.CanPost())

{

pVsnE.Post(“SDE.DEFAULT”);

pWSE.StopEditOperation();

}

else

{

pWSE.AbortEditOperation();

}

pWSE.StopEditing(true);

}

else

{

if(pCheck == clsPublic.ConflictCheck.UserDefine)

{

//用户自定义处理过程

SortedList<string, IConflictClass>sConflictClassLst = newSortedList<string, IConflictClass>();

IVersionEdit pVsnEdit = wsp asIVersionEdit;

CheckConflictClass(pVsnEdit, sConflictClassLst);

if (sConflictClassLst.Count == 0)

{

pVsnE.Post(“SDE.DEFAULT”);

pWSE.StopEditOperation();

pWSE.StopEditing(true);

}

else

{

frmManageConflict pfrm = newfrmManageConflict(pVsnEdit,sConflictClassLst,sMapCtrl);

pfrm.ShowDialog();

bool bAllManage = pfrm.IsAllManage;

pfrm.Dispose();

if (bAllManage)

{

pVsnE.Post(“SDE.DEFAULT”);

pWSE.StopEditOperation();

pWSE.StopEditing(true);

}

else

{

pWSE.AbortEditOperation();

pWSE.StopEditing(false);

}

}

}

elseif (pCheck == clsPublic.ConflictCheck.Current)

{

pVsnE.Post(“SDE.DEFAULT”);

pWSE.StopEditOperation();

pWSE.StopEditing(true);

}

elseif (pCheck == clsPublic.ConflictCheck.DataBase)

{

pWSE.StopEditOperation();

pWSE.StopEditing(true);

}

}

MessageBox.Show(“版本提交完毕!“, “提示“, MessageBoxButtons.OK, MessageBoxIcon.Information);

}

catch (Exception pEr)

{

MessageBox.Show(pEr.Message,“提示“, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

pWSE.AbortEditOperation();

pWSE.StopEditing(false);

}

}

文章来源:http://blog.csdn.net/sydbc/article/details/17349779

0 个评论

要回复文章请先登录注册