背景
- 我們可以先只是生成數據庫中的表,然後在進行流程定義的部署。
- 我們也可以不用先生成數據庫中的表,而直接進行流程定義的部署,也會生成表結構,並且會插入流程部署相關的必要的信息。
- 流程定義部署後,數據庫中的歷史相關的表也是沒有任何數據記錄信息的。需要等到task在動態地流轉,然後會相應地生成歷史數據記錄信息,最後我們才能查詢出具體的數據信息。
過程
-
我們再走一次這個流程
-
部署 假如我們的流程已經部署好了。參考與Springboot集成
-
實例化
說明:當把部署後的流程定義進行了實例化(創建流程實例),我們再次分析數據庫中的表結構及其變化。
act_ru_task表
我們可以分析出,當我們進行了流程實例化後,act_ru_task表會立即插入一條數據。從字段中說明,此表持有act_ru_execution表的引用,持有act_hi_procinst表的引用,持有act_ru_procedef表的引用。這樣我們就可以分析表之間的關聯關係。act_ru_execution表
我們可以看見,它插入了兩條數據。觀察到第一條的parent_id是null, 而第二條數據的parent_id是上一條的。由此,我們可以推斷出,一個是startEvent,一個是闡述zhangsan這個人需要填寫請假申請單。從start_time字段可以看出,這兩條數據幾乎是同一個時刻插入的。由此可以推測出,當流程實例中的最後一個人審批處理後,也就是同一時刻插入兩條數據,一條是自己執行的,一條是endEvent。其他應該是處理一次插入一條記錄。act_hi_procinst表
說明:我們可以看見畫線的兩個id是一樣的,因此PROC_INST_ID值來自ID值。其次,就是他只是插入一條數據。表明zhangsan這人的任務已經開始了,但是還沒有進行處理。act_ru_procdef表
這個表中的內容就是部署流程定義的時候,插入的一條。可以理解爲元數據的元數據。因爲元數據是bpmn和png,而act_ru_procdef其實就是描述元數據的。因此它爲元數據的元數據。act_hi_taskinst表
說明:流程實例初始化後,那麼就給記錄了一條歷史數據。我認爲雖然事件確實已經發生了,命名爲history相關,但是依然有一些業務對應關係。至少可以找到一件事情的整個發展過程。因此,不要輕視歷史記錄數據信息。act_hi_actinst表
這張表持有的引用是task_id,剛好來自act_hi_taskinst表中的id。這就是表之間的關聯關係。 -
zhansan處理任務
數據庫表的變化就直接去數據看就行了。核心就看act_hi_procinst表,act_hi_taskinst表,act_hi_actinst表,act_ru_task表(原來的那條刪除,新插入下一個任務記錄即可)。後面的分析過程就完全跟zhangsan處理任務一樣的。
-
-
有了歷史數據,這個時候查詢歷史表中的數據
控制檯打印
說明,設置查詢的參數,比如要查詢哪個具體的流程實例,然後根據流程實例ID進行查詢。分頁,排序,升序,降序都支持這樣的操作。 -
可以繼續讓wangwu完成任務處理,一樣可以查詢出關於流程後續的日誌記錄信息。
小結
- 想要測試歷史表中數據的查詢,需要準備歷史數據。準備過程就是:畫好流程圖,部署流程圖,實例化流程圖,處理任務即可。
- 通過從頭到尾都一次,可以分析表之間的關聯關係,加深對錶結構的一個熟悉程度。
- 怎麼來理解這些東西呢?想象成一個特殊的ORM工具,我準備業務數據給到Activiti,然後它去存儲,我們通過它提供的API進行查詢。