OA7流程设计器优化设计_第1页
OA7流程设计器优化设计_第2页
OA7流程设计器优化设计_第3页
OA7流程设计器优化设计_第4页
OA7流程设计器优化设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、oa7流程设计器优化设计oa7流程设计器优化设计1第1章 引言2第2章 xiorkflow前端js实现原理概述22.1.组件机制22.2.component-model机制42.3.xiorkflow界面的组件构成5第3章 流程设计器优化设计83.1.节点复制功能83.2.连线显示效果123.3.编辑域全选功能163.4.批量框选拖动删除功能173.5.节点六中对齐方式功能213.6.任务列表窗口24第4章 附录:文件修改清单274.1.xiorkflowworkspace.js274.2.nsflowdesigner.js274.3.alignactionlistener.js274.4.m

2、etacopykeylistener.js284.5.multiselectmouselistener.js284.6.tasklistactionlistener.js284.7.metanodemouselistener.js284.8.transitiontextmovemouselistener.js294.9.nodemodel.js294.10.readnodemodel.js294.11.transition.js294.12.xiorkflowmodel.js304.13.xiorkflowtoolbar.js304.14.xiorkflowwrapper.js304.15.h

3、l.jpg304.16.hc.jpg304.17.hr.jpg314.18.vt.jpg314.19.vm.jpg314.20.vb.jpg31第1章 引言本文档编写的主要目的是为oa7流程设计器相关开发人员介绍清楚本次开发对代码所做的修改。oa7流程设计器选型采用开源的xiorkflow项目。本项目在前端采用js+vml的方式支持将流程模型绘制成矢量图;在后台通过spring的mvc可以将流程模型数据以ajax的方式与前端js通讯;而流程模型数据(元数据)是以xml的方式表达的,并且与前端js进行ajax通讯时采用的是整存整取的策略(一个流程一个流程的整存整取)。本次oa7-designer

4、优化不涉及对后台和元数据的扩展和修改,而仅仅是对前端js的扩展和修改。javascript是一门不同于java的基于原型prototype(注意这可不是指那个开源的prototype.js的ajax开源框架)的解释型语言。掌握这门语言需要熟悉它的如下特点:1、 语句的执行过程是边解释边执行的。所以它的任何对象的属性都是可以随时添加赋值的。2、 它没有继承的概念,但有原型链的概念。访问一个对象的成员时会顺着原型链一直向上找直到找到或到根也没找着。3、 函数闭包的概念。函数闭包是一种变量的作用域,它是指的函数定义时的上下文(而不是执行时的)。4、 对象的this指针。5、 dhtml文档对象模型及

5、其事件模型。第2章 xiorkflow前端js实现原理概述2.1. 组件机制xiorkflow的组件机制在设计模式上是油漆工模式(或叫装饰模式),这有点像java中的文件流的设计。这主要是为了简化对象的使用接口,给出一个符合“本系统”特点的方便使用的对象接口。并且这一设计对domelement的事件在接口上进行了集中分类和重定义:1、 actionlistener:按钮组件的事件处理器。2、 contextmenulistener:组件的右键菜单事件处理器。3、 keylistener:组件的按键事件处理器。4、 mouselistener:组件的鼠标按键事件处理器。5、 mousewheel

6、listener:组件的鼠标滑轮按键事件的处理器。类图如下:注:在实际的xiorkflow中icomponent接口是与component是同一个类,图中这样画是为了突出对domelement进行装饰模式设计的目的。事件适配机制:以onclick事件为例。事件的适配机制在listenerproxy中实现。在listenerproxy的构造函数中有如下代码:function listenerproxy()/ _onclick = function (e) if (!listenerproxy.isenable() return; e = (e) ? e : (event) ? event : n

7、ull); for (var i = 0; i listenerproxy.mouselisteners.size(); i+) listenerproxy.mouselisteners.get(i).onclick(e); return pagation;this.container.onclick = _onclick;2.2. component-model机制在xiorkflow中的一些组件采用了model机制,这个机制实现了ui组件的显示模型和数据模型的分离。component是ui组件的显示模型,而model是ui组件的数据模型。并且这一机制的设计采用了观察者模式,

8、component可以通过这一模式观察model中的数据变动并相应地进行显示调整。下面以节点或连线的选中状态设定方法为例(此方法在metamodel.setselected)列出时序如下:其中方法_updateboundrectangle()就是设置节点或连线的选择热点的私有方法。在xiorkflow中除了节点和连线以外,按钮和画布(xiorkflowviewer)也实现了model机制。2.3. xiorkflow界面的组件构成整个xiorkflow的界面是一个界面组件,这个组件类就是xiorkflow类。在xiorkflow类的构造函数中可以看到它由如下七大组件构成:1、 statemon

9、itor2、 xiorkflowtoolbar(extends component)3、 xiorkflowviewer(extends component)4、 xiorkflowtableviewer(extends component)5、 statuslabel(extends component)6、 xiorkflowwrapper7、 xiorkflowmodelxiorkflow界面的组件构成也可以说是mvc模式的:1、m数据模型层。其中xiorkflowmodel在xiorkflowwrapper的构造函数中创建,并被xiorkflowtableviewer共享。此对象是流程

10、的纯数据模型,通过xiorkflowmodelconverter对象可把它直接xml序列化和反序列化。2、c操作控制层。xiorkflowwrapper主要封装了添加移除节点或连线的方法,添加清除获取选中节点和连线的方法等。3、v界面显示层。xiorkflow类本身集成自component,和组成它的其他子component(xiorkflowtoolbar、xiorkflowviewer、xiorkflowtableviewer、statuslabel)共同构成了v层。xiorkflow界面操作的事件可以分为三类:1、 无状态按钮事件这是指【保存】【属性】【删除】【对齐】【任务列表】【关闭】

11、这几个按钮,他们的特点是一点击按钮事件处理过程就直接响应他了。如对【保存】按钮进行响应的是saveactionlistener。2、 有状态按钮事件这类按钮事件的特点是当按钮被按下时只会引起相应状态的变迁,而在不同的状态下,其它事件的响应是不同的。一般为了直观的区分状态的不同这类按钮会用togglebutton的形式显示。在工具栏中共有两组有状态按钮:流程元素组(nodebuttongroup包含节点和连线);显示模式组(viewerpatternbuttongroup包括三种显示模式)比如当点击【传阅节点】按钮后,系统变为传阅节点添加状态(状态有statemonitor管理),然后再在画布上

12、点击鼠标左键就会添加传阅节点在画布上。这一过程时序如图:3、 普通组件事件普通组件事件是指其它component上的事件,这些事件可能会受statemonitor状态的影响,如上面说的wrappermetamouselistener。这些事件处理器除了在响应的接口方法中提供上下文变量外,还可以在构造函数中提供上下文变量。第3章 流程设计器优化设计3.1. 节点复制功能3.1.1. 需求描述单个节点的复制,复制时保持复制节点和源节点的属性一摸一样,只是坐标向左下移动一点。3.1.2. 功能设计复制功能流程黏贴功能流程3.1.3. 代码设计1、 为画布对象viewer:xiorkflowviewe

13、r添加按键事件处理器metacopykeylistener。2、 metacopykeylistener在构造时需要提供wrapper:xiorkflowwrapper作为上下文变量。3、 在处理器的onkeydown方法中实现的是复制功能逻辑,选中节点可从wrapper上下文对象中取得。4、 在处理器的onkeyup方法中实现的是黏贴功能逻辑。5、 为支持复制功能的节点类添加clone克隆方法。3.1.4. 文件修改1、 引入代码文件/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/event/metacopykeylistener.js到系

14、统中。这一修改在文件/oa/flowdesigner/xiorkflow/js/xiorkflowworkspace.js中,修改代码如下图166行2、 在文件/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/xiorkflowwrapper.js中,在xiorkflowwrapper的_initviewer方法中为画布对象viewer:xiorkflowviewer添加metacopykeylistener事件处理器。修改代码如下图90行 3、 添加了新文件/oa/flowdesigner/xiorkflow/src/name/xio/xio

15、rkflow/event/metacopykeylistener.js4、 在文件/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/meta/nodemodel.js中,添加了任务节点的创建方法和克隆方法,如下图5、 在文件/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/meta/readnodemodel.js中,添加传阅节点的创建方法(readnodemodel继承自nodemodel),如下图3.2. 连线显示效果3.2.1. 需求描述1、连接线上显示连接顺序(流程设计时可见,流程查看时

16、不显示)。2、返回类型的链接线用不同颜色显示(流程设计时显示不同颜色,流程查看时一样颜色)。3.2.2. 功能设计3.2.3. 代码设计1、 修改连线组件transition的更新显示文本方法_updatetext。在编辑模式的情况下,把要显示的文本的前面加上连线模型transitionmodel中的连线顺序getindex()前缀。2、 修改连线组件transition的更新方法_updatepoints。在编辑模式的情况下,把返回类型的连线显示成红色,而普通连线显示成黑色。3.2.4. 文件修改1、 在文件/oa/flowdesigner/xiorkflow/src/name/xio/xi

17、orkflow/meta/transition.js中,在方法ttotype._updatetext中更新如下代码在方法ttotype._updatepoints中添加如下代码2、 在文件/oa/flowdesigner/xiorkflow/ns_flowdesigner/nsflowdesigner.js中,在连线属性面板的确定按钮的事件处理函数中,添加如下代码3.3. 编辑域全选功能3.3.1. 需求描述编辑域有全选复选框。3.3.2. 功能设计3.3.3. 代码设计1、 showtasknodeinfo方法是显示任务节点或传阅节点属性的

18、窗口(ext.window)的方法。其中编辑域组件是一个checkboxgroup组件。在它的items属性的配置对象中(是一个数组对象)多加一个全选复选框的配置项。2、 在新加的全选复选框的事件处理函数中实现编辑域全选复选逻辑(如上图)。3.3.4. 文件修改1、 在文件/oa/flowdesigner/xiorkflow/ns_flowdesigner/nsflowdesigner.js中,在函数showtasknodeinfo中,修改代码如下3.4. 批量框选拖动删除功能3.4.1. 需求描述批量拖动删除(拖动时线的名称要跟着平移)。3.4.2. 功能设计批量拖动删除功能本是本次优化之前

19、已有的功能,所以只要实现框选功能就可以了。3.4.3. 代码设计1、 为画布对象添加一个框选鼠标事件处理器multiselectmouselistener,在此处理器中完成上述逻辑。2、 修改原来的单节点选择逻辑:在节点上松开按键时只有在非框选状态下才能选中本节点,否则将可能造成此节点并没有完全在选框内就被选中了。3、 修订原有的在连线文本上释放鼠标按键报脚本错误的bug4、 修订原有的删除节点时节点上的连线不能全部删除的bug3.4.4. 文件修改1、 引入代码文件/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/event/multisel

20、ectmouselistener.js到系统中。这一修改在文件/oa/flowdesigner/xiorkflow/js/xiorkflowworkspace.js中,修改代码如下图165行2、 添加新文件/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/event/multiselectmouselistener.js3、 在文件/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/xiorkflowwrapper.js中,在xiorkflowwrapper的_initviewer方法中为画布对象

21、viewer:xiorkflowviewer添加multiselectmouselistener事件处理器。修改代码如下图88行 4、 在文件/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/meta/event/metanodemouselistener.js中,修改了单节点选择逻辑,如下图5、 在文件/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/meta/event/transitiontextmovemouselistener.js中,修订连线文本鼠标bug,如下图6、 在文件/oa/

22、flowdesigner/xiorkflow/src/name/xio/xiorkflow/xiorkflowmodel.js中的方法xiorkflowmtotype.removemetanodemodel中,修改删除节点时连线不能全删的bug,如下图3.5. 节点六中对齐方式功能3.5.1. 需求描述节点六种对齐方式。3.5.2. 功能设计3.5.3. 代码设计1、 在工具栏中添加一个对齐工具栏toggle按钮,并为其添加action事件处理器alignactionlistener。但因为toggle按钮集成于普通button类时,重载了doclick方法造成不能直接响应ac

23、tion事件处理器(因为它采用的是上面说的有状态事件机制),因此需要重写此方法以响应action事件。2、 在alignactionlistener中实现上述逻辑代码。3.5.4. 文件修改1、 引入代码文件/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/event/ alignactionlistener.js到系统中。这一修改在文件/oa/flowdesigner/xiorkflow/js/xiorkflowworkspace.js中,修改代码如下图167行2、 为系统添加js代码文件/oa/flowdesigner/xiorkflow/

24、src/name/xio/xiorkflow/event/ alignactionlistener.js3、 为系统添加六个对齐方式小图标文件/oa/flowdesigner/xiorkflow/images/xiorkflow/align/hl.jpg/oa/flowdesigner/xiorkflow/images/xiorkflow/align/hc.jpg/oa/flowdesigner/xiorkflow/images/xiorkflow/align/hr.jpg/oa/flowdesigner/xiorkflow/images/xiorkflow/align/vt.jpg/oa/f

25、lowdesigner/xiorkflow/images/xiorkflow/align/vm.jpg/oa/flowdesigner/xiorkflow/images/xiorkflow/align/vb.jpg4、 在文件/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/xiorkflowtoolbar.js中,添加对齐工具栏按钮及其事件处理函数,如下图159-169行3.6. 任务列表窗口3.6.1. 需求描述1.在工具栏中添加【任务列表】按钮(流程设计时可见,流程查看时不显示)。1.1.弹出任务列表窗口,包括任务节点属性中的八个基本属性

26、列(顺序和任务节点属性窗口中的一样)。每条记录前面有复选框。1.2.任务列表是过滤后的只有任务型节点的列表。1.3.并且是按审批意见顺序排序的。1.4.任务列表窗口的工具栏上有【上移】【下移】按钮可以调整单个任务在列表中的顺序。3.6.2. 功能设计3.6.3. 代码设计1、 在工具栏中添加一个任务列表工具栏普通按钮,并为其添加action事件处理器tasklistactionlistener。2、 在tasklistactionlistener中实现上述逻辑代码。3.6.4. 文件修改1、 引入代码文件/oa/flowdesigner/xiorkflow/src/name/xio/xiork

27、flow/event/tasklistactionlistener.js到系统中。这一修改在文件/oa/flowdesigner/xiorkflow/js/xiorkflowworkspace.js中,修改代码如下图168行2、 为系统添加js代码文件/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/event/tasklistactionlistener.js3、 在文件/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/xiorkflowtoolbar.js中,添加任务列表工具栏按钮及其事件处

28、理函数,如下图172-175行第4章 附录:文件修改清单4.1. xiorkflowworkspace.js 文件路径:/oa/flowdesigner/xiorkflow/js/xiorkflowworkspace.js 文件作用:引入js脚本文件 涉及的优化需求:3.1;3.4;3.5;3.6;4.2. nsflowdesigner.js 文件路径:/oa/flowdesigner/xiorkflow/ns_flowdesigner/nsflowdesigner.js 文件作用:扩展出来的用ext编写的弹出窗体等。 涉及的优化需求:3.2;3.3;4.3. alignactionliste

29、ner.js 文件路径:/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/event/alignactionlistener.js 文件作用:对齐工具栏按钮的事件处理器。 涉及的优化需求:3.5;4.4. metacopykeylistener.js 文件路径:/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/event/ metacopykeylistener.js 文件作用:节点复制功能的画布按键事件处理器。 涉及的优化需求:3.1;4.5. multiselectmouselistener

30、.js 文件路径:/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/event/ multiselectmouselistener.js 文件作用:框选功能的画布鼠标事件处理器。 涉及的优化需求:3.4;4.6. tasklistactionlistener.js 文件路径:/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/event/ tasklistactionlistener.js 文件作用:任务列表按钮的事件处理器。 涉及的优化需求:3.6;4.7. metanodemouseliste

31、ner.js 文件路径:/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/meta/event/metanodemouselistener.js 文件作用:节点的鼠标事件处理器。 涉及的优化需求:3.4;4.8. transitiontextmovemouselistener.js 文件路径:/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/meta/event/ transitiontextmovemouselistener.js 文件作用:连线文本的鼠标事件处理器。 涉及的优化需求:3.4;4.9. nodemodel.js 文件路径:/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/meta/nodemodel.js 文件作用:任务节点模型对象 涉及的优化需求:3.1;4.10. readnodemodel.js 文件路径:/oa/flowdesigner/xiorkflow/src/name/xio/xiorkflow/meta/ readnodemodel.js 文件作用:传阅节点模型对象 涉及的优化需求:3.1;4.11. transition.js 文件路径:/oa/flowdesigne

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论