博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工作流模式与K2实现- (1)
阅读量:5223 次
发布时间:2019-06-14

本文共 3653 字,大约阅读时间需要 12 分钟。

背景

    工作流产品众多,而它们之间又缺乏统一的标准,使得不同的产品之间很难实现协同工作。为了解决这一问题,工作流管理联盟(WFMC)于1993 年成立,并提出了工作流参考模型,制定了五个标准接口。

其中有一个接口是过程定义接口。几乎每个工作流产品都有自己的过程定义语言(也称为工作流语言),可以从四个方面(控制流、数据流、资源、操作)来研究流程,工作流模式(Work Flow Pattern)只是涉及到其中的控制流部分。控制流(control flow)描述了活动在不同结构中的执行顺序。控制流对我们有效认识、理解工作流规范具有很大帮助。工作流规范需要不断地扩展,以便满足新的需求,因此有必要对控制流进行基础的认识和分析。

    1. 模式总述

    工作流模式系统化地表述了基本的和复杂的结构。模式(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)

  
 
    1. K2 Blackpearl

       K2 Blackpearl 是SourceCode公司基于.NET WF构建的流程开发平台的核心产品。代码可支持生成WF代码,流程设计环境使用WPF构建,并完全嵌入到VS 2005中,与微软产品紧密结合。

    K2 blackpearl 包括业务流程管理与工作流性能。可以通过建立应用来管理业务流程并使其自动化,或者集业务流程、人员、服务、信息和系统于单一的应用,从而帮助推动业务发展。

 

    1. 基础控制过程 

 

这五个模式的共同点在于:模式所涉及流程的执行路径是在时即可确定的,不需运行时的信息。包括:Sequence(顺序模式)、Parallel split(并行分支模式) 、Synchronization(同步模式)、Exclusive choice(排他选择) 、Simple merge(简单合并模式)。 

  顺序(Sequence) 

  • 描述: 

          工作流中的各个活动在同一个进程中按顺序依次执行。

  • 案例: 

          “用户付款”后才能进行“发送货物”。

  • l  K2实现:

 

平行拆分(Parallel Split 

  • 描述:

          工作流中从一个线程中的一个点拆分为在多个线程中平行执行的多个活动。这些平行的活动之间没有关联,执行没有顺序关系。

  • 案例: 

         “用户付款”后激活了“发送货物”以及“通知用户”的执行。

  • K2实现:

 

 同步(Synchronization 

  •  描述:  在流程中的某个点,多个并行的子流程或者活动,合并成一个流程。流程必须等待所有的分支都执行完以后,才能激活后续活动,这就是“同步”之意。 

         模式3一般与模式2配合使用。

  • 案例: 

          “发送货物”以及“通知用户”两个并行活动执行完毕后,激活“存档”活动。

  • K2实现:  

          每个分支维护自己的完成标记,所有Line Rules都设置成:所有分支均完成。

 

排他选择(Exclusive Choice 

  • 描述:当一个活动完成以后,可以有多个分支进行选择,但是只能选择其中的一个分支,即多选一。
  • 案例:“下完订单”后,可以选择“银行卡付款”或者“邮局汇款”,只要选择一种方式即可。 
  • K2实现 : 两个Line Rules的逻辑是互斥的。

 

 

 简单合并(Single Merge 

  •  描述:

有两个或多个可选择的分支,在某一点处合并成一个分支,但并不是同步合并(与模式2的区别)。与模式4也有点相似,都是“多选一”,但模式4是分散,而模式5 是合并。一般采用“先进先出”原则,但是后续活动只产生一次(如果后续活动执行多次产生多实例,就是模式8)。

模式5一般与模式4配合使用。

  • 案例:

无论在何种方式的“付款”之后,进行“发送货物”。

  • K2实现: 

每个分支维护自己的完成标记,所有Line Rules都设置成:有且仅有本分支完成。

    1. 高级分支与同步模式

 

多路选则(Multi-choice

  • 描述:

当一个活动完成以后,有多个分支进行选择,可以选择其中的一个或者多个分支,即“多选多”(模式4 选择是“多选一”模式)。选择的多个分支可能存在并行执行的情况。

模式6可以认为是模式4的扩展。 

  • 案例

“发起会签”之后,可以多种选则会签方式,但至少要选择一种。

  • K2实现 

3个Line Rules的逻辑是独立的。

 

 同步合并(Synchronize Merge 

  • 描述:

在流程中的某个聚合点,多个分支路径合并成一个路径。在聚合点,流程会等待所有的分支到来,才能激活后续的活动。这个模式可以选择分支路径,如果只选择一个分支,实现的功能类似于模式5 简单聚合模式;如果选择两个及以上的分支,实现的功能类似于模式 3 同步模式。

模式7可以认为是模式5的扩展。

模式7一般与模式6配合使用。

  • 案例:

要等待所有需要会签的活动都结束才进入“会签结束”,忽略不需要会签的活动。

  • K2实现 

每个激活的分支都维护自己的完成标记,Line Rules都设置为:所有激活的分支均完成。

多路合并(Multi-merge

  • 描述:

在流程中多个分支(可能是模式6 多重选择的一个或多个分支;也可能是模式2 并行中的多个分支),在合并时每个分支执行完都会激活后面的活动。与模式5 简单合并的区别在于:简单合并的分支只有一个可执行并且后续活动只激活一次;而多路合并是多个分支可执行,后续活动激活多次。

有的工作流引擎不支持。

  •  案例:

报销过程中假如分为住宿费、交通费、飞机票特殊报销,每种类型都需要进行审批。如果飞机票的审批比较严格,拖得较久,可能就需要其他的费用先审批通过进入下一环节。

  • K2实现: 

无需添加任何的Line Rules。

 鉴别器(Discriminator

  • 描述:

  在流程中的某个聚合点,等待所有的分支(可能是并行分支,也可能是多重选l  择分支)中的第一个分支执行到达后,就立刻激活后续活动。

  • 案例:

     M个“会签”活动中只要一个会签完成就立即进入“会签结束”。

  • K2实现: 

“会签”节点的Destination Rules 为Create M Slots,Line Rules的逻辑为at least 1 of slots。

10 MN鉴别模式N out of M

  • 描述:

在流程中的某个聚合点,等待所有的M 个分支(可能是并行分支,也可能是多多选分支)中的前N 个分支执行到达后,就立刻激活后续活动。与模式9的区别在于模式10有N路同步的概念。

  • 案例:

M个“会签”活动中只要N个会签完成就立即进入“会签结束”。

  • K2实现: 

“会签”节点的Destination Rules 为Create M Slots,Line Rules的逻辑为at least N of slots。

转载于:https://www.cnblogs.com/K2China/p/3543223.html

你可能感兴趣的文章
C语言小项目-火车票订票系统
查看>>
15.210控制台故障分析(解决问题的思路)
查看>>
常用到的多种锁(随时可能修改)
查看>>
用UL标签+CSS实现的柱状图
查看>>
mfc Edit控件属性
查看>>
[Linux]PHP-FPM与NGINX的两种通讯方式
查看>>
Java实现二分查找
查看>>
优秀员工一定要升职吗
查看>>
[LintCode] 462 Total Occurrence of Target
查看>>
springboot---redis缓存的使用
查看>>
架构图-模型
查看>>
sql常见面试题
查看>>
jQuery总结第一天
查看>>
Java -- Swing 组件使用
查看>>
Software--Architecture--DesignPattern IoC, Factory Method, Source Locator
查看>>
poj1936---subsequence(判断子串)
查看>>
黑马程序员_Java基础枚举类型
查看>>
[ python ] 练习作业 - 2
查看>>
一位90后程序员的自述:如何从年薪3w到30w!
查看>>
在.net core上使用Entity FramWork(Db first)
查看>>