AE多用户同时编辑同一个版本数据的解决方法
项目中做了入库的功能,测试一切正常,但是实际使用多个用户同时编辑default版本的时候,问题就来了,StopEditing 错误信息如下
| FDO_E_VERSION_REDEFINED | -2147217147 | The version has been redefined to reference a new database state. |
字面意思理解,保存的时候,版本状态已经被重定义了;也就是说保存之前没有协调到最新的版本状态。
AE开发,arcmap是最好的老师,先看看arcmap是怎么处理这种情况的吧。在本机打开两个arcmap,模拟同时编辑的情况,第一次保存的一切正常,第二次保存的就会报错了,错误信息如下:
Unable to create logfile system tables. User perhaps lacks permissions or resources to create tables
一、设置SDE相关
经过查询得知,是需要修改日志文件(基于会话的日志文件 Session log files)
修改方法有三种:
1,通过sdeconfig -o alter
2, 通过sdeconfig -o export import
3, 直接打开数据库表修改
修改内容 ALLOWSESSIONLOGFILE=TRUE;LOGFILEPOOLSIZE=20;具体修改方法,可参考引用文章1。
Insufficient permissions <-25> 如果发现这个错误,那么是你修改的时候使用的用户没有权限,你只有用sde用户才能修改server_config。
通过修改,现在arcmap中已经是可以多用户同时编辑了,如果有冲突,会有冲突列表提示;如果内容合并,默认也会有合并提示,人工确定后,可以保存。
如果在arcmap中不希望弹出提示信息,可以在编辑选项中设置,设置方法,参见引用文章2
二、代码实现
IVersionEdit.Reconcile Method ,用了协调版本之间的差异,直接使用,发现在多用户编辑的要素都不相同的时候,是可以正常协调的,但是如果编辑的是相同的要素,则无法检测到冲突。IVersionEdit4.Reconcile4 Method 这个方法同样也不行,然后继续搜索资料,根据引用文章3的方法,使用IMultiuserWorkspaceEdit.StartMultiuserEditing Method;使用该接口,可以正常协调合并,使用方法见引用文章4
主要代码
IMultiuserWorkspaceEditPtr ipMultiuserWorkspaceEdit;
hr = ipMultiuserWorkspaceEdit->StartMultiuserEditing(esriMESMVersioned);
//编辑。。。
ipWorkspaceEdit->StartEditOperation();
//........
ipWorkspaceEdit->StopEditOperation(); //必须在StopEditOperation后调用,否则会丢失编辑内容
IVersionedWorkspacePtr ipVersionedWorkspace = (IVersionedWorkspacePtr)ipWorkspaceEdit;
IVersionPtr ipVersion;
hr = ipVersionedWorkspace->get_DefaultVersion(&ipVersion);
BSTR bVersionName=NULL;
hr = ipVersion->get_VersionName(&bVersionName);
IVersionEdit4Ptr ipVersionEdit4 = (IVersionEdit4Ptr)ipWorkspaceEdit;
VARIANT_BOOL vbReconcile;
hr = ipVersionEdit4->Reconcile4(bVersionName,VARIANT_TRUE,VARIANT_FALSE,VARIANT_TRUE,VARIANT_TRUE,&vbReconcile);
if (VARIANT_TRUE == vbReconcile)
{
SHOW_MESSAGE_BOX(_T("检测到编辑冲突,请稍后再试"));
return FALSE;
}
VARIANT_BOOL vbCanPost;
hr = ipVersionEdit4->CanPost(&vbCanPost);
if (VARIANT_TRUE == vbCanPost)
{
hr = ipVersionEdit4->Post(bVersionName);
}
hr = ipWorkspaceEdit->StopEditing(VARIANT_TRUE);
关于该部分的详细解释,可以参考引用文章5
PS:关于日志表详细介绍,可以查看引用文章6
参考文章
1. http://www.cnblogs.com/cannel/archive/2011/03/15/1985493.html
2. http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#geodatabases/an_overv-60074501.htm
4. http://www.docin.com/p-458035218.html
5. http://blog.163.com/geliang0021@126/blog/static/3232232920121171127582/
6. http://blog.csdn.net/linghe301/article/details/8072907
AE多用户同时编辑同一个版本数据的解决方法的更多相关文章
- 【ArcEngine】多用户同时编辑同一个版本数据的解决方法
ArcMap或ArcEngine中,使用多个用户同时编辑default版本的时候,问题就来了,StopEditing 错误信息如下 FDO_E_VERSION_REDEFINED -214721714 ...
- git 本地库推送远程库 版本冲突的解决方法
参考: http://blog.csdn.net/shiren1118/article/details/7761203 github上的版本和本地版本冲突的解决方法 $ git push XXX ma ...
- 更新xcode后插件失效问题——不针对特定版本的通用解决方法
一.Xcode更新后插件失效的原理 1.每次更新Xcode后插件都会失效,其实插件都还在这个目录好好的躺着呢: ~/Library/Application Support/Developer/Shar ...
- SQLServerException:将截断字符串或二进制数据的解决方法
SQLServerException:将截断字符串或二进制数据的解决方法: 最近使用JPA进行保存对象到数据库中怎么也添加不进去,始终报错 主要原因就是你增加的数据字段长度超过数据库中字段所定义长度, ...
- resultMap中的collection集合出现只能读取一条数据的解决方法
查询数据时只能获得collection集合中的的一条数据,相关情况如下: 结果集resultMap: <resultMap id="ManagerRolesAcls" typ ...
- .NET MVC Json()处理大数据异常解决方法
[1-部分原文]: .NET MVC Json()处理大数据异常解决方法 整个项目采用微软的ASP.NET MVC3进行开发,前端显示采用EasyUI框架,图表的显示用的是Highcharts,主要进 ...
- mysql5.x升级到mysql5.7后导入之前数据库date出错的快速解决方法【mysql低版本数据导入到高版本出错的解决方法】
mysql5.x升级至mysql5.7后导入之前数据库date出错,这是由于MySQL的sql_mode的影响,解决方法如下所示: [具体参考:mysql的sql_mode详解]修改mysql5.7的 ...
- Hive数据倾斜解决方法总结
数据倾斜是进行大数据计算时最经常遇到的问题之一.当我们在执行HiveQL或者运行MapReduce作业时候,如果遇到一直卡在map100%,reduce99%一般就是遇到了数据倾斜的问题.数据倾斜其实 ...
- esayUi中datagrid中json串为空时,显示上一次数据的解决方法
function initSearchProject(startDate,finishDate,flag) { $("#finishDate").val(finish ...
随机推荐
- ArcGIS10.4破解
arcgis 10.4破解方法 *注意!Desktop,Engine,Server必须为同一版本* Engine10.4破解失败,SDE10.4未进行破解 1.先安装License10.4 2.再安装 ...
- springboot整合mybatis,redis,代码(二)
一 说明: springboot整合mybatis,redis,代码(一) 这个开发代码的复制粘贴,可以让一些初学者直接拿过去使用,且没有什么bug 二 对上篇的说明 可以查看上图中文件: 整个工程包 ...
- C++_类和动态内存分配2-改进后的String类
添加前面介绍过的复制构造函数和赋值运算符,使类能够正确管理类对象使用的内存. 知道对象何时被创建和释放. =================================== 修订后的默认构造函数 ...
- 【算法笔记】B1039 到底买不买
1039 到底买不买 (20 分) 小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子 ...
- springboot(六)-使用shiro
前提 写之前纠结了一番,这一节放在shiro里面还是springboot里面.后来想了下,还是放springboot里吧,因为这里没有shiro的新东西,只有springboot添加了新东西的使用. ...
- C++ GUI Qt4编程(13)-6.2preferencedialog
1. 主要介绍了QStackedLayout.QListWidget.QDialogButtonBox的简单用法.2. QStackedLayout: 要使某个特定的子窗口部件可见,可以用setC ...
- UnityError The same field name is serialized multiple times in the class or its parent class. This is not supported: Base(MonoBehaviour) i
相同的字段名在类或其父类中被多次序列化.这是不支持的, 这里指的是 变量i . 写如下两个脚本挂到新项目的相机上运行就会出现这个问题: public class Father : MonoBehavi ...
- Linux 后台运行程序 和切换至前台
fg 将后台中的命令调至前台继续运行 jobs查看当前有多少在后台运行的命令 ctrl + z可以将一个正在前台执行的命令放到后台,并且暂停
- Rabbitmq~对Vhost的配置
rabbitmq里有一些概念我们要清楚,如vhost,channel,exchange,queue等,而前段时间在部署rabbitmq环境时启用了虚拟主机vhost,感觉他主要是起到了消息隔离的作用, ...
- mysql中字段类型是datetime时比较大小问题
select sum(studychj) as tofflinejz from afterline where studybegin >= '2010-01-01 00:00:00' and s ...