Map 3D 2010 开发中的OnCheckIn事件处理

简介:


我们将谈一下Map 3D 2010开发中常见的事件处理,并通过一个简单的小例子来掩饰Map 3D 常见事件处理的应用方法。

比如有这样一个应用场景,一个要素类中有一些计算字段,即这些字段的值是根据其他字段的值按照一定规则计算出来的,如由单位地价和面积,计算出地块总价。一些数据库引擎本身已经内置的自动计算的功能,但也有些时候需要我们来编码实现。当然如果用户对记录进行更改后就需要重新计算以保证数据的一致性。当然,我们可以在用户刚刚更改结束后就立即重新计算,但是为了不用无用功,我们没必要为客户在每次犹豫不定的更改都重新计算,只需要在他提交最终修改结果时重新计算就可以了。嗯,好主意,Map 3D要是有类似 OnCheckIn之类的事件就好了。

不过可惜的是,查了半天也没有这样一个事件,真是让人沮丧啊。不过不用着急,虽然没有一个这么明显的,但是我们有一系列的事件处理函数来组合一下即可。我们看一下AcMapFeatureService的相关事件,我们可以在帮助文档中查到:

clip_image002

顺便说一下,这些帮助文档可以在 Map ObjectARX SDK中找到。这个开发包中不仅包含了Map 3D开发的所有文档,而且还包含了好多实例代码工程(C++,C#

或者VB.NET),几乎大多数的开发场景都能从例子中找到。

我们所需要的OnCheckIn事件虽然没有,但是我们有三个 FeatureDeleted ,FeatureInserted 和FeatureUpdated。这同样能实现我们的checkin事件。

下面我们看一下代码片段:

        [CommandMethod("AddFSEvents")]
        public void AddFeatureServicesEvents()
        {
            AcMapFeatureService fs = AcMapServiceFactory.GetService(MgServiceType.FeatureService) as AcMapFeatureService;
            fs.FeatureUpdated += new FeatureUpdatedHandler(fs_FeatureUpdated);

            AcMapMap currentMap = AcMapMap.GetCurrentMap();
            currentMap.FeatureInstanceModified += new FeatureInstanceModifiedHandler(currentMap_FeatureInstanceModified);

        }

        // 这个事件,客户的每次更改都会触发,即使还没有提交,这不是我们想要的
        //fired at one when the feature is updated
        void currentMap_FeatureInstanceModified(object sender, FeatureInstanceModifiedEventArgs args)
        {
            ed.WriteMessage("FeatureInstanceModified fired!\n");
        }

        //fired when the feature is updated and checked in
        //if more than one feature are updated, it will be fired more times
        //这才是我想要的,只有在更新被CheckIn的时候才触发。
        //我们可以通过Args.GetFeature()得到正在提交的那个要素,下面的代码演示了如果获取这个要素的相关信息
        //如果有多个要素同时被更新,事件会触发多次,从而你可以处理每一条记录
        void fs_FeatureUpdated(object sender, AcMapFeatureEventArgs args)
        {
            ed.WriteMessage("FeatureUpdated fired! \n");
            ed.WriteMessage("--------------------------------------\n");
            ed.WriteMessage("PropertyName \t Value \n"); 
            MgPropertyCollection props = args.GetFeature().GetProperties();
            int propCount = props.Count;
            for (int i = 0; i < propCount; i++)
            {
                string propName = props[i].Name;
                string valueString;
                switch (props[i].GetPropertyType())
                {
                    case MgPropertyType.Int32:
                        valueString = (props[i] as OSGeo.MapGuide.MgInt32Property).GetValue().ToString();
                        break;

                    case MgPropertyType.String:
                        valueString = (props[i] as OSGeo.MapGuide.MgStringProperty).GetValue().ToString();
                        break;
                    default:
                        valueString = "<***>";
                        break;
                }

                ed.WriteMessage(propName + "\t" + valueString + "\n");

            }
            ed.WriteMessage("------------------------------------\n");
          
           
        }

 

这个例子我实现了FeatureUpdated事件,类似的还有FeatureDeleted 和FeatureInserted 你可以自己来参照试试看。

作者: 峻祁连
邮箱:junqilian@163.com 
出处: http://junqilian.cnblogs.com 
转载请保留此信息。




本文转自峻祁连. Moving to Cloud/Mobile博客园博客,原文链接:http://www.cnblogs.com/junqilian/archive/2010/01/29/1659160.html ,如需转载请自行联系原作者
相关文章
|
6月前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
103 3
|
定位技术
百度地图开发:map.setViewport让标注显示在最佳视野内
百度地图开发:map.setViewport让标注显示在最佳视野内
326 0
|
机器学习/深度学习 定位技术 容器
百度地图高级开发:map.getDistance计算多点之间的距离并输入矩阵
百度地图高级开发:map.getDistance计算多点之间的距离并输入矩阵
278 0
|
1月前
|
存储 分布式计算 Java
Stream很好,Map很酷,但答应我别用toMap():Java开发中的高效集合操作
在Java的世界里,Stream API和Map集合无疑是两大强大的工具,它们极大地简化了数据处理和集合操作的复杂度。然而,在享受这些便利的同时,我们也应当警惕一些潜在的陷阱,尤其是当Stream与Map结合使用时。本文将深入探讨Stream与Map的优雅用法,并特别指出在使用toMap()方法时需要注意的问题,旨在帮助大家在工作中更高效、更安全地使用这些技术。
41 0
|
2月前
|
存储 前端开发 JavaScript
node中循环异步的问题[‘解决方案‘]_源于map循环和for循环对异步事件配合async、await的支持
本文探讨了在Node.js中处理循环异步操作的问题,比较了使用map和for循环结合async/await处理异步事件的差异,并提供了解决方案。
35 0
|
3月前
|
Java Serverless Go
Golang 开发函数计算问题之在 Golang 中避免 "concurrent map writes" 异常如何解决
Golang 开发函数计算问题之在 Golang 中避免 "concurrent map writes" 异常如何解决
|
4月前
|
JavaScript 定位技术
vue-baidu-map 绘制行政区划的轮廓,添加行政区划名称(含给覆盖物添加点击事件)——vue 百度地图开发
vue-baidu-map 绘制行政区划的轮廓,添加行政区划名称(含给覆盖物添加点击事件)——vue 百度地图开发
254 1
|
4月前
|
JavaScript 定位技术
vue 百度地图开发【教程】1. 绘制百度地图(不使用 vue-baidu-map,解决 BMap is undefined)
vue 百度地图开发【教程】1. 绘制百度地图(不使用 vue-baidu-map,解决 BMap is undefined)
404 0
|
6月前
|
JavaScript
webpack-devtool选项 --生成source-map便于开发调试(二)
webpack-devtool选项 --生成source-map便于开发调试(二)
212 0
|
6月前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可为任意类型,有序且支持get、set、has、delete操作;Set存储唯一值,提供add、delete、has方法。两者皆可迭代。示例展示了Map和Set的基本用法,如添加、查询、删除元素。
38 2