工作流模式与K2实现- (1)
背景
工作流产品众多,而它们之间又缺乏统一的标准,使得不同的产品之间很难实现协同工作。为了解决这一问题,工作流管理联盟(WFMC)于1993 年成立,并提出了工作流参考模型,制定了五个标准接口。
其中有一个接口是过程定义接口。几乎每个工作流产品都有自己的过程定义语言(也称为工作流语言),可以从四个方面(控制流、数据流、资源、操作)来研究流程,工作流模式(Work Flow Pattern)只是涉及到其中的控制流部分。控制流(control flow)描述了活动在不同结构中的执行顺序。控制流对我们有效认识、理解工作流规范具有很大帮助。工作流规范需要不断地扩展,以便满足新的需求,因此有必要对控制流进行基础的认识和分析。
- 模式总述
工作流模式系统化地表述了基本的和复杂的结构。模式(pattern)是从具体形式中抽象出来的。面向对象的设计模式,规定了不依赖于具体的实现技术,同时也不依赖于所在领域的基本需求。
Carl Adam Petri基于Petri网原理提出的21个工作流模式,用于工作流过程建模和分析。这些模式,仅限于静态控制流,而不考虑资源分配、实例控制、异常处理和事务管理。
支持工作流模式 |
过程种类 |
基础控制过程 (Basic Control Patterns) |
顺序(Sequence) 并行分支(Parallel Split) 同步(Synchronization) 排他选择(Exclusive Choice) 简单合并(Simple Merge) |
高级分支和同步过程 (Advanced Branching and Synchronization Patterns) |
多路选择(Multiple Choice) 多路合并(Multiple Merge) 同步合并(Synchronizing Merge) 鉴别器(Discriminator) M中N鉴别(N out of M) |
结构化过程 (Structural Patterns) |
任意循环(Arbitrary Cycles) 隐式终止(Implicit Termination) |
多实例过程 (Patterns Involving Multiple Instances) |
非同步多实例(MI-without Sync) 在设计期间预先确定的多实例(MI with a Priori Design Time Knowledge) 在运行期预先确定的多实例(MI with a Priori Runtime Knowledge) 无法在运行期预先确定的多实例(MI without a Priori Runtime Knowledge) |
过程状态 (State-based patterns) |
延期选择(Deferred Choice) 交叉并行路由(Interleaved Parallel Routing) 里程碑(Milestone) |
过程取消 (Cancellation Patterns) |
取消任务(Cancel Activity) 取消流程(Cancel Case) |
- K2 Blackpearl
K2 Blackpearl 是SourceCode公司基于.NET WF构建的流程开发平台的核心产品。代码可支持生成WF代码,流程设计环境使用WPF构建,并完全嵌入到VS 2005中,与微软产品紧密结合。
K2 blackpearl 包括业务流程管理与工作流性能。可以通过建立应用来管理业务流程并使其自动化,或者集业务流程、人员、服务、信息和系统于单一的应用,从而帮助推动业务发展。
- 基础控制过程
这五个模式的共同点在于:模式所涉及流程的执行路径是在设计时即可确定的,不需运行时的信息。包括:Sequence(顺序模式)、Parallel split(并行分支模式) 、Synchronization(同步模式)、Exclusive choice(排他选择) 、Simple merge(简单合并模式)。
1 顺序(Sequence)
- 描述:
工作流中的各个活动在同一个进程中按顺序依次执行。
- 案例:
“用户付款”后才能进行“发送货物”。
- l K2实现:
2 平行拆分(Parallel Split)
- 描述:
工作流中从一个线程中的一个点拆分为在多个线程中平行执行的多个活动。这些平行的活动之间没有关联,执行没有顺序关系。
- 案例:
“用户付款”后激活了“发送货物”以及“通知用户”的执行。
- K2实现:
3 同步(Synchronization)
- 描述: 在流程中的某个点,多个并行的子流程或者活动,合并成一个流程。流程必须等待所有的分支都执行完以后,才能激活后续活动,这就是“同步”之意。
模式3一般与模式2配合使用。
- 案例:
“发送货物”以及“通知用户”两个并行活动执行完毕后,激活“存档”活动。
- K2实现:
每个分支维护自己的完成标记,所有Line Rules都设置成:所有分支均完成。
4 排他选择(Exclusive Choice)
- 描述:当一个活动完成以后,可以有多个分支进行选择,但是只能选择其中的一个分支,即多选一。
- 案例:“下完订单”后,可以选择“银行卡付款”或者“邮局汇款”,只要选择一种方式即可。
- K2实现 : 两个Line Rules的逻辑是互斥的。
5 简单合并(Single Merge)
- 描述:
有两个或多个可选择的分支,在某一点处合并成一个分支,但并不是同步合并(与模式2的区别)。与模式4也有点相似,都是“多选一”,但模式4是分散,而模式5 是合并。一般采用“先进先出”原则,但是后续活动只产生一次(如果后续活动执行多次产生多实例,就是模式8)。
模式5一般与模式4配合使用。
- 案例:
无论在何种方式的“付款”之后,进行“发送货物”。
- K2实现:
每个分支维护自己的完成标记,所有Line Rules都设置成:有且仅有本分支完成。
- 高级分支与同步模式
6 多路选则(Multi-choice)
- 描述:
当一个活动完成以后,有多个分支进行选择,可以选择其中的一个或者多个分支,即“多选多”(模式4 选择是“多选一”模式)。选择的多个分支可能存在并行执行的情况。
模式6可以认为是模式4的扩展。
- 案例
“发起会签”之后,可以多种选则会签方式,但至少要选择一种。
- K2实现
3个Line Rules的逻辑是独立的。
7 同步合并(Synchronize Merge)
- 描述:
在流程中的某个聚合点,多个分支路径合并成一个路径。在聚合点,流程会等待所有的分支到来,才能激活后续的活动。这个模式可以选择分支路径,如果只选择一个分支,实现的功能类似于模式5 简单聚合模式;如果选择两个及以上的分支,实现的功能类似于模式 3 同步模式。
模式7可以认为是模式5的扩展。
模式7一般与模式6配合使用。
- 案例:
要等待所有需要会签的活动都结束才进入“会签结束”,忽略不需要会签的活动。
- K2实现
每个激活的分支都维护自己的完成标记,Line Rules都设置为:所有激活的分支均完成。
8 多路合并(Multi-merge)
- 描述:
在流程中多个分支(可能是模式6 多重选择的一个或多个分支;也可能是模式2 并行中的多个分支),在合并时每个分支执行完都会激活后面的活动。与模式5 简单合并的区别在于:简单合并的分支只有一个可执行并且后续活动只激活一次;而多路合并是多个分支可执行,后续活动激活多次。
有的工作流引擎不支持。
- 案例:
报销过程中假如分为住宿费、交通费、飞机票特殊报销,每种类型都需要进行审批。如果飞机票的审批比较严格,拖得较久,可能就需要其他的费用先审批通过进入下一环节。
- K2实现:
无需添加任何的Line Rules。
9 鉴别器(Discriminator)
- 描述:
在流程中的某个聚合点,等待所有的分支(可能是并行分支,也可能是多重选l 择分支)中的第一个分支执行到达后,就立刻激活后续活动。
- 案例:
M个“会签”活动中只要一个会签完成就立即进入“会签结束”。
- K2实现:
“会签”节点的Destination Rules 为Create M Slots,Line Rules的逻辑为at least 1 of slots。
10 M中N鉴别模式(N out of M)
- 描述:
在流程中的某个聚合点,等待所有的M 个分支(可能是并行分支,也可能是多多选分支)中的前N 个分支执行到达后,就立刻激活后续活动。与模式9的区别在于模式10有N路同步的概念。
- 案例:
M个“会签”活动中只要N个会签完成就立即进入“会签结束”。
- K2实现:
“会签”节点的Destination Rules 为Create M Slots,Line Rules的逻辑为at least N of slots。
工作流模式与K2实现- (1)的更多相关文章
- 工作流模式与K2实现--(2)
结构化过程 这两个模式的共同点在于:模式所涉及流程的执行路径是由运行时决定的,而非设计时确定.包括:Arbitrary cycles(强制循环模式) .Implicit termination( ...
- 工作流模式 (zhuan)
http://www.cnblogs.com/soundcode/archive/2010/12/30/1922283.html *********************************** ...
- Slickflow.NET 开源工作流引擎高级开发(三) -- 并行分支容器与会签工作流模式的组合
前言: 流程引擎的核心功能是负责解析流程定义XML和流转,业务环节的不断积累,让人们不断总结和抽象出一些模式,这些模式统称为工作流模式(Workflow Pattern).本文的重点就是介绍一种常见 ...
- Slickflow.NET 开源工作流引擎基础介绍(七) -- 并行分支多实例模式实现
前言:并行审批是比较常见的流程模式,在工作流模式介绍中,通常是多个分支通过网关(Gateway)来控制实现.默认的分支类型是静态定义好的.本文扩展了并行网关的控制方式,实现了动态多实例的并行分支网关, ...
- K2工作流引擎Demo
---恢复内容开始--- 以前的工作都是电商网站形式的,从未接触过工作流相关工作,新公司是传统制造业行业,我进的这个组又是做工作流这块相关工作的,所以避免不了和工作流打交道. 这边工作流主要用K2来做 ...
- “人少也能办大事”---K2 BPM老客户交流会
主题:固铂轮胎工作流项目分享-K2 SmartForm下的工作流快速开发 嘉宾:王彦(固铂轮胎IT资深经理) 国内业务规模越来越大,流程越来越复杂,跨部门跨组织的流程纸质审批非常复杂,内控的要求越来越 ...
- Java开源 开源工作流
OpenEbXML 点击次数7801 Werkflow 点击次数11181 OSWorkflow 点击次数14988 wfmOpen 点击次数7997 OFBiz 点击次数1234 ...
- Yeoman:适合现代Web应用的现代工作流
Yeoman:适合现代Web应用的现代工作流 Yeoman是Google的团队和外部贡献者团队合作开发的,他的目标是通过Grunt(一个用于开发任务自动化的命令行工具)和Bower(一个HTML. ...
- git 工作流介绍
GIT Git工作流你可以理解为工作中团队成员遵守的一种代码管理方案,在Git中有以下几种工作流方案作为方案指导: 集中式工作流 功能开发工作流 Gitflow工作流 Forking工作流 下面针对性 ...
随机推荐
- 用Path来绘制一些图形
Path是android中用来封装几何学路径的一个类,因为Path在图形绘制上占的比重还是相当大的.你可以用它来绘制各种样式的几何图形,做图表什么的都可以. 一.画线段 1.1 lineT(float ...
- storyBoard配置错误导致崩溃 superview]: unrecognized selector...
控制台打印崩溃原因 [TaskStartVC superview]: unrecognized selector sent to instance RT TaskStartVC是一个同storyBoa ...
- 【转】牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
基础篇:操作系统.计算机网络.设计模式 一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会 ...
- Swift语言与Objective-C语言混合编程
首先创建一个Swift的Single View工程 然后直接在工程中新建OC文件: 然后选择OC语言之后会问你是否自动创建OC和Swift的中间文件: 然后工程文件夹里就有了三个文件: 现在OC头文件 ...
- ASP.NET @Page指令属性(vs2010)
最近看一篇好文章,摘抄下来. 原文出处:http://www.cnblogs.com/zhaozhan/archive/2010/05/01/1725819.html @Page指令位于每个ASP.N ...
- IP地址、子网掩码、网络号、主机号、网络地址、主机地址
原文链接地址:http://blog.csdn.net/leichelle/article/details/8217022 IP地址:4段十进制,共32位二进制,如:192.168.1.1 二进制就是 ...
- Java小方法
/** * 计算百分比. * @param dividend 被除数 * @param divisor 除数 * @return 结果 */ private String getPercent(lon ...
- 读书笔记——Windows环境下32位汇编语言程序设计(5)模态对话框
资源可以用VC之类的生成,然后拷贝出来. 例如:每一个MFC工程都有一个resource.h,没有做任何修改时,这个resource.h文件是原来自带的.当对资源进行过修改添加之类的时,新添加的资源的 ...
- PHP中IP地址与整型数字互相转换详解
这篇文章主要介绍了PHP中IP地址与整型数字互相转换详解,本文介绍了使用PHP函数ip2long与long2ip的使用,以及它们的BUG介绍,最后给出自己写的两个算法,需要的朋友可以参考下 IP转换成 ...
- Python pass语句作用与用法
Python中的pass语句作用是什么?表示它不做任何事情,一般用做占位语句.pass语句具体作用及使用方法,我们往下看. pass语句在函数中的作用 当你在编写一个程序时,执行语句部分思路还没有完成 ...