工作流管理系統開發之二十一 巧用流程軌跡表主鍵ID

      在工作流系統中,業務流程按流程引擎定義的模型規則,定義成流程的一個一個節點。當流程實例運行時,流轉到流程的各個節點,通過執行動作之類的操作提交關聯的業務表單,導向流程的下一個節點,同時修改流程實例的狀態,達到流程的流轉。流程實例每流轉一次,都會將當前節點的信息寫入一個歷史軌跡表,同時將下一節點的信息寫入當前步驟表。當流程實例流轉多次後,根據歷史軌跡表的記錄,就能追蹤到此流程實例的實際運行軌跡。

      工作流系統的數據主要分爲流程數據和業務數據,流程的歷史軌跡表僅僅記錄的是流程的數據,與業務數據業務表單無關,甚至是流程的上下文數據也記錄不了。當流程實例在追蹤歷史軌跡的時候,作爲監控使用,或者是歷史步驟的再現,經常需要將此軌跡節點上關聯的業務表單重新裝入,查看監控當時的流程狀態和業務狀態。但流程的軌跡表僅記錄的是流程的節點步驟信息。業務表的信息是不記錄的,業務表記錄的再現,只能通過流程數據和業務數據的關聯去查找。查找出的業務記錄只有一個最後的狀態,如果流程的多個節點對此業務數據做過修改,那麼就很難在各個軌跡節點中還原出當時的狀態。可能可以通過類似同一張單據在流程的多節點中流轉的方式來達到,但如果多節點寫了同一個字段的信息,就根本區別不出是流程的那個節點做的修改了,因爲業務表沒有記錄軌跡。
   
      總結一下,實際上流程系統中的歷史軌跡表,只記錄的是流程實例運行的各節點的軌跡,沒有記錄業務數據的軌跡。
   
      當流程監控的時候要求對業務表的記錄也做出精確的監控,那肯定需要建立業務表的軌跡表(或叫日誌表),此業務軌跡表當屬於業務系統的表,不屬於工作流系統表。並且在業務軌跡表中增加一個 流程軌跡id字段 ,用於和流程的軌跡相關聯。當流程流轉時,產生流程的歷史軌跡,同時也產生業務軌跡表的記錄,並將流程的歷史軌跡表記錄id寫入業務軌跡表中。當流程監控時,顯示流程歷史軌跡的同時,也可以通過軌跡表的id字段 關聯出業務軌跡表中的業務記錄,再現出當時的業務數據狀態。此爲流程軌跡表主鍵ID的一種用法。
   
      流程軌跡表的主鍵id,是流程實例運行軌跡的一個唯一標誌,與流程節點的id不一樣,流程節點的id是流程定義節點中的唯一標識,流程實例運行時,同一個節點,通過回退,循環,主動取回等可能會多次運行。但軌跡表的主鍵id則肯定是唯一的,流程實例的每次流轉都會生成軌跡表的新記錄。當流程運行到節點上,關聯的業務表單填寫的是多條業務記錄時,如主從表的錄入,從表在流程的不同節點上多次填寫。當流程監控時,需要再現出每個節點關聯的從表業務記錄時,就定位不了業務記錄。如果在業務從表中增加一個 流程軌跡主鍵id 字段,在流程節點提交的時候,將此軌跡id寫入 業務從表中,就能將流程的軌跡和業務從表記錄關聯起來了。此處如果寫入業務從表的是流程節點id是不行的,流程回退,取回,一個節點重複執行時,就標識不了了。  此爲流程軌跡主鍵id的另一種用法。
   
       流程軌跡主鍵id 還有一種更爲巧妙的用法,作爲流程主動取回後,再次發送,流程下一節點是否可執行的判斷標誌。流程實例的每次執行操作之前將流程軌跡id傳遞到前臺,等待用戶執行操作。提交操作時,取道頁面傳遞回來的軌跡主鍵id,和流程軌跡表中當前步驟的軌跡id相比較,如果一致,則可以繼續操作,如果不同,則表示流程軌跡已經發生了變化,需要再次打開鏈接重新執行此節點的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章