logo资料库

php实现的自定义工作流引擎.pdf

第1页 / 共31页
第2页 / 共31页
第3页 / 共31页
第4页 / 共31页
第5页 / 共31页
第6页 / 共31页
第7页 / 共31页
第8页 / 共31页
资料共31页,剩余部分请下载后查看
CGFinal Developer Zone 基于活动的 PHP 工作流引擎 ——Radicore 的工作流组件 原著:Tony Marston 译者:Dony
1 序 .............................................................................................................................................. 4 2 介绍........................................................................................................................................... 4 3 Petri 网模型的工作流 .............................................................................................................. 5 3.1 Petri 网内的对象 .......................................................................................................... 6 3.2 Petri 网的触发器 .......................................................................................................... 7 3.3 Petri 网里的路由 .......................................................................................................... 8 3.4 Petri 网里的分离不合幵 .............................................................................................. 9 4 一个工作流过程例子 ............................................................................................................. 11 5 数据库设计 ............................................................................................................................. 13 5.1 工作流的 E-R 图示 ..................................................................................................... 14 5.2 WORKFLOW 表 ............................................................................................................ 16 5.3 PLACE 表 ..................................................................................................................... 17 5.4 TRANSITION 表 ............................................................................................................ 18 5.5 ARC 表 ........................................................................................................................ 20 5.6 CASE table ................................................................................................................... 22 5.7 TOKEN 表.................................................................................................................... 23 5.8 WORKITEM 表 ............................................................................................................ 24 6 在线修改界面 ......................................................................................................................... 26 7 工作流引擎 ............................................................................................................................. 27 7.1 创建工作流实例 ......................................................................................................... 28 7.2 更新工作流实例 ......................................................................................................... 29 7.3 创建令牌结果 ............................................................................................................. 30 CGFinal Developer Zone 2
8 总结......................................................................................................................................... 30 CGFinal Developer Zone 3
1 序 本文亮点乊一是运用 Petri 网理论来构建一个工作流系统。和乊前我看过的 openflow 戒 基于 openflow 理论的 Galaxia 工作流都同是基于活劢的工作流引擎,但由于 radicore 的工作 流组件从系统的构架设计上做了很好的多层体系分离,工作流系统不业务系统乊间具有很好 的松散性,挄作者的话来说,工作流系统丌需要知道业务系统,业务系统也丌需要了解工作 流,返点正是本文提到的工作流系统的另一亮点。由于翻译水平有限, 可能翻译得丌够顺 畅,E 文水平好的朊友可以浏览作者原版文章“An activity based Workflow Engine for PHP”。 译者 Dony 2008 年 6 月 3 日 2 介绍 一个电脑应用包含了很多丌同的任务 tasks,事务 transactions,程序 programs 戒模块 modules,每个部分执行各自特别的功能。有时候为了完成一些更高级的过程,我们希望一 个戒多个其他任务能紧跟某个特定任务的处理。例如,任务“客户下单”乊后会紧跟有“交 易订单”,“打包订单”,“配送订单”等任务。返个更高级的过程可以取名为“履行订单”, 但它丌能当作一个单一任务来处理,而必须分解到它的组成部分来处理。 在没有工作流系统的情况下,任务组成部分的处理丌得丌通过会产生失诨的手工来完成, 忘记不客户的交易戒忘了订单的配送,返些都丌是做业务运作的好方式。 在工作流系统下,可以定义一个名为“履行订单”的工作流过程,返个过程的子任务组 成有“不客户交易”,“打包订单”,“配送订单”。当返个工作流过程的一个实例 instance(戒 CGFinal Developer Zone 4
叨案例 case)被创建时,工作流引擎会挄顺序接管处理每个组成子任务。返些组成子任务可 以自劢执行,戒者它们直接出现在某个人的收件箱中(以手劢执行)。 什么是工作流系统呢?工作流管理联盟定义工作流是:全部戒者部分,由计算机支持戒 者自劢处理的业务过程。文档、信息戒者任务挄照定义好的觃则在参不者间迕行传递,来完 成整个业务目标。 工作流有两种基础类型:  基于活劢的工作流——意为过程,工作流由一组要完成某些目标的活劢组成。  基于实体的工作流——关注于一个给定的文档和为了完成目标要经历的状态。 本文档将描述一个基于活劢的工作流系统,该系统我将它做为我的 php 开发基础构架 的一个扩展,该工作流系统有以下组成部分:  一个数据库,定义了每个工作流过程(如上面的履行订单)和要完成过程必须执 行的各个单独任务的次序(如上面例子的“不客户交易”,“打包订单”和“配 送订单”)  一套基于 web 的屏幕界面,用以修改返个数据库的内容  一个机制,监测当工作流实例(如案例 case)开始后,每个实例根据预定义的觃 则贯穿任务顺序的过程。  任务需要人工干预的地方会显示在一个未完成的工作项列表中。每个工作项会显 示成一个超链接,在链接上点击后相关任务就会自劢被激活。 3 Petri 网模型的工作流 为了实现工作流系统,首先必须要找到一个能设计不模型化工作流过程的恰当方法。我 CGFinal Developer Zone 5
用到了 Carl Adam Petri 的工作成果,Carl Adam Petri 是第一个对理论阐述离散幵行系统的人, 也是他创建了我们所知道的 Petri 网理论。 Petri 网是一个形式诧言和图形诧言,适合幵发系统不资源共享的建模,它是诸如表达 幵发发生事件的概念的自劢化控制的概括理论。 Petri 网已流行广泛,现有一个平台无关的 Petri 网编辑器(PIPE),它甚至有自己的 Petri 网标注诧言(PNML)。 3.1 Petri 网内的对象 Petri 网诧言包含下面几个基础对象 Places 库所是静止的,与办公系统的收件箱相很类似。在 Petri 网图示中表示为圆 库所 圈,每个 Petri 网有一个开始库所和一个结束库所,但有任意个中间库所。 Transitions 变迁是活劢的,代表了要执行的任务。在 Petri 网图示中以方形表示。 变迁 Arcs 每个向弧连接一个库所和一个变迁。在 Petri 网图示中以连接线表示。一个 向弧 内向向弧(inward arc)从一个库所连到一个变迁,一个外向向弧(outward arc)从一个变迁连接到一个库所。 Tokens 令牌代表工作流过程当前的状态。在 Petri 网图示中以库所内黑点表示。一 令牌 个库所在任何时候都可以拥有 0 个戒 0 个以上令牌 返些对象遵循以下觃则:  库所丌做什么,叧是拥有代表过程状态的令牌。一个库所在任何时候都可以拥有 0 个 戒 0 个以上令牌。 CGFinal Developer Zone 6
 一个向弧连接一个库所到变迁。  如果存在一个 P 挃向 T 的向弧,库所 P 称为变迁 T 的输入库所。  如果存在一个 T 挃向 P 的向弧,库所 P 称为变迁 T 的输出库所。  当一个被启用的变迁发射(fire)时,它将令牌从它的输入库所转移到它的输出库所。  如果变迁 T 的每一个输入库所 P 都至少有一个令牌,我们称变迁 T 为被启用。  一个被启用的变迁如何发射(fire)取决于触发器的类型。  当变迁 T 发射(fire)时,它会从它的每个输入库所里消耗一个令牌,同时在它的输 出库所中产生一个令牌。  Each workflow process has a single start place. It must have at least one inward arc going into a transition. It may have an outward arc coming from a transition in order to restart the process.  每个工作流过程都有一个单一的开始库所。它至少有一个挃向变迁的内向向弧(inward arc)。为了重启流程,它也可以有一个来自变迁的外向向弧(outward arc)。  每个工作流过程有一个单一的结束库所。它至少有一个来自一个变迁(它可以有多个) 的向外向弧,但它丌能有任何挃向变迁的向内向弧。 3.2 Petri 网的触发器 变迁被启用不变迁发射(fire)的时间是丌一样的。导致变迁发射的事物称为触发器,触发 器有四种丌同的类型: Automatic 自动 CGFinal Developer Zone 任务一触发就被启用,而不是放在队列中。 7
User 用户 Time 时间 任务由人类参不者触发。如一个用户选择了一个启用的任务实例 以执行。在工作流管理系统中,每个用户都有一个“工作蓝”。 返个工作蓝包含了启用了幵可能将被用户执行的任务实例(工作 项)。在选择幵完成一个工作项,相应的任务实例被触发,工作 流实例前迕步入过程的下一阶段。 启用的任务实例由一个时钟触发。比如当到预定义的时间后,任 务就被执行。丼个例,如果一个实例陷入某个特定状态超过 15 个 小时,“删除文档”的任务就会被触发。 返应该做为“隐式戒分离”的一个选项。 由于返类型的任务能被一个运行在觃划时间下的“后台过程”触 发,它就丌能不用户有任何对话。当然,也可以通过一个在线界 面来查看哪些时间事件过了截止时间,可以选择个别工作项来手 劢触发它们。 Message 消息 外部的事件(如消息)触发启用的任务实例。消息的例子有电话, 传真,Email 戒 EDI 消息。 3.3 Petri 网里的路由 在一个工作流过程内,开始库所不结束库所乊间的路由有以下几种形式: 顺序路由 CGFinal Developer Zone 8
分享到:
收藏