工作流模式与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工作流 下面针对性 ...
随机推荐
- Windows2008系统忘记密码的解决方法
网上转载的,忘记密码不用发愁了. windows2008系统忘记密码的解决方法: 利用放大镜的漏洞来重设密码 首先用系统盘来引导 选择修复计算机 然后打开命令提示符:先备份放大镜,然后用CMD替换 ...
- 基本完成了一个SEGY扫描程序
利用Seismic.NET编写了一个SEG-Y文件的扫描程序,可以自动判断道头字中主测线号.横测线号.X坐标和Y坐标的位置,自动快速扫描地震数据体中的拐点坐标.10GB多的数据体几十秒全部扫描完成! ...
- 解决SSIS中的脚本任务无法调试的问题
开发环境:操作系统环境为Win7 64Bit,数据库为SQLServer2008R2 问题现象:在SSIS的项目工程中,新建Package包,新建脚本任务,编写脚本程序以后,设置断点无法调试(Debu ...
- Python基础(11)--面向对象1
面向对象设计与面向对象编程的关系 面向对象设计(OOD)不会特别要求面向对象编程语言.事实上,OOD 可以由纯结构化语言来实现,比如 C,但如果想要构造具备对象性质和特点的数据类型,就需要在程序上作更 ...
- Web应用程序系统的多用户权限控制设计及实现-项目架构【3】
本章主要讲述Web权限管理系统的项目架构,及开发中需要的基本类和相关的CSS,JS文件. 1.1系统结构 本系统搭建开发工具为Visual Studio 2012,采用ASP.NET MVC 4.0技 ...
- .NET下dropdownlist的基本操作
//List列中索引的赋值 teacher.DataValueField = ds.Tables[0].Columns["pidcord"].ColumnName; //List列 ...
- Silverlight项目笔记7:xml/json数据解析、TreeView、引用类型与数据绑定错误、图片加载、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题
1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应 ...
- iOS开发网络篇—NSURLConnection基本使用(二)
1.常用的类 NSURL:请求地址 NSURLRequest:一个NSURLRequest对象就代表一个请求,它包含的信息有: 一个NSURL对象 请求方法.请求头.请 ...
- js检测浏览器型号
公司要求做内部统计,要求监控客服玩游戏使用的浏览器的型号,是火狐的.谷歌的.还是IE的等等. [code lang="javascript"] /**** * 目前识别范围 * M ...
- .net串口通信
背景: 前一段时间需要写一个向蓝牙模块发消息的功能. 对蓝牙的机制不太了解,所以一直在查资料, 但始终没找到我需要的东西,还误以为需要配套的一套开发模板和开发包, 偶然间发现只需要简单的串口通信,并且 ...