semon1981
路人甲
路人甲
  • 注册日期2006-06-04
  • 发帖数28
  • QQ
  • 铜币198枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1594回复:2

[讨论]关于版本管理

楼主#
更多 发布于:2006-07-14 13:14
<P>近期在写关于版本管理方面的模块,写一些心得及存在的问题。在多用户同时编辑的时候涉及到数据的一致性和冲突的问题,而在Arc GIS中有版本管理的功能,每个用户可以创建不同的版本,各个版本之间不存在数据的一致和资源的冲突,也就是说每个版本的修改不会影响到其他用版本的内容。但是实际情况中,我们需要保持数据的一致性,同时可以多个用户同时编辑,而这里不同用户以不同的版本修改并不会影响其他版本的改变。我的想法是:编辑时以某一个子版本编辑,修改后提交(IVersionEdit 有一个Post方法)到父版本(创建版本的时候都是以某一个版本作为父版本为根创建的,我这里只分为唯一一个父版本DEFAULT版本和多个子版本),但是父版本是不能提交给子版本,同级别的版本也不能互相提交;所以当某一个用户提交数据更新父版本(即公共的版本),则其他在线用户会收到一个由服务器发来的更新消息,如果该用户需要更新则把他正在使用的版本删除再以父版本为根创建再加载地图。</P>
<P>出现的问题:正在使用的版本是不能被删除的,怎么关闭这个版本?是不是要把数据源断开 ?</P>
<P>有没有更好的办法,请各位大虾指点 。</P>
喜欢0 评分0
zhousky
论坛版主
论坛版主
  • 注册日期2003-08-01
  • 发帖数281
  • QQ
  • 铜币1027枚
  • 威望3点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2006-07-16 20:16
感觉版本这块实在太复杂了,呵,看ESRI的说明是看明白了,但自己动手实现就比较麻烦了,先支持 一下
不要看我噢
举报 回复(0) 喜欢(0)     评分
semon1981
路人甲
路人甲
  • 注册日期2006-06-04
  • 发帖数28
  • QQ
  • 铜币198枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2006-07-17 16:20
<P><STRONG><FONT face=Verdana color=#da2549>To:zhousky</FONT></STRONG></P>
<P><STRONG><FONT face=Verdana color=#da2549>把你的想法拿出来说说,讨论一下哈。</FONT></STRONG></P>
<P><STRONG><FONT face=Verdana color=#da2549>还有我在更新数据的时候出现不能更新的问题,就是在运行程序中,如果其他用户改变服务器的地图数据,我在重新加载地图数据还是原来的数据,这是怎么回事?</FONT></STRONG></P>
<P>//=======================================================================<BR>        //重新加载地图<BR>        //创建时间:06-07-13<BR>        //最后修改时间:<BR>        //输入参数:userVersion 以该版本加载地图数据<BR>//=======================================================================<BR>        public bool ReLoadMap(String userVersion)<BR>        {<BR>            <BR>            //connect to the server of sde<BR>            try<BR>            {<BR>                layersContainer.SetBuddyControl(null);<BR>                <BR>                //删除所有图层<BR>                if (map != null) map.ClearLayers(); <BR>                if (eyeMap != null) eyeMap.ClearLayers();<BR>                if (!bDataChanged) return true;<BR>                IPropertySet iProSet = new PropertySet();<BR>                iProSet.SetProperty("SERVER", systemP.sdeIP);<BR>                iProSet.SetProperty("INSTANCE", systemP.sdeServiceName);<BR>                iProSet.SetProperty("DATABASE", systemP.serviceName);<BR>                iProSet.SetProperty("USER", dataInfo.userName);<BR>                iProSet.SetProperty("PASSWORD", dataInfo.userPassword);<BR>                iProSet.SetProperty("VERSION", userVersion);</P>
<P>                IWorkspaceFactory iWorkspace = new SdeWorkspaceFactory();</P>
<P>                IFeatureWorkspace iFeatureWs = null;<BR>                int index = 0;<BR>                for (index = 0; index < 10; index++)<BR>                {<BR>                    try<BR>                    {<BR>                        iFeatureWs = (IFeatureWorkspace)iWorkspace.Open(iProSet, 0);<BR>                        if (iWorkspace != null) break;<BR>                    }<BR>                    catch (Exception)<BR>                    {<BR>                        return false;<BR>                    }<BR>                }<BR>                if (iFeatureWs == null)<BR>                {<BR>                    MessageBox.Show("加载图层出错,请重新运行本程序");<BR>                    return false;<BR>                }<BR>                pWs = iFeatureWs;</P>

<P>                if (iFeatureWs != null)<BR>                {<BR>                    //IWorkspace iWps = iFeatureWs as IWorkspace;<BR>                    IFeatureDataset iDataset1 = iFeatureWs.OpenFeatureDataset("基础图层");<BR>                    if (iDataset1 == null) return false;<BR>                    IEnumDataset iEnDataset = iDataset1.Subsets;<BR>                    IDataset iDataset = iEnDataset.Next();</P>
<P>                    while (iDataset != null)<BR>                    {<BR>                        IFeatureClass iFeatureCls = iFeatureWs.OpenFeatureClass(iDataset.Name);<BR>                        //IDataset iDataset = iFeatureCls as IDataset;<BR>                        IFeatureLayer iFeatureLyr = new FeatureLayer();<BR>                        iFeatureLyr.FeatureClass = iFeatureCls;<BR>                        iFeatureLyr.Name = iDataset.Name;</P>
<P>                        map.AddLayer(iFeatureLyr, 0);<BR>                        if (iFeatureLyr.Name != "SDE.建筑_region") eyeMap.AddLayer(iFeatureLyr, 0);<BR>                        iDataset = iEnDataset.Next();<BR>                        </P>
<P>                    }<BR>                    iDataset1 = iFeatureWs.OpenFeatureDataset("电力专业图层");<BR>                    if (iDataset1 == null) return false;<BR>                    iEnDataset = iDataset1.Subsets;<BR>                    iDataset = iEnDataset.Next();</P>
<P>                    while (iDataset != null)<BR>                    {<BR>                        IFeatureClass iFeatureCls = iFeatureWs.OpenFeatureClass(iDataset.Name);<BR>                        //IDataset iDataset = iFeatureCls as IDataset;<BR>                        IFeatureLayer iFeatureLyr = new FeatureLayer();<BR>                        iFeatureLyr.FeatureClass = iFeatureCls;<BR>                        iFeatureLyr.Name = iDataset.Name;</P>
<P>                        map.AddLayer(iFeatureLyr, 0);<BR>                        //m_hawkMap.AddLayer(iFeatureLyr, 0);<BR>                        iDataset = iEnDataset.Next();<BR>                        </P>
<P>                    }<BR>                }<BR>                else<BR>                {<BR>                    return false;<BR>                    //MessageBox.Show("没有数据层!");<BR>                }<BR>                layersContainer.SetBuddyControl(map);</P>
<P><BR>            }<BR>            catch (Exception e2)<BR>            {<BR>                //记录操作并写入文件<BR>                AppendLogFile("读出数据层失败! " + e2.Message, false);<BR>                return false;<BR>                //MessageBox.Show(ex.Message);<BR>            }</P>
<P>           layersContainer.SetBuddyControl(map);                       <BR>        }</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部