为了区别同一个流程定义下的每个流程实例,需要再添加一个业务标识。好比请假的流程都是一样的(即请假的流程定义是一样的),但是又不是只有一个人会请假,所以为了区分是哪个人请的假,需要再添加一个业务标识。
```java
/**
* 启动流程时,添加业务标识
*/
@Test
public void addBusinessKey() {
//1、获取流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2、获取RuntimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
//3、启动流程的过程中,添加businesskey
//第一个参数:流程定义的key
//第二个参数:业务标识
ProcessInstance instance = runtimeService.
startProcessInstanceByKey("myEvection", "1001");
//4、输出
System.out.println("businessKey==" + instance.getBusinessKey()); //1001
}
```
执行上面的程序就会在表`act_ru_execution`插入业务标识字段。
![](https://img.kancloud.cn/54/61/546119ec4e52fccb677a017e368c45b9_1344x174.png)
当启动流程后将会调用如下几张表。
```sql
#流程实例执行表,记录当前流程实例的执行情况
#流程实例执行,如果当前只有一个分支时,一个流程实例只有一条记录且执行表的主键id和流程实例id相同,
#如果当前有多个分支正在运行则该执行表中有多条记录,存在执行表的主键和流程实例id不相同的记录。
#即不论当前有几个分支总会有一条记录的执行表的主键和流程实例id相同
#一个流程实例运行完成,此表中与流程实例相关的记录被删除。
mysql> select * from act_ru_execution where business_key_="1001";
+-------+------+---------------+---------------+------------+---------------...
| ID_ | REV_ | PROC_INST_ID_ | BUSINESS_KEY_ | PARENT_ID_ | PROC_DEF_I ...
+-------+------+---------------+---------------+------------+---------------...
| 30001 | 1 | 30001 | 1001 | NULL | myEvection:1:17504 | ...
+-------+------+---------------+---------------+------------+---------------...
#任务执行表,记录当前执行的任务
#启动流程实例,流程当前执行到第一个任务结点,此表会插入一条记录表示当前任务的执行情况,如果任务完成则记录删除。
mysql> select * from act_ru_task;
+-------+------+---------------+---------------+--------------------+--------------+-----------------+--------------+---------------+...
| ID_ | REV_ | EXECUTION_ID_ | PROC_INST_ID_ | PROC_DEF_ID_ | NAME_ | PARENT_TASK_ID_ | DESCRIPTION_ | TASK_DEF_K ...
+-------+------+---------------+---------------+--------------------+--------------+-----------------+--------------+---------------+...
| 22502 | 1 | 20002 | 20001 | myEvection:1:17504 | 部门经理审批 | NULL | NULL | _5 | NULL | 李四 | ...
| 27502 | 1 | 25002 | 25001 | myEvection:1:17504 | 部门经理审批 | NULL | NULL | _5 | NULL | 李四 | ...
| 30005 | 1 | 30002 | 30001 | myEvection:1:17504 | 创建出差申请 | NULL | NULL | _3 | NULL | 张三 | ...
+-------+------+---------------+---------------+--------------------+--------------+-----------------+--------------+---------------+...
#任务参与者,记录当前参与任务的用户或组
mysql> select * from act_ru_identitylink;
+-------+------+-----------+-------------+----------+----------+---------------+--------------+
| ID_ | REV_ | GROUP_ID_ | TYPE_ | USER_ID_ | TASK_ID_ | PROC_INST_ID_ | PROC_DEF_ID_ |
+-------+------+-----------+-------------+----------+----------+---------------+--------------+
| 20006 | 1 | NULL | participant | 张三 | NULL | 20001 | NULL |
| 22503 | 1 | NULL | participant | 李四 | NULL | 20001 | NULL |
| 25006 | 1 | NULL | participant | 张三 | NULL | 25001 | NULL |
| 27503 | 1 | NULL | participant | 李四 | NULL | 25001 | NULL |
| 30006 | 1 | NULL | participant | 张三 | NULL | 30001 | NULL |
+-------+------+-----------+-------------+----------+----------+---------------+--------------+
#流程实例历史表
#流程实例启动,会在此表插入一条记录,流程实例运行完成记录也不会删除。
mysql> select * from act_hi_procinst; ...
+-------+---------------+---------------+--------------------+---------------------+-----------+-----------+----------------+ ...
| ID_ | PROC_INST_ID_ | BUSINESS_KEY_ | PROC_DEF_ID_ | START_TIME_ | END_TIME_ | DURATION_ | START_USER_I ...
+-------+---------------+---------------+--------------------+---------------------+-----------+-----------+----------------+ ...
| 20001 | 20001 | NULL | myEvection:1:17504 | 2021-10-09 17:00:46 | NULL | NULL | NULL | _2 ...
| 25001 | 25001 | NULL | myEvection:1:17504 | 2021-10-09 17:11:55 | NULL | NULL | NULL | _2 ...
| 30001 | 30001 | 1001 | myEvection:1:17504 | 2021-10-09 17:36:17 | NULL | NULL | NULL | _2 |...
+-------+---------------+---------------+--------------------+---------------------+-----------+-----------+ ...
#任务历史表,记录所有任务
#开始一个任务,不仅在act_ru_task表插入记录,也会在历史任务表插入一条记录,任务历史表的主键就是任务id,任务完成此表记录不删除。
mysql> select * from act_hi_taskinst ;
+-------+--------------------+---------------+---------------+---------------+--------------+-----------------+--------------+--...
| ID_ | PROC_DEF_ID_ | TASK_DEF_KEY_ | PROC_INST_ID_ | EXECUTION_ID_ | NAME_ | PARENT_TASK_ID_ | DESCRIPTION...
+-------+--------------------+---------------+---------------+---------------+--------------+-----------------+--------------+--...
| 20005 | myEvection:1:17504 | _3 | 20001 | 20002 | 创建出差申请 | NULL | NULL | NULL | 张三 | ...
| 22502 | myEvection:1:17504 | _5 | 20001 | 20002 | 部门经理审批 | NULL | NULL | NULL | 李四 | ...
| 25005 | myEvection:1:17504 | _3 | 25001 | 25002 | 创建出差申请 | NULL | NULL | NULL | 张三 | ...
| 27502 | myEvection:1:17504 | _5 | 25001 | 25002 | 部门经理审批 | NULL | NULL | NULL | 李四 | ...
| 30005 | myEvection:1:17504 | _3 | 30001 | 30002 | 创建出差申请 | NULL | NULL | NULL | 张三 | ...
+-------+--------------------+---------------+---------------+---------------+--------------+-----------------+--------------+--...
#活动历史表,记录所有活动
#活动包括任务,所以此表中不仅记录了任务,还记录了流程执行过程的其它活动,比如开始事件、结束事件。
mysql> select * from act_hi_actinst;
+-------+--------------------+---------------+---------------+---------+----------+--------------------+--------------+--------...
| ID_ | PROC_DEF_ID_ | PROC_INST_ID_ | EXECUTION_ID_ | ACT_ID_ | TASK_ID_ | CALL_PROC_INST_ID_ | ACT_NAME_ | AC. ..
+-------+--------------------+---------------+---------------+---------+----------+--------------------+--------------+--------...
| 20003 | myEvection:1:17504 | 20001 | 20002 | _2 | NULL | NULL | StartEvent | startEvent | NULL | . ..
| 20004 | myEvection:1:17504 | 20001 | 20002 | _3 | 20005 | NULL | 创建出差申请 | userTask | 张三 | ...
| 22501 | myEvection:1:17504 | 20001 | 20002 | _5 | 22502 | NULL | 部门经理审批 | userTask | 李四 | ...
| 25003 | myEvection:1:17504 | 25001 | 25002 | _2 | NULL | NULL | StartEvent | startEvent | NULL | . ..
| 25004 | myEvection:1:17504 | 25001 | 25002 | _3 | 25005 | NULL | 创建出差申请 | userTask | 张三 | ...
| 27501 | myEvection:1:17504 | 25001 | 25002 | _5 | 27502 | NULL | 部门经理审批 | userTask | 李四 | ...
| 30003 | myEvection:1:17504 | 30001 | 30002 | _2 | NULL | NULL | StartEvent | startEvent | NULL | . ..
| 30004 | myEvection:1:17504 | 30001 | 30002 | _3 | 30005 | NULL | 创建出差申请 | userTask | 张三 | ...
+-------+--------------------+---------------+---------------+---------+----------+--------------------+--------------+--------...
```
- Activiti流程引擎
- 工作流介绍
- Activiti是什么
- Activiti流程处理步骤
- Activiti环境搭建
- 搭建步骤
- 表结构介绍
- ActivitiAPI结构
- 认识流程符号
- 流程设计器的使用
- 流程处理步骤
- 乱码问题
- 流程实例
- 流程实例是什么
- 业务标识
- 查询流程实例
- 挂起/激活流程实例
- 个人任务
- 分配任务负责人
- 查询待办任务
- 办理权限
- 流程变量
- 流程变量类型
- 流程变量作用域
- 使用流程变量控制流程
- 组任务
- 设置任务候选人
- 组任务办理流程
- 网关
- 4种网关类型
- 排他网关
- 并行网关
- 包含网关
- 事件网关
- Spring整合Activiti
- SpringBoot整合Activiti
- Flowable流程引擎
- Flowable是什么
- Flowable与Activiti
- Flowable环境搭建
- FlowableAPI
- 流程引擎API与服务
- 流程处理步骤
- 流程部署
- 流程部署方式
- 流程定义版本
- 删除已部署的流程
- 下载资源
- 流程实例
- 什么是流程实例
- 业务标识
- 查询流程实例
- 挂起/激活流程实例
- 分配任务负责人
- 固定分配
- UEL表达式分配
- 监听器分配
- 办理权限
- 流程变量
- 流程变量类型
- 流程变量作用域
- 流程变量控制流程
- 组任务
- 设置任务候选人
- 组任务办理流程
- 网关
- 排他网关
- 并行网关
- 包含网关
- 事件网关
- 历史查询
- 查询历史
- Spring整合Flowable
- 配置文件整合
- 配置类整合
- SpringBoot整合Flowable