為了區別同一個流程定義下的每個流程實例,需要再添加一個業務標識。好比請假的流程都是一樣的(即請假的流程定義是一樣的),但是又不是只有一個人會請假,所以為了區分是哪個人請的假,需要再添加一個業務標識。
```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`插入業務標識字段。

當啟動流程后將會調用如下幾張表。
```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