一种基于关系数据库的工作流管理系统的设计与实现

2012-04-29 13:46吴洁明王吉栋
计算机时代 2012年4期
关键词:关系数据库

吴洁明 王吉栋

摘要: 论述了一种基于关系数据库的工作流管理系统的设计与实现。该工作流管理系统不仅拥有工作流管理系统应有的前向调度、回退调度、用户任务列表的展示等功能,还有效地利用了关系数据库的成熟技术,节省了工作流管理系统的开发成本。

关键词: 关系数据库; 工作流引擎; 流程定义; 流程实例

中图分类号:TP311.5文献标识码:A 文章编号:1006-8228(2012)04-32-03

Design and implementation of workflow management system based on relational database

Wu Jieming, Wang Jidong

(College of Information Engineering, North China University of Technology, Beijing 100144, China)

Abstract: The authors describe in this paper a workflow management system which is based on relational database. The wokflow management system not only has forward and backward scheduling and task list which is necessary to a complete workflow management system, but also uses the mature technology of relational database which can save its development cost.

Key words: relational database; workflow engine; process definition; process instance

0 引言

目前,市面上有很多开源工作流软件,最常用的有Shark、Osworkflow和Jbpm。其中Shark的流程定义语言采用XPDL,Osworkflow依赖于有限状态机,Jbpm综合运用了状态图、活动图和PetriNet。

各大厂商开发的工作流产品侧重于流程管理的通用性,导致系统非常复杂,再加上软件设计文档的缺乏,对于中小型项目来说,使用门槛比较高,因此很多公司选择开发适合本公司的工作流组件。但开发一个运行稳定、有数据备份和恢复功能、支持并发、支持事务的工作流引擎,成本非常高。现在的关系数据库管理系统在数据备份、恢复、并发、事务处理等方面已经做的非常成熟,如果把工作流和关系数据库结合起来,工作流开发人员就可以直接利用这些数据库的成熟技术,把精力放在工作流引擎的架构和调度策略的研究上,以降低开发成本。

1 工作流管理系统模型

根据“工作流管理联盟”(Workflow Management Coliation, WfMC)的定义,工作流所要解决的主要问题是:使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者是促使此目标的实现[1]。

工作流管理系统是一个软件系统,它完成工作流的定义和管理,并按照在计算机中预先定义好的工作流逻辑推进工作流实例的执行[1]。一个完整的工作流管理系统要包含业务流程定义模块、工作流引擎模块、用户任务列表模块和工作流监管模块。本文所述的基于关系数据库的工作流管理系统,是要充分利用关系数据库的特点,把业务流程的定义,流程的运行时数据,系统的业务数据,系统所需的业务人员的信息,权限管理等都存储在数据库中,完成业务数据的流转。工作流管理系统的架构如图1所示。

[客户端][业务逻辑层][工作流引擎][流程定义模块][数据访问层][业务数据][组织机构][流程实例][工作流定义]

图1工作流管理系统的架构图

1.1 流程定义和活动

业务流程,为完成某一预定目标而定义是的一系列的工作步骤。业务流程中的每一个步骤是一个活动[2]。活动是业务流程的最小工作单元。活动可以包含很多属性,如活动类型,执行者等。工作流管理系统要处理用户的业务流程,应该先把业务流程抽象成计算机可以识别的流程定义,而流程定义是由一系列的活动组成的。

1.2 流程实例和任务

流程实例是业务流程的一次具体执行。工作流引擎执行的是流程实例,流程实例是由一系列任务组成的,任务是业务流程中活动的实例化[1]。工作流引擎调度的是流程实例的任务,当用户调用工作流引擎提供的接口创建一个流程实例后,引擎就根据流程定义依次生成活动对应的任务。并提供给不同的用户对任务进行操作。

本文所述的工作流管理系统就是要借助流程定义、活动、流程实例、任务等,来完成业务表单在用户之间的流转。系统的数据库表之间的关系如图2所示。

图2数据库各表之间的关系

业务流程表和活动表用来存储业务流程定义,流程实例表和任务表存储运行时数据,历史流程实例表和历史任务表存放已经执行完的流程实例,用户表和角色表保存用户的基本信息。每一个业务流程都是由一系列活动组成的,活动之间的前驱和后继关系由前驱活动Ids和后继活动Ids决定。每个活动的类型由分支类型字段和汇聚类型字段决定,分支类型的取值有:“顺序类型”、“与分支类型”和“或分支类型”;汇聚类型的取值有:“顺序类型”、“与汇聚类型”和“或汇聚类型”。

2 流程设计器

流程设计器的作用是提供一种描述工作流程的软件,它把实际的过程步骤用图视化的方法或简单的文本描述出来并产生或转化成规范的工作流定义语言格式[3]。

本文所述的工作流管理系统把业务流程拆分成活动存储在活动表中,供工作流引擎使用。流程设计器提供有一张画板和多种类型的活动。当需要创建一个新的业务流程时,用户需要先指定要创建的业务流程的名称、该流程关联的业务表单的名称和业务表单的主键,然后把组成该业务流程的所有活动拖动到画板上,设定活动之间的先后关系,最后给每个活动指定分支类型和汇聚类型并且指定哪个角色有权限执行此活动。流程设计器会按规则检查用户绘制的流程图的正确性;点击保存按钮后,流程设计器会先把这个业务流程图保存到业务流程表和活动表中。

3 工作流引擎

工作流引擎的作用是对流程定义进行解释,创建可以运行的流程实例、控制流程实例的执行。工作流管理系统对流程实例的操作是通过用户调用工作流引擎提供的接口来进行的。当用户调用启动业务流程的接口时,引擎会创建新的流程实例和流程实例的首任务;当用户调用完成任务接口时,引擎会生成下一步的任务;当用户调用回退接口时,引擎会把流程实例回退到之前的任务实例重新执行。

3.1 流程的前向调度

任务执行时重点是要区分任务节点的分支类型是“顺序类型”、“与分支类型”还是“或分支类型”。任务节点的分支类型和其对应的活动的分支类型相同,活动的分支类型由活动表的分支类型字段决定。

如果当前任务的分支类型是“与分支类型”,当用户结束此任务时,工作流引擎会创建当前任务的所有后继任务实例;如果当前任务的分支类型是“或分支类型”,当用户结束此任务时,工作流引擎要查询其所有的后继活动,显示给用户,供用户选择,用户选择完成后,工作流引擎会根据用户选择的活动,创建一个相应的任务实例;如果当前任务的分支类型是“顺序类型”,当用户结束此任务时,工作流引擎会查询其后继活动,如果其后继活动的汇聚类型为“与汇聚类型”,则还要判断这个活动的前驱任务是否已全部完成,如果已经全部完成,则创建此活动对应的任务,否则不创建活动对应的任务。前向调度程序流程图如图3所示。

图3 前向调度的程序流程图

3.2 流程的回退调度

一个功能完整的工作流管理系统还应该支持流程回退。工作流的回退功能是把流程回退到已经执行过的前驱节点,以满足用户输入错误需要修改的需求。

当用户进行流程回退操作时,工作流引擎会查询出所有可以回退到的任务供用户选择;用户选择完成后,引擎把当前任务置为“completed”状态,把选择的目标任务置为“running”状态。回退目标任务执行完后,引擎要根据目标任务的分支类型做进一步的处理:如果任务的分支类型是“或分支类型”,引擎要判断用户选择的后继任务是否为原来的执行路径,如果不是,则删除此任务的所有后继任务实例,按照用户的选择创建相应的任务实例;如果任务的分支类型不是“或分支类型”,则任务执行完成后,修改其状态为“completed”,修改其直接后继任务的状态为“running”。

4 用户任务列表

工作流引擎提供用户接口让用户查询自己的任务列表。当用户登录系统后,应用程序调用工作流引擎提供的接口,查询出用户可以执行的任务实例并将其显示在用户界面上。本文用基于角色的访问控制机制来设计此功能:首先根据岗位创建相应的角色,然后根据用户的职责授予相应的角色,最后在定义流程的时候,为每个活动选择一个角色。当用户登录以后,系统会根据其角色显示其可以执行的任务列表,如果用户选择了某个任务,工作流引擎就会把该用户的Id保存到这个任务的用户Id字段,并修改这个任务实例的状态为“running”,其他拥有相同角色的用户不能再选择这个任务。用户任务列表可实现以下几个功能:

⑴ 启动流程列表工作流引擎根据用户角色查询活动表,把与角色匹配的起始活动对应的流程名称显示在用户的“启动任务列表”中,用户点击启动流程按钮,工作流引擎就会生成新的流程实例和初始任务。

⑵ 新生成的任务列表中新生成的任务实例的状态为“ready”,用户Id字段为空,工作流引擎根据这两个条件和用户的角色,查询出当前用户可以处理的新生成的任务列表。

⑶ 回退的任务列表中回退的任务实例的状态为“running”,用户Id为当前用户的Id,后继任务Ids不为空,工作流引擎根据任务这三个条件可以查询出回退的任务实例列表。

5 工作流监管

工作流监管的作用是管理用户和角色信息、挂起和恢复流程实例、停止和删除工作流实例、查看工作流的运行状态、查询历史流程实例的流转日志等[3]。

工作流管理系统提供正在执行的工作流实例列表和历史工作流实例列表。当用户需要挂起、恢复、停止、删除工作流实例或者查看工作流实例的运行状态时,可以进入正在执行的工作流实例列表,选择相关的操作按钮。每执行完一个工作流实例,工作流引擎就会把当前完成的流程实例及其所有的任务实例转入到历史流程实例和历史任务表,当用户需要查询历史流程实例时,可以进入历史流程实例列表选择相关的操作按钮。

6 结束语

本文所述的基于关系数据库的工作流管理系统不仅可以满足用户的业务需求,而且利用了大型关系数据库中的成熟技术,例如:工作流引擎控制业务流程的调度时用到了数据库的事务处理;用户选择处理任务时用到了数据库的并发处理技术;备份和恢复工作流实例的历史数据用到了数据库的备份和恢复功能。将工作流与关系数据库结合,降低了工作流管理系统设计的复杂度,从而节省了开发成本。

参考文献:

[1]WfMC. The workflow reference model. 1994.

[2] 范玉顺.工作流管理技术基础 [M].清华大学出版社,2001.

[3] 胡锦敏,张申生. 支持企业动态联盟的敏捷工作流系统[J].计算机研究与发展,1999.36(12):1517~1523

[4] 罗海滨,范玉顺,吴澄.工作流综述[J].软件学报,2000.11(7):899~907

[5] 何清法,李国杰,焦丽梅. 基于关系结构的轻量级工作流引擎[J].计算机研究与发展,2001.38(2):129~137

[6] 陈传波,刘黎志.一个基于Web的工作流引擎及其实现[J].计算机工程与科学,2004,26(11):8-11.

[7] 叶立新,陈闳中,郑航等.基于工作流技术的OA系统模型[J].计算机工程与应用,2000.36(6):90~92

[8] 柴孝宗. 办公自动化领域基于J2EE平台的工作流引擎的设计与实现[D].西安电子科技大学,2005.

[9] 吴少鸿. 基于Web的轻量级工作流管理系统的研究与实现[D].中国科学院研究生院(软件研究所),2005.

[10] 徐建军,谭庆平,杨艳萍.一种基于J2EE的工作流引擎体系结构[J].计算机应用,2005.25(2):469~471

[11] 倪晓颖. 基于XML技术的工作流管理系统设计与实现[D].大连理工大学,2006.

[12] 孙瑞志,史美林.工作流活动多实例的调度控制[J].软件学报,2005.16(3):400~406

[13] 刘黎.基于数据库表示的工作流模型[D].中国科学院计算计算研究所,1999.

[14] 张慧,李建华,许甸,许海军.一种工作流运行时回退方法的研究与实现[J].计算机工程与科学,2008.30(5):88~91

[15] 杜传业,李茹.面向电子政务的轻量级工作流引擎[J].计算机应用,2008.28(6):310~314

猜你喜欢
关系数据库
关系数据库在高炉数据采集系统中的应用
关系数据库技术在计算机网络设计中的应用
XML与关系数据库之间的转换
关系数据库与非关系数据库
实体的动态属性在数据库设计中的解决方案
计算机网络设计中关系数据库技术的应用
掌游西塘APP设计与实现
探讨关系数据库设计中范式理论的教学方法
基于索引结构的关系数据库关键词检索
一种基于数据图划分的关系数据库关键词检索方法