码迷,mamicode.com
首页 > 其他好文 > 详细

流程设计-流程模式

时间:2017-11-01 10:21:39      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:随机   种类型   更新   设定   针对   partial   .com   没有   区域   

工作流基本包含如下多种模式用于工作流过程建模和分析:

(1)、基本模式 5种

      ● 顺序模式---- 按照顺序执行各项活动

      ● 并行分支模式----同时运行两个活动

      ● 同步模式----同步两个并行的执行线程

      ● 单选模式----从多条路径中选择一个执行

      ● 简单合并模式----合并两个二选一路径

(2)、高级分支与同步模式 5种

      ● 多选模式----从多条执行路径中选出几条

      ● 同步合并模式----合并多条路径,如果有多条路径被选择,则进行同步;如果只有一条路径被选择,则进行简单合并

      ● 多合并模式----合并多条路径

      ● 鉴别器模式----合并多条路径而不进行同步,只执行一次后续活动

      ● M中的N模式-----合并多条路径,进行部分同步,只执行一次后续活动

(3)、结构模式 2种

      ● 任意循环模式----没有任何限制的执行工作流

      ● 隐含终断模式----如果没有事情可做,就结束

(4)、多实例模式

      ● 设计期多实例---流程设计时已知实例数目

      ● 运行时前置多实例---实例数目在运行时才能确定

      ● 运行时非前置多实例---实例数目无法确定

      ● 同一任务多实例并要求同步运行

(5)、基于状态模式

      ● 延期选择---执行两个可选进程之一,选择执行进程是隐含的

      ● 交叉并行路由---随机执行一个任务但不并行

      ● 里程碑---直到达到某个里程碑方激活一个任务

(6)、取消模式

      ● 取消活动---取消或禁止一个活动

      ● 取消过程---取消或禁止一个过程

(7)、其它模式

      ● 结构化循环

          ● 递归

          ● 临时触发器

          ● 持续触发器

          ● 取消范围

          ● 多实例的取消

          ● 多实例的手工完成

          ● 鉴别阻塞

          ● 鉴别取消

          ● 结构化N选M

          ● N选M阻塞

          ●  N选M取消

          ●  AND合并

          ● 多实例的N选M

          ● 多实例的N选M取消

          ● 动态多实例的N选M

          ● 循环的同步合并

          ● 同步合并

          ● 区域互斥

          ● 交叉路由

          ● 线程合并

          ● 线程分支

          ● 显式终止

3.2.1   基本模式

(1)、顺序模式(Sequence)

    最基本的过程模型:按照顺序执行各项活动,前驱活动的完成是后续活动开始的必要条件,每一个工作流系统都直接实现了这种模式,这个模式是工作流能运行的一个重要基石。 

技术分享

 

 

     这个理论模型十分简单,只是一个工作单元完成了,紧接着无条件执行下一个工作单元。

(2)、并行分支模式(Parallel Split)

     在流程执行过程中,需要将单进程的某个控制点分成可以并行执行的多进程控制,于是允许任务同时执行或者以任何顺序执行。此一模式,实际就是我们常接触到的 AND 模型。 

技术分享

 

 

    值得注意的是这个定义来说一般B、C、D之间是并发的,实现上一般是几个不同的线程/进程。

(3)、同步模式(Synchronization)

     AND分支以后,一个最为普遍的合并方式就是AND合并。当多个并行任务都完成后才能开始执行下一任务。 

 

技术分享

 


    需要注意的细节是"同步"这个问题,很多时候存在现实业务的考虑,即使是同一个动作,也不一定是非要合并不可。

    一般情况下,并行分支和合并是组合使用,组合执行模型如下: 

 

(4)、单选模式(Exclusive Choice)

     单选模式其实就是“排它选择”模式,在流程的某一节点,依据一个结果或流程控制数据, 从多个分支路径中选定一个路径执行。 

技术分享

 

 

    需要注意的是这个"排他"性,只能选择其中一个分支,另外多个分支将不会走下去。一般来说,这个模式的实现一般为在运行时的条件选择,就是条件判断的代码放到XOR 这个结点,然后去根据这些代码去判断下一步的走向。

(5)、简单合并模式(Simple Merge)

     在流程中某点,需将两个或更多可选分支聚合而不同步;换言之,“合并”在任一入口连接触发时被触发。 

技术分享

 

 

    这个模式主要是为了应付前躯只有一个分支的流程,这个模式也是一个很常用的模式。在许多的流程图中,没有显式说明的一般都可以看作是 XOR-join,就是任意一个前躯完成,就触发下一个工作单元。

    一般情况下,单选模式和简单合并模式是组合使用的,组合模式如下: 

技术分享

 

 

 

    通过对基本模式的分析和了解后,在实际的应用中,经常将五种模式进行组合使用,组合使用的模型如下: 

 技术分享

 

3.2.2   高级分支与同步模式

(1)、多选模式(Multiple Choice)

    在工作流过程的某点,依据判定或工作流控制数据,选择一个或多个分支来进行执行。通常意义上来讲就是我们所说的OR_Split

技术分享

 

 

(2)、同步合并模式(Synchronising Join)

    流程中某点多条路径聚合成一个线程,若多于一条路径触发,则活动线程需同步;若仅有一条路径触发,则可选分支应再收敛,无需同步。

    工作流程中的多个路径在一个点被汇合成一个单一的进程。如果多于一个的路径到达了,活动线程就需要进行同步。如果只有一个路径到达,那么其它的路径应该异步的重新会聚。

    这一个模式是为了应付多选模式(Multiple Choice)或者通常意义所说的 OR-Split 所产生的分支。 

技术分享

 

 

     说明:这个分支的合并,需要了解上下文的关系。如果前面只产生了A分支,那么到达同步-JOIN节点就可以触发后续活动D。如果前面产生的分支A、B、C都被激活触发,并且A、B、C分支是并发的,那么当A、B都已到达同步-JOIN节点,但是C分支还没有到达,那么就需要进行等待,等到C分支也到达本节点后,才能触发执行下一节点D活动。

(3)、多合并模式(Multiple Merge)

    多合并模式即多路合并,在流程中某节点,两条或更多分支无同步再收敛。若多于一个分支被激活或多个分支被同时激活,流程需要对每个被激活分支进行响应一次,则需要采用多合并模式。其实多路合并并不是真正意义的合并,而是到达多路_JOIN节点时继续相同的后续分支。 

技术分享

 

 

       说明:如图所示,B\C\D三个活动,当B先到达“多路_JOIN”节点时,则触发E1,C到达时候,触发E2,D到达时候,触发E3,触发完成全部分支后,E触发完成结束。其实每次触发的都是相同的E,但是产生的任务为E1,E2,E3,他们是对每一个流入的分支都进行响应一次功效。当全部触发完成后,流程继续进入E后续的流程活动。

(4)、鉴别器模式(Discriminator)

    路径鉴别器是指在流程的某点,激活后续任务之前等待许多流入分支的完成。从它开始之时起,等待所有剩余分支的完成并“忽略”它们。一旦所有的流入分支都被触发,它使自己复位,以便可被再次触发。 

 

技术分享

 

 

     鉴别器模式只只对And_Split同时执行的情况;此种模式有三种情况:

         (1)、B、C同时到达鉴别器Discriminator节点,则执行D

               一般这种情况不会发生,因为计算机执行的时候,总是有先后执行顺序的,总有一个为先执行。

         (2)、B先到达鉴别器Discriminator节点,那么就不必等待C的执行结果,直接执行D,当C到完成后到达鉴别器Discriminator节点时,流程将自动忽略C的结果,将鉴别器Discriminator恢复原位,继续等待被触发。

         (3)、C先到达鉴别器Discriminator节点,那么就不必等待B的执行结果,直接执行D,当B到完成后到达鉴别器Discriminator节点时,流程将自动忽略B的结果,将鉴别器Discriminator恢复原位,继续等待被触发。

(5)、M中的N模式(N-out-of-M Join)

    M中选N合并是指流程的某点M 条并行路径聚合到一点,只要其中N条路径完成则激活后续任务,所有其它剩余路径的完成应被忽略。类似于路由鉴别,只要所有流入分支被触发,则该合并使自己复位,以便可被再次触发。M中选N其实就是合并多条路径,进行部分同步,只执行一次后续活动。 

技术分享

 

 

     说明:上图所示 M 为3,N我们设定为2 ,则,如果B\C 都完成到达N-out-of-M Join节点,则满足N-out-of-M 规则,则不必等待D的执行结果,直接转向执行E;当D完成后到达N-out-of-M Join节点,流程则忽略D的执行结果,将N-out-of-M Join节点复位等待再次被触发。

3.2.3   结构模式

(1)、任意循环模式(Arbitrary Cycles)

      在工作流过程的执行过程中,一个或多个任务可被重复执行。 

 技术分享

 

(2)、隐含终断模式(Implicit Termination)

     这个模式叫隐式结束,或者自然结束。就是当所有正在运行结点都没有后继结点,流程就视为结束了。也就是不需要指明结束的结点,只要跑完所有的结点(或者没有找到后继结点),就视为流程结束。

 

 

 

3.2.4   多实例模式

(1)、设计期多实例(Multiple Instances with a Priori Design-Time Knowledge)

     流程中的某个任务可能需要创建多个实例,其数目在设计模型时已知。即在某种情形下,一个任务被激活多次,其指定任务在给定情况下实例的个数在设计时已知。这一模式是用于确立多实例的入口方式。入口主要处理的问题就是确定所需要生成的实例个数 N 。而这个 N 在设计流程的时候就确定了。

(2)、运行时前置多实例(Multiple Instances with a Priori Run-Time Knowledge)

     一个任务的实例个数是动态的,亦即在设计时未知,而在运行期间所有实例需被执行前的某点可获知其数目。可以将本模式看作一初始化该任务的For循环。在某种情况下,任务可被激活多次,给定任务的实例数在指定情形下是一变量,取决于情况特征或资源的可用性, 但在运行期的某些阶段才已知, 即该任务的实例在运行时候才确定。

    入口方式也可以动态确定,这一模式是表示在流程运行的过程中,B 中第一个实例产生以前就确定 N 。当然了,确定这个N 的时机可以是前面 A,也可以是 A 前的工作任务。总之是在第一个实例产生前就确定下来的,也可以视作该模式的应用。

(3)、运行时非前置多实例(Multiple Instances without a Priori Run-Time Knowledge)

     实例的数目是动态的,亦即实例数设计时不知,在运行期间,所有这些实例需要被激活前的任何阶段都无法知道。可将本模式看作是任务实例化的WHILE循环。

(4)、同步多实例(Multiple Instances without a Priori Run-Time Knowledge)

     实例数在设计时未知,任务的所有实例完成后另一任务才能启动(或开始)。

3.2.5   基于状态模式

(1)、延期选择(Deferred Choice)

     一个线程激活任务A, 另一线程激活任务 B,而两个任务都在任务列表中),只要一个线程启动, 另一线程应消失(亦即若任务 A 启动,则任务B 应从工作列表中消失)。

     工作流中的一个节点,有一个或多个分支已经被选择。与XOR拆分相比,并没有明确的选择,但是,选择是取决于环境的。与AND拆分相比,两者中只有一个被执行。这意味着一旦环境启动了其中的一个,另一个就被取消。要注意,选择是被延迟到两个分支中的一个真正开始执行时,也就是说,选择是可以尽可能的推后的。例子:在收到货物之后,有两种方法可以将其送到。选择取决于相关资源的可用性。因此,选择会被推迟到直到其中一个资源可用为止。

(2)、交叉并行路由(Interleaved Parallel Routing)

     一组活动以任意的顺序执行,每个活动都被执行,他们的顺序是在运行时决定的,并且在任意一个时刻都不会有两个活动在执行。

(3)、里程碑(Milestone)

     一个活动能否执行取决于一个指定的状态。也就是说,只有在到达一个特定的未过期的里程碑时,活动才被执行。

3.2.6   取消模式

(1)、取消活动(Cancel Activity)

    一个可执行的活动被强制失效了,也就是说,一个正在等待执行的活动所在线程被移除了。

    例子:如果顾客取消了一个请求,那么与之相关的活动也被取消了。

(2)、取消过程(Cancel Case)

    一个过程实例, 被完全取消。

3.2.7   其它模式

(1)、结构化循环(Cancel Activity)

(2)、递归(Recursion)

(3)、临时触发器(Transient Trigger)

(4)、持续触发器(Persistent Trigger)

(5)、取消范围(Cancel Region)

(6)、多实例的取消(Cancel Multiple Instance Activity)

(7)、多实例的手工完成(Complete Multiple Instance Activity)

(8)、鉴别阻塞(Blocking Discriminator)

(9)、鉴别取消(Cancelling Discriminator)

(10)、结构化N选M(Structured Partial Join)

(11)、N选M阻塞(Blocking Partial Join)

(12)、N选M取消(Cancelling Partial Join)

(13)、AND合并(Generalised AND-Join)

(14)、多实例的N选M(Static Partial Join for Multiple Instances)

(15)、多实例的N选M取消(Cancelling Partial Join for Multiple Instances)(16)、动态多实例的N选M(Dynamic Partial Join for Multiple Instances)

(17)、循环的同步合并(Acyclic Synchronizing Merge)

(18)、同步合并(General Synchronizing Merge)

(19)、区域互斥(Critical Section)

(20)、交叉路由(Interleaved Routing)

(21)、线程合并(Thread Merge)

(22)、线程分支(Thread Split)

(23)、显式终止(Explicit Termination)

3.3  过程推进

    过程推进是针对工作流系统正常流转的一个整体的引擎调度流程,它是工作流系统完整流转的整体过程描述。

   (1)、业务创建

         用户在WEB端创建单据

         业务流程创建业务单据、公文流程编制文稿数据,此时业务单据的状态为草稿状态,同时产生一条状态为【初始】的过程实例。如果用户删除业务单据,则同时删除产生的过程实例。

   (2)、流程启动

         第一步完成后,启动工作流程。流程的启动方式分多种,手工启动、自动启动、事件启动、邮件启动、外部启动等。

             <A>、将流程定义模型导入到运行库(工作流流程的执行情况表)中;运行库包含如下内容:

                   ● 过程执行情况:生成过程记录,状态为【初始】

                   ● 活动执行情况:

                   ● 任务执行情况

             <B>、将过程实例状态变迁为【运行】

             <C>、生成所有活动的活动实例。

             <D>、将第一开始活动的活动实例状态变迁为完成。

             <E>、生成开始活动的工作任务,将状态变迁为完成。

             <F>、更新运行库记录。将过程记录状态变更为【运行】,生成一条第一开始活动的执行情况记录,状态为【完成】,生成第一活动的任务执行情况记录,状态修改为【完成】。

   (3)、过程执行

         流程启动后,SDP工作流流程的设计模式是已经完成了第一开始活动的所有任务,直接进行第二活动的执行,此时整个过程开始真正的执行,那么我们就需要开始分析活动实例,在许可状态(Running)下,分析活动类型:

               <A>、普通

                     普通类型是指在工作流过程中,各个活动(人工活动或自动活动)相互之间路径没有分支,只有单一的流向,此种类型属于普通活动。如图所示: 
技术分享

 


     此种情况下直接读取活动变迁表的后续活动的字段信息。

               <B>、路由

                     路由类型是指在工作流过程中,活动相互之间的路径变迁有多种(大于1)分支,此种情况属于路由类型。路由分几种情况:分裂、汇聚、循环 

技术分享

技术分享

技术分享

 

 

 

 

 

          第一开始活动执行完成后,根据迁移条件是否开始激活运行下一步活动实例,活动实例在过程实例创建时候已经全部创建完成,此处只要执行激活运行活动实例,激活运行活动实例的条件是必须至少一个工作任务被创建并且满足启动运行的条件,那么此时就需要先创建工作任务项,并且启动运行工作任务,即工作任务的状态变迁为运行,变更完成后,将活动实例状态变迁运行。

   (4)、业务结束

         业务单据及工作流流程的结束。结束方式分:完成(正常流转完成),终止(非正常的结束),中断(因工作流在挂起状态下被发现过程实例超过了它的生存周期,有工作流引擎自动执行过程中断。)

         业务和流程的结束,工作流引擎将自动清除过程实例、活动实例、工作任务记录。运行库中,将过程执行情况、活动执行情况、任务执行情况的记录状态变更为相应的结束状态(注意:当非正常结束时,需要清除未完     成的活动和任务记录)。

    过程推进是由工作流系统的调度引擎来执行,它是工作流系统完整流转的整体过程描述。

流程设计-流程模式

标签:随机   种类型   更新   设定   针对   partial   .com   没有   区域   

原文地址:http://www.cnblogs.com/1834235472qq/p/7765124.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!