activiti5 工做流的回退功能

        activiti5 工做流 自己不提供回退,按網絡的說法,外國人的回退也是要在流程圖設計裏面畫出來的,惋惜在中國各類各樣的需求,確定是須要實現的。在實現回退的功能上看了網絡上面的方法,都是直接修改分支表的節點ID或者經過設置節點的下節點來實現回退和跳躍等需求,惋惜都只支持單線流程,一旦有並行,包容網關,外嵌,內嵌子流程就沒法成功了,還會出現不可控的錯誤。數據庫

        爲了實現這些狀況,只好本身實現一個CMD來作回退,先分析引擎是怎麼處理併發,子流程的。經過模擬,查看錶act_ru_execution,裏面的IS_ACTIVE_:是否存活,IS_CONCURRENT_:是否有併發,PARENT_ID_:父節點ID,SUPER_EXEC:父分支ID出如今併發分支,出如今調用外部子流程。(這裏提一點,activiti5的一個小問題,在多級併發的狀況下,記錄規則有所不一樣,從2級開始記錄的分支和1級的分支的規則不同,至於如何你們去看數據庫)api

        制定回退規則:先查找回退的節點,開始刪除分支,根據回退節點建立分支以及任務,對子流程等幾種特殊節點作處理。首先是查找回退的節點,在遍歷的時候要注意子流程的狀況,而後開始刪除分支,在刪除分支的時候注意多級併發的狀況(上面說到了),直接用遞歸刪除便可。(分支表總會保持一個主幹即ID與流程實例ID相同那個,這個保留住,在這個裏面作文章),最後開始建立分支,根據主幹以及發現的規則建立分支和任務便可。(其中在刪除任務的時候記得歷史表也保存一下)
網絡

在建立分支的狀況分析:併發

* 處理分支,分支就是流程的指針
* 狀況:
* 1.回退節點多個,聚合節點退回到並行
* 2.回退節點一個,同時有並行的運行節點,並行節點退回到聚合
* 3.內嵌子流程回退,分支要刪除
* 4.回退節點是子流程,建立分支
* 5.外嵌子流程回退,子流程要刪除,
* 6.回退節點是外嵌子流程
* 7.沒有分支的回退,最基本
spa

根據上面的規則如今是沒問題了,不過因爲在開發的時候沒有考慮到多實例的狀況,後續再加入進去,這裏只能先不回退多實例的狀況。還有在操做的過程當中,不必本身寫jdbc來直接操做數據庫,activiti的api很豐富,特別是在cmd模式裏面,不少manager可使用,徹底足夠你們用了。先說到這裏,代碼因爲是公司的項目我就不貼了。給你們一個思路。不必定是最好的,最少是中辦法。設計

相關文章
相關標籤/搜索