工作流模式简介
整理:乔彬
E-mail:qiaobin911@163.com
http://www.workflow.sh.cn
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
I
目录
1 引言...............................................................................................................................................1
2 工作流模式...................................................................................................................................1
2.1 基本控制流模式(Basic Control Flow Patterns)................................................................2
Pattern 1 顺序(Sequence) ................................................................................................2
Pattern 2 并行(Parallel Split)...........................................................................................2
Pattern 3 同步(Synchronization)......................................................................................3
Pattern 4 独占式选择(Exclusive Choice)........................................................................4
Pattern 5 简单聚合(Simple Merge) .................................................................................4
2.2 高级分支同步模式(Advanced Branching and Synchronization Patterns)........................5
Pattern 6 多重选择(Multiple Choice)..............................................................................5
Pattern 7 同步聚合(Synchronizing Merge) .....................................................................6
Pattern 8 多重聚合(Multiple Merge)...............................................................................7
Pattern 9 鉴别器(Discriminator)......................................................................................9
2.3 结构化模式(Structural Patterns)......................................................................................10
Pattern 10 任意循环(Arbitrary Cycles) .........................................................................10
Pattern 11 隐式终止(Implicit Termination)...................................................................11
2.4 包含多实例的模式(Patterns involving Multiple Instances)............................................11
Pattern 12 无同步的多实例(MI without Synchronization)...........................................12
Pattern 13 设计时确定的多实例(MI with a Priori Design Time Knowledge) .............13
Pattern 14 执行时确定的多实例(MI with a Priori Runtime Knowledge) ....................14
Pattern 15 执行时不确定的多实例(MI without a Priori Runtime Knowledge) ...........15
2.5 状态模式(State-based Patterns).......................................................................................15
Pattern 16 延迟选择(Deferred Choice) .........................................................................15
Pattern 17 交叉存取并行路由(Interleaved Parallel Routing).......................................15
Pattern 18 转折点(Milestone)........................................................................................16
2.6 取消模式(Cancellation Patterns).....................................................................................17
Pattern 19 取消活动(Cancel Activity)...........................................................................17
Pattern 20 取消实例(Cancel Case)................................................................................17
3 参考文献.....................................................................................................................................18
4 研究机构.....................................................................................................................................18
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
1
1 引言
我们知道,由于工作流产品(工作流管理系统)众多,而它们之间又缺乏统一的标准,
使得不同的产品之间很难实现协同工作。为了解决这一问题,工作流管理联盟(WFMC)
于 1993 年成立,并提出了工作流参考模型,制定了 5 个标准接口。其中有一个接口是过程
定义接口。几乎每个工作流管理系统都有自己的过程定义语言(也称为工作流语言)。
可以从四个方面(控制流、数据流、资源、操作)来研究流程,“工作流模式”只是提
及到其中的控制流部分。控制流(control flow)描述了活动在不同结构中的执行顺序。Control
flow 对我们有效认识、理解工作流规范具有很大帮助。工作流规范需要不断地扩展,以便
满足新的需求,因此有必要对 Control flow 进行基础的认识和分析。目前大多数工作流语言
都支持的基本结构是:顺序(sequence)、迭代(iteration)、分支(split)、合并(join)。但
是对以上几种基本结构的解释并不一致,而且这些基本结构对更多复杂的结构的支持也不清
楚。
存在的多种工作流语言也都基于不同的语义,比如,有的工作流语言支持多实例,有的
不支持;有的工作流语言只支持结构化循环,有的可以支持任意循环;有的工作流语言只支
持显示终止,而不支持隐式终止。
工作流模式系统化地表述了基本的和复杂的结构(流程)。
模式(pattern)是从具体形式中抽象出来的。面向对象的设计模式,规定了不依赖于具
体的实现技术,同时也不依赖于所在领域的基本需求。(原文:A pattern “ is the abstraction
from a concrete form which keeps recurring in specific nonarbitrary contexts”. Gamma et al.
first catalogued systematically some 23 design patterns which describe the smallest
recurring interactions in object-oriented systems. The design patterns, as such, provided
independence from the implementation technology and at the same time independence from
the essential requirements of the domain that they were attempting to address.)
工作流模式提出了业务需求,但它又不拘泥于具体的工作流语言。但这并不是说,工作
流模式是表述业务需求的唯一方法(原文:Patterns address business requirements in an
imperative workflow style expression, but are removed from specific workflow lanaguages.
Thus they don’t claim to be the only way of addressing the business requirements)。目前而
言,还没有任何一个工作流管理系统能支持全部的工作流模式。有一点很重要,下面提到的
模式,仅限于静态控制流,暂不考虑资源分配、实例控制、异常处理和事务管理。
2 工作流模式
工作流模式并没有采用具体的形式化语言来进行描述,也有一点遗憾(
胡长城:
大家还
是在各自的理解上阐述着对 workflow patterns 的理解和表示。也许理解上来说,基本上都
已经达成了一个共识,毕竟这是 Aalst 成果。但是可惜 Aalst 早期没有对如何用一个明确的“语
义”或“符号”去表示这个 workflow patterns。—— 如今,bpmi 开始做这个 notation 的统一了,
但是却依然有这么大的歧义···)。
在本节介绍的模式中的,凡是 XPDL 语言支持的都给出了采用 JaWE2.2 画出的流程图,
并使用工作流引擎 Shark1.1 和 2.0 运行通过的;凡是 XPDL 语言不支持的模式,都会注明。
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
2
首先要介绍 XPDL 语言中的几个概念:(XPDL Version1.0)
流程(Process)是由活动(Activity)和子流程(Subflow Activity)按照一定的顺序结
构结合而成。
转移(transition) 或者称变迁用于连接活动与活动或者活动与子流程之间的有向弧。
转移又分为无条件转移和条件转移。条件转移就是指在执行该转移要满足一定的条件,如设
置了某个表达式 ok==true,只要该表达式为真就执行这个转移,否则就不执行这个转移。无
条件转移就是指一定会执行该转移,不需要满足任何条件。见图 4-1,在图中,带箭头的比
较细的弧是无条件转移,而相对比较粗的带箭头的弧是条件转移。
活动又可以分为四种(当然,子流程也可以认为是活动的一种):
普通活动(activity without implementation):不执行应用或者动作的活动。
工具活动(tool activity):执行应用或者动作的活动。
路径活动(route actibity):只用于判断选择路径。
块活动(block activity):由多个活动(以上三种活动)组成活动。
2.1 基本控制流模式(Basic Control Flow Patterns)
Pattern 1 顺序(Sequence)
Ø 描 述 在流程中,活动按照预先设定的顺序一个接一个地执行。
Ø 同义词 串行
Ø 例 子 在网上书店买书,选择“先行付款”方式,只有“付款”活动完成后,才会激
活“送货”活动。
Ø 实 现 将两个活动用无条件转移连接即可。
Ø 流程图 活动 B 必须在活动 A 执行完成以后才能执行。A、B、C 都是普通活动,转移
都是无条件转移。
图 1
Pattern 2 并行(Parallel Split)
Ø 描 述 流程在某个活动之后产生多个分支,这些分支同时运行或者按任意顺序运行。
Ø 同义词 AND-split
Ø 例 子 “付款”完成后,激活两个活动分支:“送货”和“告知客户”(通知客户货款
已经收到,正在送货)。
Ø 实 现 ①显式 AND-split,可以定义一个路径活动,当路径活动执行完以后,产生多
个并行分支。②隐式 AND-split,不支持路径活动的定义,在普通活动完成后,直接产
生多个并行分支。
Ø 流程图 AND-split 是一个路径活动活动。A 执行完后会激活 B、C 两个活动,图 2-1
为显式 AND-split,图 2-2 为隐式 AND-split。可以注意到:图 2-1 中的活动 AND-split
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
3
和图 2-2 中的活动 A,它们的右边(即 Split—分散类型)都有一点向外突出,并且后面
的分支都是无条件转移,表示这个活动后面的分支是并行。
图 2-1
图 2-2
Pattern 3 同步(Synchronization)
Ø 描 述 在流程中的某个点,多个并行的子流程或者活动,合并成一个流程。流程必须
等待所有的分支都执行完以后,才能激活后续活动,这就是“同步”之意。
Ø 同义词 AND- join
Ø 例 子 在“送货”和“告知客户”这两个并行活动完成后,激活“存档”活动。
Ø 实 现 ①显式 AND-join,可以在同步的并行分支后面定义一个路径活动,执行路径
活动,同步多个并行分支。②隐式 AND- join,不支持路径活动的定义,在后续普通活
动中同步多个并行分支。
Ø 流程图 A 执行完后会激活 B、C 两个并行活动,B、C 同步后,激活 D。图 3-1 为显
式 AND- join,图 3-2 为隐式 AND- join。可以注意到:图 3-1 中的活动 AND- join 和图
3-2 中的活动 D,它们的左边(即 Join—合并类型)都有一点向内凹陷,并且前面的分
支都是无条件转移,表示这个活动同步前面的并行分支。
图 3-1
图 3-2
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.