目的:
1.ArcGIS.Server.9.2.DotNet的ADF的Toolbar工作过程原理。
开始:
Toolbar工作过程:
一.初始化过程(在页面生成的时候Toolbar控件会生成和它相关的html代码和javascript代码):
     1.根据每一个子Tool生成一个<TD>...</TD>,并且这个TD元素添加onMouseDown、onMouseOver、onMouseOut三个鼠标事件,这样使得TD可以点击执行不同的功能。
     2.在javascript中初始化Toolbar1_Items数组,用ToolbarItemObject初始化每一个子Tool添加到Toolbar1_Items数组中。
     3.初始化Toolbars数组,用ToolbarObject初始化Toolbar1添加到Toolbars数组中。
     4.初始化ToolbarGroups数组,ToolbarGroupObject初始化添加到ToolbarGroups数组。
     5.对Toolbar1对象赋一些初始化属性。
二.执行过程(从点击到提交服务端的整个过程):
     1.当Toolbar的Tool被点击时会执行onMouseDown事件的ToolbarMouseDown方法,这个方法定义在ADF的display_toolbar.js中,对于onMouseOver、onMouseOut这2个事件没有实质性的功能是显示效果的切换而已。
     2.ToolbarMouseDown方法执行会根据点击的Tool类型进行不同的处理,对于Command和DropDownBox类型的Tool就调用postBack方法直接向服务端进行提交而且对于Tool类型的Tool则根据ClientAction类型调用不同的方法设置地图的操作状态。
     3.Tool类型的Tool的ClientAction类型内置了很多如Point、Line、Polyline等根据这个类型会分别调用MapPoint、MapLine、MapPolyline等方法设置地图的操作状态,这些MapPoint方法等是定义在ADF的display_map.js文件中,这些方法执行会调用map对象的setTool的方法设置地图操作状态。
     4.设置完地图操作状态就接下来,是进行地图操作了该画点的就画点该画线的就画线了。这些操作是对地图进行操作了那么这些操作代码肯定是在map对象上了,上面的setTool的方法会为map对象的divObject设置onmousedown事件。
     5.接着往下执行onmousedown事件调用方法MapMouseDown,这个方法会根据操作类型是结束操作提交结果还是继续设置onmouseup和onmousemove,这个是根据操作类型决定,比如一次性操作的画点到这里就结束操作调用postBack方法向服务端提交结果,而连续操作的画线到这里还需要往下操作就设置onmouseup和onmousemove。
     6.最后就执行onmouseup事件的方法MapMouseUp向服务端提交操作结果完成所有动作。
     7.上面无论哪种类型的操作殊途同归最终都是需要调用postBack方法向服务端提交结果完成操作,这个postBack方法定义在ADF的display_dotnetadf.js文件中。
     8.继续看postBack方法,这个方法执行会调用clientPostBack方法,这个方法是通过eval(callBackFunctionString)方法实现向服务端的提交,跟踪调试可以看到eval(callBackFunctionString)其实就是执行WebForm_DoCallback('Map1',argument,processCallbackResult,context,postBackError,false)这样的方法,到这里一切都明朗了,ADF的类库最终也是通过这种方式像服务端提交数据了,这个和我们自己用Page.ClientScript.GetCallbackEventReference方法产生脚本字符串放在客户端执行一样。
     9.现在把ADF产生的WebForm_DoCallback和我们自己用Page.ClientScript.GetCallbackEventReference方法的做一个比较:
        ADF: WebForm_DoCallback('Map1',argument,processCallbackResult,context,postBackError,false)
        自己:WebForm_DoCallback('__Page',argument,processCallbackResult,context,processCallbackError,true)
    10.看上面这2个方法最大的区别就是请求的目标对象不同一个是“Map1”控件一个是“__Page”页面了,由此可见“Map1”控件肯定实现了ICallbackEventHandler的接口
 ,它能处理ADF脚本方法提交的请求。
    11.更进一步,我们在使用Toolbar控件时可以为Tool设置处理的类功能,就是给Tool设置ServerActionAssembly和ServerActionClass属性,这样就说明Map控件还具有一个功能就是能根据发起请求的Tool不同载入我们定义的ServerActionClass类来处理Tool的请求,这样就达到了让用户自己定义Tool的服务端的处理功能。
 总结:通过对Toolbar工程流程的分析的目的就是能用自己的方式来灵活实现Toolbar的功能而不需要使用死板的Toolbar控件,这个是在前一篇(ArcGIS.Server.9.2.DotNet实现类似GoogleMap的操作工具条(ADF的Toolbar太丑))的延续寻找更加优雅的解决方法。
         根据上面的流程分析要抛开Toolbar控件有2个工作:第一个就是更改脚本端WebForm_DoCallback提交时的目标对象把原先的"Map1"控件改成我们自己的实现了ICallbackEventHandler接口页面或者自己的控件。第二个就是让我们的页面或控件能实现类似Map1控件的载入ServerActionClass类这样的功能。这个只是初步才想法了,具体的实现下一篇在写。

原文出处:http://www.cnblogs.com/hll2008/archive/2008/10/04/1303713.html

转载于:https://www.cnblogs.com/aooyu/archive/2009/11/06/1597185.html

【转】ArcGIS.Server.9.2.DotNet的ADF的Toolbar工作过程分析相关推荐

  1. ArcGIS.Server.9.2.DotNet在ElementGraphicsLayer画点、线、折线、面、圆、矩形的代码

    ArcGIS.Server.9.2.DotNet在ElementGraphicsLayer画点.线.折线.面.圆.矩形的代码:   1public class AddTool:IMapServerTo ...

  2. 总结基于ArcGIS Server 9.2 Dot Net ADF的WebGIS项目部署问题

    过去的几个月内对基于ArcGIS Server9.2的开发有所接触,这也是第一次真正自己动手作WebGIS的开发,期间遇到诸多问题.最突出的就是二次开发WebGIS的部署问题,以及字符集冲突的问题.问 ...

  3. ArcGIS.Server.9.2.DotNet自带例子分析(一、二)

    目的: 1.arcgis server9.2 ADF的无刷新机制. 准备: 1.(一.一)的工程,具体见前篇. 开始: 1. 先把上篇里漏下的ScaleBar(比例尺)和Magnifier(放大镜)功 ...

  4. ArcGIS.Server.9.2.DotNet自带例子分析(三、一)

    目的: 1.arcgis server9.2 ADF的AddGraphics. 准备工作: 1.用ArcGis Server Manager或者ArcCatalog发布一个叫world的Map Ser ...

  5. arcgis server for .NET学习转载5

    http://www.cnblogs.com/hll2008/archive/2008/08/18/1269810.html 目的: 1.arcgis server9.2 ADF的Callback机制 ...

  6. 创建一个简单的ArcGIS Server ASP.NET网页

    过程描述 在运行这个例子前,在网络服务器上必须安装好.NET ADF,ArcGIS Server已经安装并正常运行,达到所有的系统要求. 1.创建一个ASP.NET应用目录.可以按照下面步骤创建: A ...

  7. ArcGIS Server 问题

    摘自ESRI公司网站. ------------------------------------------- 内容摘要 本指导描述了如何配置Windows XP SP2防火墙,使得ArcGIS Se ...

  8. ArcGIS Server .Net Web ADF体系结构

    ArcGIS Server .Net Web ADF体系结构 ArcGIS Server .net来创建应用有三个层次, 1 使用manager来创建一个web应用 2 使用 .net模板来创建应用 ...

  9. 【转】关于arcgis server ADF的几种超时

    我发现下面的提示英文的很不爽: session has timed out from extended inactivity a new session must be started to use ...

最新文章

  1. 开发者AI职业指南:CSDN《AI技术人才成长路线图V1.0》重磅发布
  2. 017——VUE中v-fo指令的使用方法
  3. SpringMVC注解@RequestParam全面解析
  4. hdu 1055(贪心)
  5. 1033. 旧键盘打字(20)
  6. 【HDOJ】4358 Boring counting
  7. 面试题:彻底搞懂 Cookie 和 Session
  8. 【阿里巴巴-CVPR2020】频域学习,Learning in the Frequency Domain
  9. PAT 1069. 微博转发抽奖(20)-乙级
  10. 关于FTP的两种连接模式
  11. Java将多张图片合并保存到同一页PDF中
  12. 打造知识服务市场 知乎的变现之路
  13. C语言表白流星(末尾附加下载地址)
  14. NLP基础--single-pass 聚类算法
  15. 闲聊机器人实例四:python实现小姜机器人(检索式chatbot_sentence_vec_by_bert_bert句向量)
  16. MS VC6 链接错误处理
  17. freeipa证书相关的一些命令
  18. JDBC的驱动包下载汇总
  19. Java实现文件查重去重
  20. 梅森旋转(Mersenne twister)及其他随机数生成算法

热门文章

  1. 分布式数据库基础:分布式数据库故障
  2. 这篇文章太懂程序员了,扎心了
  3. Shell脚本中函数位置参数的用法笔记
  4. 几个故事告诉你,火热的区块链究竟是什么?
  5. 个人信息管理系统代码_学生信息管理系统(springboot + vue)
  6. 计算机视觉笔记本推荐_视觉灵感:Mishti笔记本
  7. Deco 智能代码体验版正式上线啦,快来体验设计稿一键生成代码~
  8. 你需要的git命令大全来了
  9. Android 使用jtds远程访问数据库
  10. vi和vim 的常用操作