您的位置:首页 > 其它

第五章 工作流定义工具的设计与实现(一)

2012-09-18 14:58 204 查看
5.1 工作流定义工具的功能

政务管理系统包括图形定义和表单定义两种流程定义工具。对于顺序执行的审批业务,流程定义和任务节点定义都可以使用表单定义工具来完成;但对于较复杂的业务流程,为了实现流程逻辑的清晰无误的表达,需要使用图形定义结合表单定义的方式,利用系统提供的图形定义工具先理顺流程各环节之间的关系,并将图形工具所产生的流程及其任务节点的基本信息部署到数据库,再使用表单工具,完成任务节点的详细定义。

图5.1描述了工作流定义工具的功能:





图5.1 工作流定义工具的功能

5.2 工作流图形定义工具的设计思路

WfMC工作流管理联盟的XPDL和开源工作流管理系统JBoss jBPM的jPDL[1]工作流定义语言都使用了Transition(迁移)的概念来描述工作流过程流向与过程节点之间的关系,并通过迁移元素的From和To属性记录迁移的前驱节点和后继节点,而节点类型则包含状态节点、任务节点等多种类型。

本系统工作流图形定义工具的设计借鉴了jPDL语言的技术思想,在绘制工作流程时,也用到了节点和迁移两种图形元素。不过,鉴于论文研究的背景是统一管理机关审批业务,因此在工作流引擎设计中未考虑对子流程的处理。

节点的类型包括任务节点、标示过程起止逻辑的开始、结束节点和标示过程路由逻辑的与分支(And Split)节点、与连接(And Join)节点、或分支(OR Split)节点、或连接(OR Join)节点,不同节点的定义与约束在论文第二章“电子政务系统的工作流分析”中已有详细分析。为了在工作流图形定义工具中区分不同的图形元素,逻辑节点和任务节点等将使用填充不同颜色的矩形绘制,不同类型的节点,其矩形的大小也有所不同,而且还会附以不同的名称加以区分;连接不同节点的迁移在图形定义工具中使用带箭头的连接线表示,起到直观表达业务过程流向的作用。

起止节点和任务节点以及迁移的图形属性将作为过程定义的一部分分别被保存到数据库的过程定义表、节点定义表以及迁移定义表中;而表达过程路由逻辑的节点不会被保存到数据库,它所表达的过程逻辑将作为一个属性字段记录到与之关联的任务节点定义中。

5.3 工作流图形定义工具的核心类设计

工作流图形定义工具的程序实现使用C#的System.Drawing.dll图形组件开发,是一个WinForm桌面应用程序。

程序的主要组成部分包括工作流图形绘制界面、记录图形节点属性数据的图形元素类NodeClass和节点图形元素集合类NodeRecords;记录迁移属性的迁移图形元素类TransitionClass和记录迁移图形元素集合的类TransitionRecords。另外还有一个编辑节点图形属性的对话框和一个编辑流程基本信息的对话框,以及负责数据库连接处理的基础类DataAccess。

工作流图形定义工具的类结构如图5.2所示:




图5.2 工作流图形定义工具类图
5.4 工作流的图形绘制

和大多数的工作流图形定义工具一样,基于简化如鼠标选中图形节点(鼠标进入节点图形绘制区域)等的操作以及方便图形绘制,节点图形元素采用矩形绘制。不同的节点类型以图形按钮的方式出现在图形绘制界面的工具条中,工具条中不同按钮的事件处理方法,其主要功能是修改程序中记录节点类型的程序变量。点击按钮选择不同的节点类型,就可以在绘图区内添加不同类型的节点,程序将根据节点类型使用不同的填充颜色及不同的长度和宽度,在绘图区内的鼠标点击位置绘制添加的节点图形。在绘制图形的同时,程序会新建一个节点对象,并设置对象的图形颜色、长度、宽度、基点坐标和节点类型(如
“AndSplit”)等属性。新创建的节点对象将被添加到节点对象数组中。

添加节点之间迁移的程序实现要稍微复杂一些,被鼠标选中的第一个节点将是迁移的起始节点,被鼠标选中的第二个节点就是迁移的结束节点,如果没有正确选择起始和结束节点,程序将不会绘制迁移图形。在正确绘制迁移图形的同时,程序会创建新的迁移对象,并将对象的FromNode和ToNode属性设置为被迁移线段所连接的两个节点名称。新创建的迁移对象将被保存到迁移对象数组中。

在绘制迁移、保存迁移对象的同时,程序还要判断迁移所连接的节点类型,并设置任务节点的过程逻辑属性字段ProcessLogic。具体过程是:

(1)判断迁移的ToNode所指向的节点类型,如果是“And Split”节点,则将其FromNode所指向的任务节点的ProcessLogic属性设置为“And Split”;如果ToNode所指向的节点类型是“OR Split”节点,则将其FromNode所指向的任务节点的ProcessLogic属性设置为“OR Split”。

(2)判断迁移的FromNode所指向的节点类型,如果是“And Join”节点,则将其ToNode所指向的任务节点的ProcessLogic属性设置为“And Join”;如果FromNode所指向的节点类型是“OR Join”节点,则将其ToNode所指向的任务节点的ProcessLogic属性设置为“OR Join”。

除此之外,图形程序通过对点击鼠标左键、点击鼠标右键以及鼠标移动等事件的处理,实现对移动节点、删除节点、编辑节点属性等操作的处理。

5.5 检查过程模型的正确性

本文所研究的工作流图形定义工具,是以政府机关的审批业务为背景,配合政务系统的工作流引擎来使用,并不是一个通用的工作流定义工具。因此,在使用图形工具绘制和保存过程定义模型时,除了要遵循工作流模型的一般性过程逻辑,还要满足第三章中对过程元模型的约束限制。

工作流图形定义工具分别在模型创建和模型保存两个阶段实施对过程模型的正确性检查。

在创建和绘制过程图形元素之前,程序将首先对欲创建的图形元素与已创建的图形元素集合进行约束性检查,不符合约束条件的新的图形元素将不会被创建。程序在这个阶段的检查包括以下内容:

(1)过程起止节点的唯一性检查:在绘制开始或结束节点时要判断节点集合中是否已经存在开始或结束节点,如果已经存在,则不执行操作;

(2)迁移的单向性检查:即两个节点之间只能存在一条迁移;

(3)对迁移指向的约束性检查:该项检查包含多项内容,如迁移不能指向开始节点、迁移的首端节点不能是结束节点;从开始节点、并行分支节点、连接节点引出的迁移只能指向任务节点;分支节点的前驱只能是任务节点;结束节点、并行连接节点的前驱只能是任务节点;除分支节点之外,其它节点只能有一个后继;除连接节点之外,其它节点只能有一个前驱等。

过程模型的有些错误可能无法在模型创建阶段被发现,因此,作为模型正确性验证的重要环节,在保存节点和迁移定义的程序中,也需要进行一些约束性检查。通过对要保存的模型元素集合进行遍历,如果发现了不符合过程逻辑和模型约束条件的情形,则不能执行保存过程定义的操作,并向用户提示错误。这个阶段的检查包括以下内容:

(1)过程必须存在开始和结束节点;

(2)或分支至少要有一个路径包含任务节点;或分支最多只能包含一个旁路(即直接连接或分支和或连接节点的迁移)。

(3)过程的完整性检查:即除了开始节点,所有节点都必须存在前驱;除了结束节点,所有节点都必须存在后继。



图5.3 并行逻辑的对称性及嵌套约束检查

(4)对过程逻辑的嵌套约束和对称性检查:检查流程中的每一个分支节点,并按照迁移指向遍历其后续节点,所找到的第一个过程逻辑节点只能是连接节点,以满足模型中不允许出现过程逻辑嵌套的约束条件。而且,过程逻辑节点还要满足对称性要求,即在遍历“And Split”分支节点的后续节点时,必须存在过程逻辑节点,而且所找到的第一个过程逻辑节点必须是“And Join” 节点;与此类似,“OR Split” 节点后续的第一个过程逻辑节点只能是 “OR Join”节点。

在执行保存节点定义的操作之前,程序将调用工作流图形绘制界面类的方法CheckProcessModel对过程模型的正确性进行检查,其中检查并行逻辑的对称性及过程嵌套约束的程序流程如图5.3所示。

以上步骤只能作为模型检查的必要的辅助性手段,最终创建的过程模型是否正确有效,还要依赖于建模人员对业务的熟悉程度。

5.6 过程模型的保存

当点击菜单选择保存流程时,程序将首先调用NodeRecords对象的SaveProcess方法,该方法将遍历保存在节点数组中的节点对象,将开始、结束节点对象和任务节点对象的相关属性(包括任务节点对象的ProcessLogic属性)保存到数据库的节点定义表中;然后调用TransitionRecords对象的SaveTransitions方法,把与节点定义相关的所有迁移保存到数据库中。

SaveTransitions的方法实现相对较复杂,其程序逻辑如图5.4所示。

此时,工作流的定义并没有真正结束,用户还需要再使用任务节点的表单定义工具,完成节点的进一步定义,如设置任务节点的关联角色,设置任务可以编辑的业务表字段等。




图5.4 SaveTransitions方法的程序逻辑

参考文献:
[1] jBPM jPDL User Guide. http://docs.jboss.com/jbpm/v3.2/userguide href="http://docs.jboss.com/jbpm/v3.2/userguide/" target=_blank>/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: