zoukankan      html  css  js  c++  java
  • F2工作流引擎之 工作流运转模型(三)

    1流程单起点单终止模型

    单起点:一个流程定义必须有且唯一起点

    单结束点:一个流程定义必须有且唯一结束点。

    约定:提单与结束是每个流程必须有的活动,且唯一只有一个提单和结束。

    2串行模型

     

    描述:串行(Sequence)是最为简单,也最为容易理解的模型。按照预定的任务列表,有序的执行。

    3自循环模型

     

    描述:一个步骤可以自己再次发给其它人员但步骤是同一个。同一个任务节点,重复的执行多次。

    又分两种类型:

    1、  自由循环FreeCycle

    在任务执行后由人为的决定是否继续重复的执行这次任务(自由度大)

    2、  联合审批循环JointCycle

    在任务执行后照设定的规则,决定是否重复执行。(通常这种情况是联合顺序审批,即第一个人审批完后下一步还是发给这个步骤但审批人设定好的人,直至最后一个人审批时再通向下一步)

    4会签模型

     

    描述:并行会签(Parallel),也叫“And 模式”。是说在流程运行过程中,因为不同的条件或情况,或者处理的业务需要多部门(多任务)分开处理,而产生了流程分支。并行开始步骤必须与汇聚步骤成对存在。都执行完(到达And汇聚点)后,才能激活后续的任务,也就说流程才能正确的往下运行。

    注意:并行步骤与并行汇聚步骤需要配套成对存在。不允许AndSplit与OrJoin模式。

    5发散聚合模型

     

    发散模型与并行模型类似,只是必散的下一步骤列表可一个或任意多个,聚会步骤也是可任一个或任何多个根据规则。

    有可能不是“同时聚合”

    聚合表示的是:在聚合点,会等待所有分支的到来,如果不考虑超时(一般流程回

    设定任务执行期限)和异常等情况下,流程必须等待所有的分支(Task B和Task C)都执行完(到达And汇聚点)后,才能激活后续的任务,也就说流程才能正确的往下运行。

    这里面会涉及到如何聚合的问题,是人工聚合,还是自动聚合。一般这里会引入规则引擎(Rule Engine)来负责分支的聚合,按照预定的规则,将流程数据(状态)汇聚。

    聚合规则:聚合步骤不一定前面是发散步骤只要达到聚合条件则转向下一步。

    聚合步骤相对独立,对于所有迁入者进行规则计算,可以指定哪些前继必须都到达才能产生该步骤的待办,其它为前继为可选到达项。先到先计算,符合聚合条件则产生待办,其它未到达的分支将调用任何回收器回收后被抛弃。

    等待所有条件满足后聚合步骤而产生任务待办,聚合步骤也是一个处理步骤,只是处理人必须是任一人响应方式。

     

    三类聚合规则

    同步聚合MergeAnd

    异或聚合: MergeXOR

    多重聚合:MergeOR

     

    l  A、B、C、D必须全部到达(all),all代表所有步骤

    l  A、B、C、D任意一个到达(*),*号代表任一步骤

    l  A、B必须到达,C为可选A&B

    l  A、C必须到达,B为可选A&C

    l  A、B必须到达,C为可选A&B

    l  A、B至少有一个到达C为必到达(即在一个集合中至少有N个到达)(AB,1)&C

    l  A、B、C只要有一个到达(ABC,1)

    l  ABD集合中必须要有A,而整个集合至少有2个到达,运用的规则为第一条,(ABCD,2)&A

    6异或(独占)模型

     

    描述:异或(XOR)又叫Exclusive Choice(独占式选择)当一个任务处理完后,发现其后面可允许走多个分支流程,但只允许选择其中某一个分支运行。虽然在任务Task A 后预订了三个不同的任务,但是仅Task D 满足条件一般为人工操作选择,也存在根据规则自动选择分支,造成后续的流程中,走了A——D 分支,而另外的分支被抛弃。

    7回退模型

    1.7.1 退回

    回退,在有的应用中叫“退回”。

    如下图所示,有任务A到任务B 属于正常发送,但从任务B到任务A,则出现两种情况:

    (1)迁移退回:正常发送,如图中B—A黑色线;

    (2)被退回:可能因为某些特殊原因,被任务B退回,要求任务A重新办理,如图中B—A红色线。虽然都是从B到A,代表的意义却完全不同。

     

    1.7.2 退回到提单

    可设置是否仅退回到提单。

    1.7.3 退回任意历史步骤

    这里要控制好并行的问题,在并行分支中的活动只能退回并行中的步骤,而不能退回到并行前的步骤,因其它分支的流转还在继续当中。包括迁移退回也不能如此设计。

    1.7.4 不可退回模型

     

    外部活动不可退回也不可迁移退回到发散聚合模型的中间或并行会签模型中间的活动。

    并行内部的退回只能在内部发生

    发散内部的退回只能在内部发生

     

    驳回是一个非常复杂的模式之一,以问题已在最新的F2BPM中解决,并行内和并行外都能驳回,详细请看:

    驳回设计专篇 http://www.cnblogs.com/f2flow/p/6833152.html

     

    8自动分组并行模型

     

    描述:可以根据选择一批参与者系统自动根据参与者的部门进行分组产生N个分支,每条分支上的审批步骤是一样的。

    9任务分发模型

    描述:分发回收即没有后续步骤,是一个分发回收自循环步骤,像发作业本一样,班主任发给班长,班长现发给组长,最后由组长再发给组员,然后做完作业,由组员交给组长,组长交回给班长,班长交给班主任最后发散结束。

    10 自动活动模型

    描述:自动模型,又叫鉴别Discriminator Choice。多了一个鉴别器(Discriminator)或者叫自动选择模型。当任务达到这个鉴别器的时候,鉴别器会根据当前流程所处的状态,对比预先设定的一些选择规则,自动判别接下来流程的流向,也就是自动根据条件,选择一个满足条件的分支运行。即自动步骤。

    鉴别规则做在活动上。

    11传阅及自动转阅模型

    11.1 描述

    传阅不影响流程的流转,被传阅的对象只是会收到一条只看的待阅实例,获取打开些流程实例的查看详细表单信息的权限。所有传阅的记录过程将显示在工单的详细里面。记录下传阅过程。

    11.2 手动传阅

    在待办人打开待办界面可以传阅给指定的人员。

    11.3 自动传阅

    可以设置在进入指定步骤时自动转阅给预先设定的人员。

    11.4 相关界面

     

     

    12转交模型

    12.1 描述

    可以转交给其它人协助处理,每个步骤可以定义是否允许转交。

    13等待子流程模型

    描述:在这种方式下,当子流程运行的时候,主流程会暂停,等待子流程的完结。

     

    14主子流程并行聚合模型

     

    描述:激活子流程后,主流程并没有停止,而是基于按照预定的流程方向运行;同时,激活后的子流程也同样处于软转状态。当到达聚合步骤时如果有一方未到达的情况下,另一方会等待。当然,这其中可能涉及到等待超时等不良因素,这时候主流程时选择继续等待,还是发催办消息,还是继续运行,就是工作流引擎的设计问题了。

    15外嵌子流程模型

    描述:在主流程激活子流程后,主流程继续运行,且不关心子流程的运行状态或运行结果。这种方式使用活动完成时触发事件引发子流程的启动。

     

    结语:

         运转模型表面看似从一个步骤转向另一个步骤,实质还需要思考各种步骤的可进入可分发出来的规则如停等机制,参与者,访问控制等等,还有流程实例的持久化,步骤在运转过程中一系列需要处理事项。所以不要简单认为工作流引擎就是做步骤的跳转。虽然petri网是一个很著名的工作流网是有向图的思想,但是如果

    你不对有向图做简化改造和边界设定,也将很容易就暴露出petri网的缺点出来即复杂性问题,容易无限庞大而难以理解。在有向图的概念中是没有中国特色退

    回的概念,所以你还需要加入退回机制的思想。加上petri只是提供一种跳转思想的参考,所以可借用petri的思想做为参考,从而设计出符合中国特色的流程引擎思想!

    一句话总结:流程引擎是一个精细化工程

     

     

     

     

     

  • 相关阅读:
    ASP.NET Web API 框架研究 Self Host模式下的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式下的消息处理管道
    ASP.NET Web API 框架研究 核心的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式路由及将请求转出到消息处理管道
    ASP.NET Web API 框架研究 ASP.NET Web API 路由
    ASP.NET Web API 框架研究 ASP.NET 路由
    ASP.NET Web API 入门 (API接口、寄宿方式、HttpClient调用)
    MVVM模式
    RESTful Web API 理解
    C# 函数式编程及Monads.net库
  • 原文地址:https://www.cnblogs.com/f2flow/p/3659756.html
Copyright © 2011-2022 走看看