Activiti6.0流程、任務、執行的定義及區別

一、流程實例,任務,執行對象相關表結構

  • 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:已經執行完的歷史任務信息
發佈了134 篇原創文章 · 獲贊 481 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章