工作流系统开发之二十二 dotnet版工作流引擎

工作流管理系统为实现流程的自动化,必须包含一个工作流引擎,工作流引擎负责流程的定义,解释和运转。流程引擎是对业务流程的一个抽象,因此工作流引擎的设计模型是决定流程功能的重中之重,将直接影像流程的各个环节。

一套工作流管理系统还包含很多个必须要实现的部分,如:事件处理,任务处理,组织机构的适配,自定义表单等等。以及很多中国式的“动态会签,回退,自由流”等等变态需求。但抛开这些,只关注每个流程的最基本的部分,即解决一个过程运转的问题,从一个环节到另一个环节,使得流程能够运转起来。这应该就是流程引擎要实现要关注的基本问题,即流程引擎的抽象。

工作流引擎模型有很多种,FSM、PetriNet、EPC、Activity Diagram等等,不论采用那种流程引擎模型,最终都需要能将业务流程用流程引擎的符号或元素表述出来。

 

我们公司的eworkflow自定义工作流系统dotnet版,流程引擎采用C#语言实现了FSM有限状态机的流程引擎模型。有限状态机是一种数学模型,广泛应用于流程引擎,rpg游戏等领域。是表示有限个状态以及通过执行动作使得状态发生转移的数学模型。

状态转换图:

 


工作流系统开发之二十二 dotnet版工作流引擎

工作流引擎的模型正是利用这种定义的有限个状态和动作,动作的结果导向另外一个状态来达到流程的流转。

工作流引擎的每一个状态 = 一个业务环节 + 业务环节的状态

业务环节:即为一个虚拟的业务操作场所
业务环节的状态:即为一个具体的流程运转到此业务环节的实际状态。

 

流程引擎对流程的描述通常是采用xml格式的文档来描述,xml文档中的每个节点都赋予了一定意义,各节点作为流程定义的基本元素,流程引擎能够定义、解释和应用它们来描述尽可能多的业务流程。


一个简单的流程描述xml文件:


工作流系统开发之二十二 dotnet版工作流引擎

上图xml流程的图解状态过程如下:

开始节点-》初始化动作--》步骤节点-》动作节点--》结束

 

xml文件中基本元素即工作流引擎的基本元素:
步骤(step)
    一个step描述的是工作流所处的位置。可能从一个step transtion到另外一个step,或者也可以在同一个step内流转(因为step可以通Status来细分,形成多个state)。一个流程里面可以有多个step。


状态(status)
    状态status 是用来描述工作流程中具体step(步骤)状态的字符串。eWorkFlow中预置了三种步骤的状态 Underway(进行中)、Queued(等候处理中)、Finished(完成),用户可以任意扩展自己的状态。而工作流的状态state则是由step(步骤)+status(步骤的状态)组成的。工作流状态state的升迁来达到工作流实例的推进。


流转(transtion)
    一个工作流实例状态state到另一个状态state的转移。


动作(action)
    action 触发了发生在 step 内或 step 间的流转,或者说是基于 state 的流转。一个 step 里面可以有多个action。action 和step 之间的关系是,step 说明“在哪里”,action 说明“去哪里”。 一个 action 典型地由两部分组成:可以执行此action(动作)的condition(条件),以及执行此动作后的 result(结果)。   


任务(task)
  任务是当工作流状态发生转移的时候,产生的任务。任务可以指定为一个具体的角色,人,或者群组。任务具体,待办,已办,竞争办理,代理待办等多种功能。


条件(condition)
类似于逻辑判断,可包含“AND”和“OR”逻辑。比如一个请假流程中的“本部门审批阶段”,该阶段利用“AND”逻辑,判断流程状态是否为等候处理中,以及审批者是否为本部门主管。


结果(result)
Result 代表执行action(动作)后的结果,指向新的 step 及其 step status,也可能进入 split 或者 join。result 分为两种, contidional-result (有条件结果),只有条件为真时才使用该结果,和 unconditional-result(无条件结果),当条件不满足或没有条件时使用该结果。


分支/合并(split/join)
流程的分支和合并。分支是指流程下一步可以同时分发给多个步骤,分支split 提供多个unconditional-result(无条件结果);join 则判断多个current step 的状态提供一个 result(结果)。


子流程(subflow)
子流程,动作的结果可以指向一个子流程,子流程是一个独立的流程,可以单独启动也可以嵌套在另外的流程中启动,和主流程有同步或异步衔接的属性。

 

 

工作流程引擎利用这些基本的元素,能够实现各种类型的路由。
 1、串行:就是一个步骤流向下一个步骤的基本路由方式。
 2、并行:一个步骤下可以执行多个动作,动作的结果可以流向不同的步骤,这是并行路由的一种方式。
 3、条件:步骤的动作结果可以设置条件,满足条件的则流向条件结果。
 4、分支:动作结果可以流向一个分支,分支可以同时流向多个不同的结果步骤,这也是并行路由的一种方式。
 5、合并:多个结果流向一个合并节点,合并节点满足一定条件后,就可以流向下一步骤。
 6、循环:动作的结果指向本步骤或上一步骤,形成循环路由。
 7、子流程嵌套:在工作流中嵌套执行另一工作流,叫子流程嵌套路由,子流程可以是同步执行和异步执行两种属性,主子流程可设置输入输出参数来达到信息的传递。
 8、自由跳转:流程实例运行当中,正常的流程是按照流程定义的节点往下执行,自由跳转就是可以跳转到任意的步骤,执行过和未执行过的步骤。
 9、回退:回退是指当流程实例运行过程中,由于某些原因回退到已经执行过的某个步骤,并辅助执行业务补偿,使得业务数据也回退到已经执行过的步骤状态。
 
 

 

 

要了解一个工作流系统,必须要先理解流程引擎的模型,理解了流程引擎的原理,模型,就如同掌握这套工作流系统的灵魂,然后再去理解它的全部。否则,一套工作流系统对你来说,可能只是一些复杂的结构,丰富多彩的示例,眼花缭乱的功能 等等。

你可能感兴趣的:(工作流引擎)