一、 七大接口
1.RepositoryService:提供一系列管理流程部署和流程定义的API。
2.RuntimeService:在流程运行时对流程实例进行管理与控制。
3.TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务等。
4.IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户及它们之间的关系。
5.ManagementService:提供对流程引擎进行管理和维护的服务。
6.HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。
7.FormService:表单服务。
二、28张表
1、act_ge_ 通用数据表,ge是general的缩写
2、act_hi_ 历史数据表,hi是history的缩写,对应HistoryService接口
3、act_id_ 身份数据表,id是identity的缩写,对应IdentityService接口
4、act_re_ 流程存储表,re是repository的缩写,对应RepositoryService接口,存储流程部署和流程定义等静态数据
5、act_ru_ 运行时数据表,ru是runtime的缩写,对应RuntimeService接口和TaskService接口,存储流程实例和用户任务等动态数据
三、 springboot的配置
#每次应用启动不检查Activiti数据表是否存在及版本号是否匹配,提升应用启动速度
spring.activiti.database-schema-update=false
databaseSchemaUpdate配置项可以设置流程引擎启动和关闭时数据库执行的策略。
false | false为默认值,设置为该值后,Activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配时,将在启动时抛出异常。 |
---|---|
true | 设置为该值后,Activiti会对数据库中所有的表进行更新,如果表不存在,则Activiti会自动创建。 |
create-drop | Activiti启动时,会执行数据库表的创建操作,在Activiti关闭时,执行数据库表的删除操作。 |
drop-create | Activiti启动时,执行数据库表的删除操作在Activiti关闭时,会执行数据库表的创建操作。 |
#保存历史数据级别设置为full最高级别,便于历史数据的追溯
spring.activiti.history-level=full
对于历史数据,保存到何种粒度,Activiti提供了history-level属性对其进行配置。history-level属性有点像log4j的日志输出级别,该属性有以下四个值
none | 不保存任何的历史数据,因此,在流程执行过程中,这是最高效的 |
---|---|
activity | 级别高于none,保存流程实例与流程行为,其他数据不保存 |
audit | 除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值 |
full | 保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等 |
四、Activiti6.0数据库设计与模型映射
参照 数据库模型设计
流程部署后,会操作如下表
参照 数据表的操作
act_re_deployment:插入部署对象,仅记录部署名及部署时间
act_ge_bytearray:插入BPMN的两个文件(.bpmn和.png),包括部署ID
act_re_procdef:插入流程定义信息,包括部署ID,流程的Key和Name,版本,两个资源文件
select * from act_re_procdef; --流程定义
select * from act_re_deployment; -- 流程部署
select * from act_ge_bytearray; -- 存储二进制文件
六 、启动流程
1.根据流程定义的Key启动
流程启动后,会创建“流程实例”和“任务”,而我们需要将我们的业务与流程实例进行绑定,这样才能确定我们的业务是使用的哪个流程实例。
流程定义可以理解为一个流程的模板,只能有一个;而流程实例是根据流程定义生成的一个具体的实例,可以有多个,一个审批业务对应一个流程实例。
流程启动后,会操作如下表
act_ru_execution:执行流程实例表,核心,启动后会生成一个流程实例和待执行的任务节点
act_ru_task:用户任务表,待执行的任务
act_ru_identitylink:用户身份关系表,存储待执行任务的用户关系
act_hi_taskinst:历史用户任务表,存储所有已执行或待执行的用户任务历史
act_hi_procinst:历史流程实例表,存储流程实例
act_hi_actinst:历史活动节点表,存储所有已执行的节点(各类节点)
act_hi_identitylink:历史用户身份关系表,历史用户任务的关系表
select * from act_ru_execution; --执行流程实例表
select * from act_ru_task; -- 用户任务表
select * from act_ru_identitylink; -- 用户身份关系表
select * from act_hi_taskinst; -- 历史用户任务表
select * from act_hi_procinst; -- 历史流程实例表
select * from act_hi_actinst; -- 历史活动节点表
select * from act_hi_identitylink; -- 历史用户身份关系表
七、执行任务
1.查看我的任务列表
2.执行任务
执行任务后,会自动根据条件跳转到下一任务
执行任务后,表数据发生的变化
act_ru_execution:待执行的用户任务节点换成下一个用户任务节点
act_ru_task:当前待执行任务转历史,插入下一个任务
act_ru_identitylink:插入下一任务的用户关系
act_hi_taskinst:修改当前用户任务的完成时间,并插入一用户任务
act_hi_actinst:修改当前活动节点的完成时间,并插入下一个活动节点
act_hi_identitylink:插入下一任务的用户关系
3.任务结束
执行完最后一个节点后,流程会自动结束。
流程结束后,表格数据变化。
act_ru_execution:删除当前流程实例的运行时执行数据
act_ru_task:删除当前流程实例的运行时任务数据
act_ru_identitylink:删除当前流程实例的运行时用户关系数据
可通过如下方式判断流程实例是否结束
判断是否为null
流程实例与流程对象的区别:
(1)如果是单例流程,执行对象ID就是流程实例ID
(2)如果一个流程有分支和聚合,那么执行对象ID和流程实例ID就不相同
(3)一个流程中,流程实例只有1个,执行对象可以存在多个
流程变量
- 流程变量涉及到的数据库表:
act_ru_variable:正在执行的流程变量表
act_hi_varinst:流程变量历史表
流程变量在工作流中扮演着一个非常重要的角色。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围**。流程变量的作用域范围是只对应一个流程实例**。也就是说各个流程实例的流程变量是不相互影响的。流程实例结束完成以后流程变量还保存在数据库中(存放到流程变量的历史表中)
设置流程变量
我们有两种服务可以设置流程变量,TaskService【任务服务】和RuntimeService【运行时服务】
场景:
- 在流程开始的时候设置流程变量
- 在完成某个任务的时候设置流程变量
- 使用TaskService设置服务
- 使用RuntimeService设置服务
作用:
- 传递业务参数
- 动态指定代理人【我们快速入门的例子是固定在流程定义图上写上代理人的】
- 指定连接【决定流程往哪边走】
流程变量支持类型
如果我们使用JavaBean来作为流程的变量,那么我们需要将JavaBean实现Serializable接口。Javabean类型设置获取流程变量,除了需要这个javabean实现了Serializable接口外,还要求流程变量对象的属性不能发生变化,否则抛出异常。解决方案,固定序列化ID