一、流程實例,任務,執行對象相關表結構
-
act_ru_execution 正在執行的執行對象表
-
act_hi_procinst 流程實例的歷史表
-
act_ru_task 正在執行的任務表,(只有userTask任務節點,纔會在此表中產生數據)
-
act_hi_taskinst 歷史任務表,(只有userTask任務節點,纔會在此表中產生數據)
-
act_hi_actinst 所有活動節點的歷史表
二、請假流程實例進行說明
2.1、BPMN流程圖
請假流程圖
2.2 BPMN代碼
<process id="leave" name="leave process" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<userTask id="usertask1" name="組長審批" activiti:assignee="組長"></userTask>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
<userTask id="usertask2" name="主管審批" activiti:assignee="主管"></userTask>
<sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow3" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>
</process>
2.3 運行流程進行說明
1 啓動流程
RuntimeService runtimeService = processEngine.getRuntimeService();
runtimeService.startProcessInstanceByKey("leave");
啓動流程之後 act_ru_execution、act_hi_procinst表中會各增加一條記錄
act_hi_procinst
act_ru_execution
從act_ru_execution中的ACT_ID_字段可以看出,當前執行節點在userTask1。
啓動流程的同時,流程流向第一個用戶任務節點,在act_ru_task、act_hi_taskinst各產生一條數據
act_ru_task
act_hi_taskinst
從act_hi_taskinst中END_TIME_字段可以看出,此時userTask1節點正在執行。
2 組長審批任務
String taskId ="2505";
taskService.complete(taskId);
當組長審批完userTask1任務之後,當前流程流轉到領導審批節點:
-
act_ru_task表數據變化
已經完成的userTask1任務節點數據被清除,新增一條userTask2節點數據 -
act_hi_taskinst表數據變化
已經完成的userTask1節點數據依然存在,其中END_TIME_字段爲此任務節點結束時間、並且新增一條userTask2任務記錄,其END_TIME_字段爲NULL,表示此任務節點還在運行 -
act_ru_execution表數據變化
由於當前流程進行了運轉,所以當前執行對象會更新當前流程執行了什麼節點之上
3 領導審批任務
String taskId ="5002";
taskService.complete(taskId);
在此流程圖中當領導進行審批之後,相當於走完了流程,也就意味着流程結束
-
act_ru_task表變化
同userTask1節點執行,當此任務節點執行結束之後就會從此表中刪除這條節點記錄 -
act_hi_taskinst表數據變化
更新此任務節點記錄,更新END_TIME_字段值爲任務節點結束時間
4 流程結束
-
act_ru_execution表數據變化
由於領導審批結束後,流程執行結束,也就是執行對象執行完畢,該條執行對象對應數據會被清除。 -
act_hi_procinst表數據變化
流程執行結束,更新流程實例結束時間act_hi_procinst.png
三、總結
- ProcessInstance流程實例
- 特指流程從開始到結束的那個最大的執行分支,一個執行的流程中,流程實例只有1個
- 代表流程定義的執行實例。一個流程實例包括了所有的運行節點
- 流程實例通常也可以叫做執行實例根節點
注意
(1)如果是單例流程,執行對象ID就是流程實例ID
(2)如果一個流程有分支和聚合,那麼執行對象ID和流程實例ID就不相同
(3)一個流程中,流程實例只有1個,執行對象可以存在多個。
- Execution 執行對象
- 啓動流程實例的時候會首先創建流程實例,然後創建執行實例
- 流程運轉的過程中永遠執行的是自己對應的執行實例
- 當所有的執行實例按照規則執行完畢之後,則實例隨之結束
- 流程按流程定義的規則執行一次的過程,就可以表示執行對象Execution
- 一個流程中,執行對象可以存在多個,但是流程實例只能是一個
對應表:
act_ru_execution: 正在執行的信息
act_hi_procinst:已經執行完的歷史流程實例信息
act_hi_actinst:存放歷史所有完成的活動
- Task任務 --- 執行到某任務環節時生成的任務信息。
對應的表:
act_ru_task:正在執行的任務信息
act_hi_taskinst:已經執行完的歷史任務信息