目录
- Flowable
- Flowable简介
- Flowable 的四大引擎
- Flowable BPMN 业务流程引擎
- Flowable DMN 决策引擎
- Flowable CMMN 案例模型引擎
- Flowable Form 表单引擎
- Spring Boot集成Flowable
Flowable
Flowable简介
Flowable 是一个使用 Java 编写的轻量级业务流程引擎,使用 Apache V2 license 协议开源。2016 年 10 月,Activiti 工作流引擎的主要开发者离开 Alfresco 公司并在 Activiti 分支基础上开启了 Flowable 开源项目。基于 Activiti v6 beta4 发布的第一个 Flowable release 版本为6.0。以 JAR 形式发布使得 Flowable 可以轻易加入任何Java环境:Java SE、Tomcat、Jetty 或 Spring 之类的 servlet 容器;JBoss 或 WebSphere 之类的 Java EE 服务器等等。 另外,也可以使用 Flowable REST API 进行 HTTP 调用。
Flowable 项目中包括 BPMN(Business Process Model and Notation)引擎、CMMN(Case Management Model and Notation)引擎、DMN(Decision Model and Notation)引擎、表单引擎(Form Engine)等模块。也有许多Flowable 应用(Flowable Modeler、Flowable Admin、Flowable IDM 与 Flowable Task),并提供了直接可用的 UI 示例。
Flowable 的四大引擎
Flowable BPMN 业务流程引擎
流程引擎是支持配置业务流转过程的关键模块。Flowable 支持 BPMN 2.0 行业标准,同时提供了一些 Flowable 自定义的 BPMN 扩展(extensions)可选用,允许通过导入 XML 文件或通过前端可视化界面建立流程。
- 事件:事件(event)通常用于为流程生命周期中发生的事情建模。在 BPMN 2.0中,有两种主要的事件分类:捕获(catching)与抛出(throwing)事件。捕获事件为当流程执行到达这个事件时,会等待直到触发器动作。抛出事件当流程执行到达这个事件时,会触发一个触发器。具体事件包括定时器事件、启动事件、结束事件、消息事件、信号事件、边界事件等丰富类型。
- 顺序流:顺序流(sequence flow)是流程中两个元素间的连接器。在流程执行过程中,一个元素被访问后,会沿着其所有出口顺序流继续执行。这意味着BPMN 2.0的默认是并行执行的:两个出口顺序流就会创建两个独立的、并行的执行路径。
顺序流上定义条件(conditional sequence flow)时为条件顺序流。当离开 BPMN 2.0活动时,默认行为是计算其每个出口顺序流上的条件。当条件计算为true时,选择该出口顺序流。如果该方法选择了多条顺序流,则会生成多个执行,流程会以并行方式继续。但这种情况并不适用于网关(gateway),不同类型的网关,会用不同的方式处理带有条件的顺序流。所有的BPMN 2.0任务与网关都可以使用默认顺序流(default sequence flow)。只有当没有其他顺序流可以选择时,才会选择默认顺序流作为活动的出口顺序流。流程会忽略默认顺序流上的条件。 - 网关:网关(gateway)用于控制执行的流向,可类比路口的分叉来理解。如按BPMN 2.0 的用词也即是执行的「标志(token)」。网关可以消费(consuming)与生成(generating)标志。网关可细分为下列类型:
-
排他网关(exclusive gateway):也叫异或网关 (XOR gateway),或者基于数据的排他网关 (exclusive data-based gateway),用于对流程中的决策建模。当执行到达这个网关时,会按照所有出口顺序流定义的顺序对它们进行计算。选择第一个条件计算为 true 的顺序流(当没有设置条件时,认为顺序流为true)继续流程。使用排他网关时,只会选择一条顺序流。当多条顺序流的条件都计算为true时,会且仅会选择在XML中最先定义的顺序流继续流程。
-
并行网关:并行网关不计算条件,如果连接到并行网关的顺序流上定义了条件,会直接忽略该条件。并行网关(parallel gateway)可以将执行分支(fork)为多条路径,也可以合并(join)多条入口路径的执行,并行网关的功能取决于其入口与出口顺序流。如果并行网关同时具有多条入口与出口顺序流,可以同时具有分支与合并的行为。在这种情况下,网关首先合并所有入口顺序流,然后分裂为多条并行执行路径。
-
包容网关:可看做排他网关与并行网关的组合。与排他网关一样,可以在包容网关的出口顺序流上定义条件,包容网关会计算条件。然而主要的区别是,包容网关与并行网关一样,可以同时选择多于一条出口顺序流。包容网关的汇聚行为比并行网关更复杂。
-
基于事件的网关:基于事件的网关(event-based gateway)提供了根据事件做选择的方式。网关的每一条出口顺序流都需要连接至一个捕获中间事件。一个基于事件的网关,必须有两条或更多的出口顺序流。
- 任务:Flowable 支持的任务类型超过十五种。
-
用户任务:用于对需要人工执行的任务进行建模。当流程执行到达用户任务时,会为指派至该任务的用户或组的任务列表创建一个新任务。用户任务允许标识到期日期以及直接指派给用户。
-
邮件任务:Flowable 引擎可以向一个或多个收信人发送邮件,支持 cc、bcc、HTML 文本等等,使用支持 SMTP 的外部邮件服务器发送邮件。
-
业务规则任务:业务规则任务(business rule task)用于同步地执行一条或多条规则。在 V6.3.0 到 V6.4.1 版本中,Flowable 使用名为 Drools Expert 的 Drools 规则引擎执行业务规则。截至 V6.4.1 版本,业务规则中包含的 .drl 文件,必须与定义了业务规则服务并执行规则的流程定义一起部署。这意味着流程中使用的所有 .drl 文件都需要打包在流程 BAR 文件中,与任务表单等类似。由于 Flowable 自己的规则引擎 DMN 功能逐渐完善,对业务规则任务的支持可能会在后续版本中变动,具体要看 Flowable 官方更新文档。
-
其他的任务类型还有脚本任务、Web 服务任务、Shell 任务、Java 服务任务、执行监听器、任务监听器等。
- 子流程与调用活动:子流程(sub-process)是包含其他的活动、网关、事件等的活动。其本身构成一个流程,并作为更大流程的一部分。子流程完全在父流程中定义(所以也称作嵌入式子流程)。在复杂流程流转的场景下中子流程较为多见,使用这一特性可以比较灵活地维护包含子流程的审批路径。
Flowable DMN 决策引擎
作为以 BPMN 为核心的工作流引擎,Flowable 原本与规则引擎的关联并不强,但实际业务流程中,有时需要由多个决策来决定流程走向,而每个决策都要根据自身的规则来决定,每个决策之间也可能存在关联。此时就需要规则引擎来提供决策支撑。在规则引擎开源产品中,Drools 是最知名的一款,它实现了PMML(Predictive Model Markup Language)规范,同时支持 DMN (Decision Model and Notation)标准。Flowable 目前实现了 DMN V1.1 规范的框架,由于 DMN 规范中要求对 PMML 提供兼容性,这意味着 Flowable 具有相对强大的业务规则的处理能力。
DMN 定义由决策(decision)和其他东西组成,决策由表达式描述。DMN 标准描述了几种表达式的类型,目前在 Flowable DMN 中仅支持决策表(decision table)类型的表达式。决策表分为输入表达式与输出表达式两个主要区域。在输入表达式中,可以定义变量,用于规则输入项(input entries)的表达式。可以通过选择Add Input(添加输入),定义多个输入表达式。在输出表达式中,可以定义选择表执行结果要创建的变量(变量的值将用于输出项表达式,在下面解释)。可以通过选择Add Output(添加输出),定义多个输出表达式。
在决策表编辑界面,可以选择命中策略,共有两大类(单命中、多命中)七种命中策略可选:
(1)单命中、第一命中(single hit & FIRST):多个规则允许交叉,执行从上到下的第一条命中项。
(2)单命中、唯一命中(single hit & UNIQUE):多个规则不允许交叉,执行从上到下的第一条唯一命中项。
(3)单命中、任一命中(single hit & ANY):规则允许交叉,但是所有输出的优先级相同,随机执行一条命中项。
(4)单命中、优先级(single hit & PRIORITY):多个命中规则的优先级不同,执行优先级最高的那条。
(5)多命中、输出优先级排序(multiple hit & OUTPUT ORDER):按照输出优先级递减的顺序返回所有命中。
(6)多命中、规则顺序排序(multiple hit & RULE ORDER):按照规则顺序返回所有命中。
(7)多命中、聚合(multiple hit & COLLECT):按照随机顺序返回所有命中。
Flowable CMMN 案例模型引擎
CMMN 是 Case Management Model 的缩写,在 Flowable Modeler 应用中体现为「案例模型」菜单,使用时可以类似于流程引擎可视化配置流程,也可通过XML格式文件。CMMN(Case Management Model and Notation)行业标准 V1.1 版本于2016年发布,目前 Flowable 的 V6.4.1 已支持此标准。
与 BPMN 引擎相比,CMMN 引擎适用于如下几种场景:
(1)重复与并行的工作分发。BPMN 引擎在处理顺序执行、职责分工明确的工作流程时有优势,但面对动态、自由、并行的情况时,BPMN 显得灵活性不足,此时CMMN 则更适合应对。
(2)处理带有生命周期特征的场景,如客户、产品、项目、雇员。以项目为例,项目的立项、中止、收尾、交付等阶段(phases),可以在 CMMN 中通过阶段(Stages)概念在更高层次进行描述。
Flowable Form 表单引擎
Flowable 框架中将表单作为一个独立的子模块,可以将表单作为一个服务在其他模块中进行调用,表单服务就可以控制所有流程所使用的表单以及表单字段的可读、可写等操作。表单相关的使用可分为表单的定义以及表单的运行实例两个阶段。表单定义支持导入以 .form 为后缀的表单定义文件(JSON 语言编写) 。在 Flowable Modeler 应用中,「表单」菜单下可以进行简单的表单拖拽拼接可视化配置定义。