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 ,如需转载请自行联系原作者
相关文章
|
3月前
|
C++
C++高级开发之可调用对象、function、bind(2)
std::bind 绑定器   要使用这个函数模板,在 cpp文件前面要包含如下头文件#include<funcitonal>   std::bind能够将对象以及相关的参数绑定到一起,绑定完成后可以直接调用,也可以用
30 0
|
15天前
|
JavaScript 前端开发 编译器
方法事件处理器
方法事件处理器
|
3月前
|
C++
C++高级开发之可调用对象、function、bind(1)
可调用对象   以前函数调用总是离不开一堆圆括号,没错“()”就是函数调用的一个明显标记,这个 “()”有一个称呼叫函数调用运算符。
41 0
|
IDE 开发工具 Android开发
使用rxjava创建一个rxbus事件处理框架
RxJava已经出现很多个年头了,但是依然被很多公司使用,如果现在还对RxJava了解的不够透彻, 可以看这个系列对它的分析:相信看完后你对它会有个更全面的认识。 这个系列主要从下面几个方面来讲解: **RxJava基本操作符使用** **RxJava响应式编程是如何实现的** **RxJava的背压机制及Flowable是如何实现背压的** **RxJava的线程切换原理
|
前端开发 JavaScript
element组件的属性、事件和方法怎么使用
我们在使用element组件的时候,经常会使用到组件的属性、事件和方法,但对于第一次接触element组件的小白来说,由于没有代码示例,所以不知道怎么使用组件的属性、事件和方法是很常见的情况,所以本文将教会大家怎么去使用element组件的属性、事件和方法
306 0
element组件的属性、事件和方法怎么使用
|
JavaScript 前端开发
Javascript中常用事件集合和事件使用方法
Javascript中常用事件集合和事件使用方法
Javascript中常用事件集合和事件使用方法
|
移动开发 JavaScript UED
用 customRef 做一个防抖函数,支持 element 等UI库
这几天学习Vue的官网,看到 customRef 提供了一个例子,研究半天发现这是一个防抖函数,觉得挺好,于是把这个例子扩展了一下,可以用于表单子控件和查询子控件。
159 0
|
JavaScript 前端开发
如何找到一个前端事件对应的事件处理函数
如何找到一个前端事件对应的事件处理函数
312 0
如何找到一个前端事件对应的事件处理函数
|
Java Spring 微服务
JFinal-event v2.3.0 发布,简化 Event 事件类
说明 JFinal-event 2.x 参考 Spring 4.2.x 中 Event 的使用方式而生,为 JFinal 用户带来更多方便。其核心目标是深层次解耦,为您节约更多时间,去陪恋人、家人和朋友 :) 年初 @idoz 提议实现类似 Spring 4.2 里的 PayloadApplicationEvent,其实我早就有此想法,一直没有抽出时间来折腾。
1959 0