撤回的實現

2021-06-07 08:21:40 字數 1428 閱讀 5491

工作流系統的回退流,是指流程例項執行到一定階段後,可以主動的選擇回退到曾經執行過的任意軌跡上。回退流的發起方是當前步驟的任務執行人,選擇主動的回退,上面有一篇 回退流的實現,主要說明了回退流的實現過程。

工作流系統的撤回,是指流程例項執行了一定的軌跡後,上一步的任務執行人,選擇撤回剛剛提交的任務,使得流程再次流轉到此步驟。撤回的發起方是當前步驟的上一步任務的執行人,選擇主動撤回。

如上圖:紅色圈為當前執行到的軌跡,當上一步審核步驟的任務執行人,選擇主動撤回時,則將回退到審核步驟,再次執行。

撤回與回退的兩個區別:

1. 撤回只能撤回到當前步驟的上一步,不能跨多個步驟的撤回。回退是可以任意的回退。

2. 撤回的發起方是上一步的任務執行人。回退的發起方是當前步驟的可執行人。

撤回與回退的相同點:

1. 撤回和回退都是指回到曾經的軌跡;

2. 撤回和回退回到曾經執行的軌跡後,再次生成此軌跡的任務,並且輔助業務補償類,將環境或業務資料恢復成原來的,持久化變數可以忽略,臨時變數則需要重新賦值。

3. 撤回和回退都不是按照流程定義的正常軌跡流轉,需要配置有許可權的使用者去操作。

撤回功能的實現:

既然撤回與回退都是回到曾經執行的軌跡,只是發起方不一樣,所以在實現的時候,只需呼叫同一流程引擎的實現自由回退的api函式。

序列路由,實現撤回,查詢當前撤回步驟的下一步是否為當前步驟,是則強行關閉當前的任務,回退到此步驟,重新生成此步驟的任務。

條件路由,實現撤回,查詢當前撤回步驟的下一步是否為當前步驟,需要查詢有條件結果和無條件結果,有則實現回退。

分支路由,實現撤回,主要是查詢當前撤回步驟的下一步是否為當前步驟,需要略過分支節點來查詢,查詢到了,則實現回退。撤回的過程與回退流的實現過程一樣。

分支路由的撤回,分為在分支上面的撤回,與,分支到主幹上的撤回

分支--分支的撤回

如下圖:

在分支上面的撤回,則只撤回本分支的任務,其它分支不受影響。

分支--主幹的撤回

如下圖:

分支撤回到主幹,則將關閉所有的分支,撤回到主幹。如果分支上面巢狀分支,也將關閉所有的巢狀分支,回到主幹。

聚合路由,實現撤回,當乙個分支提交了,其它分支還未執行,即未滿足聚合的條件時,則實現不了撤回,因為當前步驟還在另乙個分支,還未執行到聚合後面的節點。當分支條件均滿足後,流轉到聚合節點後面的步驟,則可以實現撤回,撤回與回退一樣,只撤回此分支的軌跡,其它分支不撤回。

撤回與回退的功能均是不按流程定義的軌跡去任意執行,因此在操作的時候不能給所有的使用者都分配此功能。撤回與回退在流程引擎中的實現是一樣的,撤回只是對回退的乙個補充。

**:

微信防撤回的實現

首先宣告,這絕不是接鍋,只是因為防撤回的原作者 fkzhang 不更新了,而我又非常需要防撤回,某些開車群總是喜歡開後撤回,於是.看起來是不是覺得很亂並且看不出邏輯?沒關係,我們在這裡需要做的只是取出資料而已,一開始的邏輯很明確的告訴了我們,如果str變數的值是revokemsg,那麼就會走下面真實...

郵件撤回功能實現原來剖析

關於 郵件撤回 功能 企業郵箱全新推出 郵件撤回 功能,此功能直接面向企業郵箱使用者 qq郵箱使用者。對於已傳送的郵件,可以嘗試進行撤回。為什麼要推出撤回功能?性子急 有些郵件沒有想清楚就發了。發了以後後悔了,又收不回來 劉頭問下屬的miss.sale 這個 單是上個月的啊,發錯了?miss.sal...

Git 撤回的用法

在github中我們遇到的乙個很常見的需求是 如何將當前的 回退到之前的乙個版本,或者在回退到之前的版本後,如何再回到當前版本。假設乙個實際場景,假設我們的版本鏈是v1,v2,v3,v4,而我們當前工作目錄的版本是v4,我們想回退到v2,當回退到v2後,我們發現我回退錯了,向再次回退到v4,那這一些...