一、ACT_RU_EXECUTION 表(很多初學者迷惑的一張表,以為是流程實例表,其實它叫執行實例表):這個表和act_run_task表,一起控制了用戶任務的產生與完成等。
這個表是工作流程的核心表,這個表會體現主干與分支流程實例的概念,所以才有了執行實例這個叫法。
一般來講一個流程實例都有一條主線。如果流程為直線流程,那么流程實例在這個表中只有一條記錄對應。
但如果流程有會簽多實例時,以及並行網關時,這時候它就有流程實例和執行實例,一對多的關系,所以一定要理解流實例和執行實例的區別,
不要把它執行實例誤以為流程實例表,當在並行網關和會簽多實例時,它是會產生多個執行實例,剛創建時各個執行實例的IS_ACTIVE_這個字段的值都是為1,即激活狀態
當每完成一個執行實例時,它會把IS_ACTIVE設為0,非激活狀態,當所有執行實例完成后,它才會轉移到歷史,把這個多實例自動刪除。
另外當有子流程,子流程的實例是處於激活狀態,而主干流程的實例處於非激活狀態。
**ID_**:EXECUTION主鍵,這個主鍵有可能和PROC_INST_ID_相同,相同的情況表示這條記錄為主實例記錄。
**REV_**:表示數據庫表更新次數。
**PROC_INST_ID_**:一個流程實例不管有多少條分支實例,這個ID都是一致的。
**BUSINESS_KEY_**:這個為業務主鍵,主流程才會使用業務主鍵,另外這個業務主鍵字段在表中有唯一約束。
**PARENT_ID_**:這個記錄表示父實例ID,如上圖,同步節點會產生兩條執行記錄,這兩條記錄的父ID為主線的ID。
**PROC_DEF_ID_ :**流程定義ID
**SUPER_EXEC** : 這個如果存在表示這個實例記錄為一個外部子流程記錄,對應主流程的主鍵ID。
**ACT_ID_**:表示流程運行到的節點,如上圖主實例運行到ANDGateway1 節點。
兩個子實例運行到UserTask1,UserTask2節點。
**IS_ACTIVE_ : **是否活動流程實例,比如上圖,主流程為非活動實例,下面兩個為活動實例,如果UserTask2完成,那么這個值將變為0即非活動。
**IS_CONCURRENT_:**是否並發。上圖同步節點后為並發,如果是並發多實例也是為1。
**IS_SCOPE_**: 這個字段我跟蹤了一下不同的流程實例,如會簽,子流程,同步等情況,發現主實例的情況這個字段為1,子實例這個字段為0。
**TENANT_ID_ :** 這個字段表示租戶ID。可以應對多租戶的設計。
**IS_EVENT_SCOPE**: 沒有使用到事件的情況下,一般都為0。
**SUSPENSION_STATE_**: 這個表示是否暫停。
二、直線串行流程時,當前執行實例數據庫截圖:
1.啟動流程,即創建流程實例時,缺省為創建2條記錄,其中一條是開始事件的執行實例,這個一直存在,只到流程結束后才會自動刪除,另一條是普通的節點,所以它的流程實例id和PARENT_ID_字段即主干執行實例id字段值是一樣的,完成任務時,它會第二轉入歷史任務和歷史活動表中,如果創建的下一個節點還是普通節點,則它的第二條記錄會變化。
2.並行網關時:創建了2個分支,他們的parant_id和流程實例id(proc_inst_id字段)都一樣,缺省is_active都是1表示激活狀態,當完成其中一個分支節點時,is_active就會變成0,等候其它節點一起完成后,才會轉到歷史,到時刪除這些執行實例。並行網關的執行實例,它們的活動節點key是不一樣,act_run_task中的TASK_DEF_ID_字段值是不一樣(區別於會簽多實例,會簽多實例這個值是一樣的)。
完成了其中一條分支節點時,is_active變為了0。
3.會簽多實例時,如下是一個3人的會簽,它會產生5條記錄,一條是開始事件執行實例,一條是主干執行實例,只是它的狀態為非激活狀態,其它3個會簽執行實例的parant_id值均是主干執行實例的id值,其中一個人做完了,這時候的act_ru_execution數據還是3條,但完成任務的那個執行實例is_active由1變為0了,它也一樣等待其它2人會簽均完成了才會轉移到歷史,如果查看act_ru_task表,則會發現原來3條,變為2條了,其中一條它已經轉移到歷史用戶任務了。