流程设计-流程模式

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

(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)、业务结束

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

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

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

时间: 2024-10-13 10:01:44

流程设计-流程模式的相关文章

asp.net 微信企业号办公系统-流程设计--流程步骤设置-策略设置

策略设置包括当前步骤的流转方式,处理人员,退回策略等设置. 流转类型:当前步骤后面有多个步骤时,此类型选择可以决定后续步骤的发送方式. 1.系统控制:由系统根据您在线上设置的流转条件来判断该发送到哪一步(线上的条件设置将在后面说明). 2.单选一个分支流转:后面有多个步骤时当前处理人员只能选择发送到后面的某一个步骤. 3.多选几个分支流转:后面有多个步骤时当前处理人员可以多选发送到后面的某几个或全部步骤. 运行时选择:是否允许该步骤处理人员在发送到下一步的时候选择接收人员,如果设置为不允许则只能

asp.net 微信企业号办公系统-流程设计--流程步骤设置-基本设置

流程属性设置完成后点击确定之后,即可进行流程步骤设置了. 点击工具栏上的步骤按钮,即可添加一个新步骤. 在新步骤图形上双击即可弹出该步骤相应属性设置框. 步骤ID:系统自动为该步骤生成的唯一ID. 步骤名称:该步骤的名称. 意见显示:是否在审批表单的底部显示历史步骤的审批意见,如果选择了显示则会如下图显示历史意见: 审签类型:无签批意见栏:在表单底部没有签批意见栏,该步骤不需要签批意见即可发送,有签批意见栏(无须签章):在表单底部有签批意见栏,但没有签章按钮,此步骤需要签意见,但不须要签章,有签

asp.net 微信企业号办公系统-流程设计--流程步骤设置-事件设置

事件设置是设置当前步骤在提交前后或退回前后要执行的一些操作(该事件为服务器事件). 事件格式为:dll名称.命名空间名称.类名.方法名,这里不需要写括号和参数,处理时会自动带上当前流程实例的相关参数. 参数为:RoadFlow.Data.Model.WorkFlowCustomEventParams类的实例,里面包含当前流程步骤的相关信息. FlowID:当前流程ID. StepID:当前步骤ID. GroupID:当前流程实例的分组ID,一个流程实例的分组ID相同,此ID是为了区分一个流程的不

asp.net 微信企业号办公系统-流程设计-流程属性设置

打开流程设计器点击新建流程后会弹出新流程属性设置框,属性设置包括基本信息,数据连接和标识字段三项设置. 1.基本信息 流程ID:系统自动给每个流程分配的一个唯一ID. 流程名称:给您的新流程取一个名称. 流程分类:流程的分类管理,此分类在数据字典中维护. 管理者:指定该流程的管理者,管理者可以修改和删除该流程. 实例管理者:该流程的实例管理者,管理者可以查看该流程的处理过程和人工干预该流程的流转,如中途指派,强制退回等. 删除已完成:当流程实例完成后是否从任务表中删除该流程实例的审批过程. 设计

asp.net 微信企业号办公系统-流程设计--流程步骤设置-按钮设置

按钮设置是配置当前步骤的处理者可以执行哪些操作,每个按钮都有对应的执行脚本(javascript脚本). 从左边的按钮列表中选择当前步骤需要的按钮. 注意:如果是流程最后一步则要配置完成按钮而不是发送按钮. 左边的按钮列表数据来源于:流程管理-->按钮管理 执行脚本为js脚本,如这里的flowBack();为一个js方法,该方法在common.js文件中.

数据库设计流程

数据库设计流程  目前数据库设计一般分为6个阶段, 即需求分析阶段,概念结构设计阶段,逻辑结构设计阶段,物理结构设计阶段,实施阶段,运行与维护阶段. (1) 需求分析阶段 需求分析阶段的主要任务是指通过充分调查现实世界要处理的对象, 详细了解计算机系统的工作情况, 明确用户的各种需求, 然后确定系统的各项功能.数据库系统不仅要按照当前的应用要求来设计, 而且必须充分考虑今后可能的扩充和改变. (2) 概念结构设计阶段 概念结构设计阶段的主要任务是将需求分析阶段所得到的用户需求抽象为概念模型, 而

复杂产品的响应式设计流程

响应式网页不像传统网页只需考虑一种状态,不是交付一套设计稿就完事儿了,它给设计.前端和开发团队之间的协作模式带来新的挑战.在一个复杂产品全面响应式的项目里,交互每个阶段该产出什么?交互与视觉如何协作?前端何时介入?哪些事情让后端开发来做更合理?经历"玩客"第一版后,我们得到了一些答案. 响应式设计之所以叫响应式"设计"而不叫响应式"技术",是因为它是一项设计先行的工作.需要设计先明确好响应方式再实现出来,不能出一套设计稿后等着前端看情况把它变成响

FPGA设计流程

FPGA设计人体分为设计输入.综合.功能仿真(前仿真).实现.时序仿真(后仿真).配置下载等六个步骤,设计流程如图2所示.下面分别介绍各个设计步骤. 1 设计输入 设计输入包括使用硬件描述语言HDL.状态图与原理图输入三种方式.HDL设计方式是现今设计大规模数字集成电路的良好形式,除IEEE标准中VHDL与Verilog HDL两种形式外,尚有各自FPGA厂家推出的专用语言,如Quartus下的AHDL.HDL语言描述在状态机.控制逻辑.总线功能方面较强,使其描述的电路能特定综合器(如Synop

流程设计--引擎理念

工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色.分工和条件的不同决定信息传递路由.内容等级等核心解决方案.工作流引擎是为工作流实例提供执行环境,它是工作流管理系统的核心服务,因此,工作流引擎设计的好坏直接关系到工作流的执行效率与可扩展性. 工作流引擎是工作流管理系统中为过程实例和活动实例提供运行环境的服务软件,是整个工作流管理系统的核心,工作流引擎的主要功能有: (1).解释流程定义 (2).创建流程实例(人工创建.自动创建:自动创建又包括自动定时