工作流知识:
我们主要使用场景一个是OA,一个是ESB接口流程编排
一.选型:
activiti6.0
原因:1.比较稳定
2.集成springboot
3.相比于flowable缺少一些高级功能目前用不到,也更加复杂,但是activiti6可以升级为flowable,而且学习文档比较多
二.接口和表:
-
RepositoryService:提供一系列管理流程部署和流程定义的API。
-
RuntimeService:在流程运行时对流程实例进行管理与控制。
-
TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务等。
-
IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户及它们之间的关系。
-
ManagementService:提供对流程引擎进行管理和维护的服务。
-
HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。
-
FormService:表单服务。
-
act_ge_ 通用数据表,ge是general的缩写
-
act_hi_ 历史数据表,hi是history的缩写,对应HistoryService接口
-
act_id_ 身份数据表,id是identity的缩写,对应IdentityService接口
-
act_re_ 流程存储表,re是repository的缩写,对应RepositoryService接口,存储流程部署和流程定义等静态数据
-
act_ru_ 运行时数据表,ru是runtime的缩写,对应RuntimeService接口和TaskService接口,存储流程实例和用户任务等动态数据
三.一个简单的审批流程:
-
新增bpmn文件:手写bpmn代码,页面拖拽生成,自定义xml,导入后会新增act_re_mode表
-
自定义校验器:集成spring
-
部署流程(带上表单):通过代码引入xml部署,或者通过框架提供的接口部署(blob文件在act_ge_bytearray),部署后新增 act_re_procdef 流程定义表(可以指定租户ID做租户隔离,然后启动流程需要指定租户id);
-
启动流程:
0:
设置流程发起人:
indentityService
.setAuthenticatedUserId
(
)
;
-
新增act_ru_execution,act_ru_task;流程实例和执行实例(act_ru_execution) act_ru_execution表parentId为空就是流程实例,parentId不为空就是执行实例
-
act_ru_task也会相应的产生一条用户数据
-
查询个人任务: select distinct RES.* from act_ru_task
-
完成任务: 自定义权限校验,每一个执行节点执行完都是删除本节点,新增下一节点的任务,会更新act_ru_execution的ACT_ID为新的任务,当所有的任务都执行完act_ru_task,act_ru_execution都会删除
四.常用功能:
1.获取流程图(高亮节点)
2.流程变量(全局变量和局部变量act_ru_variable): 流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。流程实例结束完成以后流程变量还保存在数据库中
3.网关:排他网关(执行一个流程),
并行网关(执行多个流程 :分支和汇聚)
4.任务分配(个人任务和组任务 ):
4.1:定义bpmn文件时候直接分配 userId
4.2:使用全局流程变量${userId}
4.3:使用taskListener类。通过任务认领解决历史表没有assignerId的bug
5.监听器
6.通过processInstanceHelper扩展助手:记录日志,启动流程前权限校验等等(可以获得流程定义信息和实例名称等信息)
7.流程定义挂起,激活,定时器挂起
8.手动触发流程执行:通过runtimeService.triggre(执行实例ID);任务节点不能往下走会报错可以删除act_ru_task也可以跑
9.接受任务:通过trigger触发实例往下跑,因为接受任务的act_ru_task为空,可以用来做一些邮件通知
10.表单(动态,外置)引擎(formService):
10.1 定义表单:开始事件和任务上设置表单
10.2 获取表单信息
10.3 设置表单属性