一文带你掌握 flowable 所有业务概念
1.什么是工作流审批
根据本人的理解,就是审批流程管理。
2.什么是 flowable
1.官方解释
官方解释如下:
Flowable 项目提供了一套核心的开源业务流程引擎,这些引擎紧凑且高效。它们为开发人员、系统管理员和业务用户提供工作流和业务流程管理 (BPM) 平台。
它的核心是一个闪电般快速、久经考验的动态 BPMN 流程引擎,伴随着 DMN 决策表和 CMMN 案例管理引擎,所有这些引擎都是用 Java 编写的。它们是 Apache 2.0 许可的开放源代码,拥有一个承诺社区。
所有引擎都可以嵌入在 Java 应用程序中运行,也可以作为服务器、集群和云中的服务运行。它们可以作为独立的引擎或服务运行,也可以集成在一起为业务流程管理提供丰富的套件。它们与 Spring 完美集成。凭借丰富的 Java 和 REST API,它们是编排人工或机器人自动化处理的理想基础。它们启用微服务编排或软连接微服务本身。
这里总结一下:
目的是管理业务审批工作流。
使用 BPMN 技术。
可方便嵌套在 spring 体系中。
2.显赫的家室
说起 flowable 还来自于 activiti,因为 activiti 内部工作人员不合,一大堆小伙伴相约出去创业了。但是锅还是原来的锅,只不过做饭的方式不同了。所以在思想上,flowable 与 activiti 相差不大。只不过功能更加强大了。
3.什么是 BPMN
1.解释 BPMN
官方解释如下:
标准的业务流程模型和符号 (BPMN) 将为企业提供以图形符号理解其内部业务程序的能力,并使组织能够以标准方式交流这些程序。此外,图形符号将有助于理解组织之间的绩效协作和业务交易。这将确保企业了解自身和业务参与者,并使组织能够快速适应新的内部和 B2B 业务环境。
这里总结一下:
BPMN 开发了一套标准的业务流程建模符号。如下图就是建模的符号。
BPMN 定义了一个流程图,该流程图使用上述符号编写。如下图就是通过 BPMN 规则绘画的图。
说白了如上图规则的图就 BPMN 流程图。
2.BPMN 常用符号
1.开始节点
表明从此处开始流程。
2.任务节点
其中包含了很多种任务,如图。其中最常用的就是用户任务。指定审批人都需要此选项。
3.网关组件
网关相当于判断(与,或,非),最常用的三种网关分别是互斥/排他网关,并行网关,相容网关。
互斥网关:相当于判断,举例说明,如果输入值大于 20 走 A 节点,小于 20 走 B 节点。
并行网关:相容网关成对出现,表示网关中的人全部同意才能够进入下一节点。
3 .相容网关:互斥网关与并行网关的结合体,如果满足 A,B 都互斥条件,则都需要流转,如果只有一个满足,那么只流转满足条件的。
3.来个例子
说明如下:
当审批申请人提交完成后进入审批阶段
两位项目经理进行审批,需要两人都同意后进入下一节点。
经理进行审批,此处业务为经理职位(manage)的人都可以执行审批。(此处有认领业务此处不描述)
此处总经理/董事长审批,如果大于 20 天需要董事长审批,如果小于 20 天总经理审批。
4.为什么选择 flowable
在技术选择上,flowable 较 activiti 更加新,功能更加完善。以用新不用旧的原则,建议使用 flowable。但是相比于 activiti 来说,他的网上文档非常少。入门也更加困难。
当然可以自己开发审批流系统,设计提交人与审批人字段,通过 sql 查询可以完成。这种是最费时费力的方法,同时在功能上与开源架构完全没有可比性。而且开源的 flowable/activiti 已经形成了自己的体系,当与客户侃大山时,更加凸显系统的专业
。
5.通用的业务流程
标准的审批流系统都有一套标准化的业务流程下文,介绍如何操作审批流系统。
1.整体流程
业务流程主要分以下步骤:
一般在系统中的模块名如下,请各自对应。
这里的任务管理可以查看到一个流程每个审批节点的具体信息。非必要业务。
1.编辑流程
这部分主要是制作流程。
1.自定义表单
在申请人进行审批时,需要填写申请的项目和申请数据。如请假审批需要填写请假时间和请假原因。所以这个表单我们希望可以定制。
2.编辑流程模型
也就是使用 BPMN 绘制流程图,在图中会指定该审批流程的表单,下一审批节点人员与进入流程的流转条件。
当然也可以导入流程图。同时可以指定申请人在申请时需要填写的表单。(审批人如果需要添加审批表单也可以在此处配置)
3.部署成流程定义
流程模型在编辑/导入后,并不会生效。之后发布生成流程定义后才能够使用并发起审批。当然流程定义模块还有导出激活等功能。
2.执行审批
1.功能列表
当设计完流程之后,就可以发起审批和进行审批了,用户拥有以下功能。
2.功能解释
驳回:将审批重置发送给某节点,重新审批。
转办:A 转给其 B 审批,B 审批后,进入下一节点。
委派:A 转给其 B 审批,B 审批后,转给 A,A 审批后进入下一节点。
3.查询流程实例与任务
根据上图可见,当发起审批后,就会生成流程实例了。流程实例和任务管理就可以查看到已经发起的审批了。
每一套审批信息生成一条流程实例信息。
一条流程实例有多个审批节点(流程图中已画),每一个审批节点是一条任务管理信息。
请注意流程定义和流程实例概念。
6.如何开发
flowable 其实很简单,但是因为市面上的资料比较少,说明白的更加的少,所以该技术栈流通的比较困难。
flowable 为我们提供了 47 张表和 7 个常用 api。
1.提供的表
Flowable 的所有数据库表都以 ACT_开头。第二部分是说明表用途的两字符标示符。服务 API 的命名也大略符合这个规则。
ACT_RE_*: 'RE’代表 repository。带有这个前缀的表包含“静态”信息,例如流程定义与流程资源(图片、规则等)。
ACT_RU_*: 'RU’代表 runtime。这些表存储运行时信息,例如流程实例(process instance)、用户任务(user task)、变量(variable)、作业(job)等。Flowable 只在流程实例运行中保存运行时数据,并在流程实例结束时删除记录。这样保证运行时表小和快。
ACT_HI_*: 'HI’代表 history。这些表存储历史数据,例如已完成的流程实例、变量、任务等。
ACT_GE_*: 通用数据。在多处使用。
ACT_ID_*: 表示组织信息,如用户,用户组,等等。(很少使用)
FLW_*.未找到官方描述,且表中都为空。
1.ACT_GE_*
ACT_GE_BYTEARRAY:保存流程的 bpmn 的 xml 以及流程的 Image 缩略图等信息 ACT_GE_PROPERTY:Flowable 相关的基本信息。比如各个 module 使用的版本信息。
2.ACT_RE_*
ACT_RE_DEPLOYMENT: 部署对象,存储流程名称 ACT_RE_MODEL:基于流程的模型信息 ACT_RE_PROCDEF:流程定义表
3.ACT_RU_*
ACT_RU_ACTINST:运行中实例的活动表 ACT_RU_DEADLETTER_JOB:当 JOB 执行很多次都无法执行,就会被记录在此表 ACT_RU_ENTITYLINK:还没使用到。后续更新此表。ACT_RU_EVENT_SUBSCR:运行时的事件 ACT_RU_EXECUTION:运行的实例表 ACT_RU_HISTORY_JOB; 运行中的定时任务历史表 ACT_RU_IDENTITYLINK: 当前任务执行人的信息 ACT_RU_JOB:运行中的异步任务 ACT_RU_SUSPENDED_JOB:暂停的任务表。如果一个异步任务在运行中,被暂停。就会记录在词表 ACT_RU_TASK:运行中的正常节点任务 ACT_RU_TIMER_JOB:定时作业表 ACT_RU_VARIABLE:运行中的流程实例变量
4.ACT_ID_*
ACT_ID_BYTEARRAY:ACT_ID_GROUP:用户组信息 ACT_ID_INFO:用户详情 ACT_ID_MEMBERSHIP:用户组和用户的关系 ACT_ID_PRIV:权限 ACT_ID_PRIV_MAPPING:用户组和权限之间的关系 ACT_ID_PROPERTY:用户或者用户组属性拓展表 ACT_ID_TOKEN:登录相关日志 ACT_ID_USER:用户
5.ACT_HI_*
ACT_HI_ACTINST: 流程实例历史 ACT_HI_ATTACHMENT:实例的历史附件,几乎不会使用,会加大数据库很大的一个 loadingACT_HI_COMMENT:实例的历史备注 ACT_HI_DETAIL:实例流程详细信息 ACT_HI_IDENTITYLINK: 实例节点中,如果指定了目标人,产生的历史 ACT_HI_PROCINST:流程实例历史 ACT_HI_TASKINST:流程实例的任务历史 ACT_HI_VARINST:流程实例的变量历史
6.FLW_*
FLW_CHANNEL_DEFINITION: 泳池管道定义表 FLW_EVENT_DEFINITION:事件定义 FLW_EVENT_DEPLOYMENT:事件必输 FLW_EVENT_RESOURCE:事件所需资源 FLW_EV_DATABASECHANGELOG:Liquibase 执行的记录 FLW_EV_DATABASECHANGELOGLOCK:Liquibase 执行锁 FLW_RU_BATCH:暂时未知 FLW_RU_BATCH_PART:暂时未知
2.提供的接口 api
flowable 提供了 7 个常见的 api,这些 api 就对应着上文的所有逻辑,所以只要掌握这些 api 就可以完成审批业务的开发了。
1.FormService
表单数据的管理。
2.RepositoryService
提供了在编辑和发布审批流程的 api。主要是模型管理和流程定义的业务 api。
3.RuntimeService
处理正在运行的流程。
4.HistoryService
在用户发起审批后,会生成流程实例。historyService 为处理流程实例的 api,但是其中包括了已经完成的和未完成的流程实例。
如果处理正在运行的流程实例,请使用 runtimeService。
5.TaskService
对流程实例的各个节点的审批处理。
6.ManagementService
主要是执行自定义命令。
在自定义的方法中可以使用以下方法获取 repositoryService。
也可以获取流程定义方法集合 。
7.IdentityService
用于身份信息获取和保存,这里主要是获取身份信息。
7.常见的特殊业务
1.会签业务
1.什么是会签
在政府项目中,恶心的需求很多很多,其中有这种情况:有一个审批节点的审批人不确定(不能用相容网关),而且流转条件是超过一半人/三分之一(条件不确定)同意就可以进入下一个审批节点,那么这种情况就叫做会签。
2.如何设计会签
1.设置会签并行/串行流
在如下图,一个是并行流的会签,一个是串行流的会签,顾名思义。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gr5r7K7U-1632707899705)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7bdfea5a1b2948749b21aefb0bc5d1a2~tplv-k3u1fbpfcp-watermark.image)]
2.配置多实例
多实例就像是 java 的 foreach 循环,将集合循环,每一条数据叫做元素变量,并起一个别名。循环基数是循环 userList 的次数。
3.跳出会签
怎么跳出会签呢,flowable 提供了一波参数,这几个参数可以怎么做算数运算。图中条件为同意人数大于 1(2 人)即可进入下一节点。
nrOfInstances 该会签环节中总共有多少个实例\
nrOfActiveInstances 当前活动的实例的数量,即还没有 完成的实例数量。\
nrOfCompletedInstances 已经完成的实例的数量
4.设置会签审批人
需要配置执行人。且执行人${}
中添加的值为上文元素变量
的值。
5.后台设置
需要提供给上文配置的类,提供一个 list 数组作为参与会签的用户。
注意:返回值需要使用 List<String>,同时本文处写死,当然可以从表中取出,迭代比较简单。
2.发送邮件
当然也可以发送邮件,只需要在后台配置即可。
3.指定下一审批人
如何在审批完成后可以自由的指定下一审批人。
1.设置表单
新增下一审批人输入框。
2.编辑流程定义
在执行人处 ${person},内容为表单中字段值名称。
在审批时填写该值,即可实现。
版权声明: 本文为 InfoQ 作者【小黄鸡1992】的原创文章。
原文链接:【http://xie.infoq.cn/article/446fbaeb20d269b544aedb847】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论