Flowable入门指引
一、基本概念*
二、Flowable核心数据库表
三、集成绘制工作流插件
四、7大Service介绍
五、代码演示
六、总结与优化
一、基本概念*
工作流的重中之重就是先了解概念是什么?认清楚了三个概念,才能了解它的整个工作机制。(不懂请反复的读)
1.在Flowable术语中,我们将其称为一个流程定义(process definition)。一个流程定义可以启动多个流程实例(process instance)。流程定义可以看做是重复执行流程的蓝图。 在这个例子中,流程定义定义了请假的各个步骤,而一个流程实例对应某个雇员提出的一个请假申请。而请假的每个领导就是任务节点
换句话说,就是我们定义了这么一个请假流程(流程定义),所有人来请假,都得走这样的一个流程,但是每个人走的流程(流程实例)都不互相影响。所以就是一个流程定义可以启动多个流程实例。而每个流程实例走的节点就是一个任务,例如上图就有五个任务节点(包括开始节点和结束节点)
二、Flowable核心数据库表
| 数据表分类 | 描述 |
|---|---|
| ACT_GE_* | 通用数据表 |
| ACT_RE_* | 流程定义存储表 |
| ACT_ID_* | 身份信息表 |
| ACT_RU_* | 运行时数据库表 |
| ACT_HI_* | 历史数据库表 |
1.具体所有的核心表,可以参考这篇博客
2.而我个人认为主要数据库表是这几张,在我的项目中,也主要是这五张表在操作。
| 数据表分类 | 描述 | 用途 |
|---|---|---|
| ACT_RE_DEPLOYMENT | 流程部署表 | 主要用来查看部署了哪些流程定义 |
| ACT_RU_TASK | 用户任务表 | 用来查看现在流程实例走到哪个位置,在谁的手上 |
| ACT_HI_TASKINST | 历史任务表 | 用来查看整个流程实例的,做过了哪些任务,目前在哪 |
| ACT_HI_COMMENT | 评论表 | 用来完成任务或者退回的时候添加一些意见 |
| ACT_RU_EXECUTION | 流程实例与分支执行表 | 用来查看流程实例 |
三、集成绘制工作流插件
1.添加flowable插件(强烈推荐该方法),参考博客
ecplise安装flowable插件步骤:
Help ---- > Install New Software ---- > add, 然后添加的弹窗中输入以下信息:
Name: Flowable BPMN 2.0 designer
Location: http://flowable.org/designer/update/
添加完成后,点击File–>new---->other—>Flowable---->Flowable Diagram
出现该界面表示安装成功。
2.如何绘制一个简单流程呢?
首先使用startEvent作为开始
然后new一个任务出来
然后点击结束事件
添加下个节点处理人
绘制完成
3.如何运用绘制的流程图?
例如:我们刚刚绘制的图名字是test.bpmn
我们需要将其改名为test.bpmn20.xml,这个样子就可以了
然后将其丢到项目的resource底下。
再使用启动流程定义的代码启动流程实例。
调用接口后,数据库会出现一条流程定义
四、7大Service介绍
参考博客
RuntimeService:主要用来控制工作流的整体流动,例如启动流程实例
RepositoryService:查询部署和流程定义。
TaskService(最重要的Service): 一般用来提交任务或者其他操作。提交任务taskService.complete()。
RuntimeService:用来部署和查看流程实例runtimeService.startProcessInstanceById()。
HistoryService :查询各种历史数据
ManagementService:查询数据库表信息和表的元数据
五、代码演示
1.在上面中我们部署了一个流程定义
id为:4f3c2e6f-1ce3-11eb-bbb1-005056c00008
2.启动测试流程定义的一个实例(多次调用接口就会启动多个流程实例)
调用接口后,返回实例Id:7e9acc8e-1ce3-11eb-a136-005056c00008
所以此时act_hi_taskinst、act_ru_task数据库各自出现一条数据。
同时获得了act_ru_task的Id:7ea04ad4-1ce3-11eb-a136-005056c00008
3.完成任务
当你知道了act_ru_task表里ProcessInstanceId对应的Id,那么只需要传入下一个节点的处理人是谁就行了
可以看到数据库的act_hi_taskinst表已经变成了两条,一条是之前的,一条是目前节点的。而act_ru_task还是保持一条的记录,不过节点跳到了下一个节点
4.退回
因为项目原因不便展示,所以只给出退回的方法
主要方法:flowInstanceService.backService()
六、总结与优化
优化1:本人在处理工作流的时候,是通过Mybatis的****,生成了Flowable我需要的几张表,再维护这几张我需要表的信息,这也就是为什么我在前面认为只需要几张核心的表。
优化2:因为Flowable与业务并不能实际和贴合,所以就需要自己维护一些信息,例如我维护了act_hi_task里的REV_字段,作为标记流程走到哪一步,原来REV_字段的作用为表示数据库表更新次数,对我来说作用不大,于是进行控制维护。除了REV_字段以外,还维护了退回标识等标记。
总结:
本人花了国庆8天的时间对Flowable进行上手,将近一个月才对Flowable有些自己的理解。如果想要入门,可以先学习activity两者差不多,可以先理解activity再上手flowable,因为activity作为老牌,资料视频相对较多,整体学习还是挺容易,就是得多花时间。
b站activity学习视频