Activiti或JBPM工作流的流程的回退。

2021-09-02 09:20:19 字數 1288 閱讀 4703

需求:

流程的回退是乙個複雜的計算,特別是在中國式的流程裡,現實中的流程則相對簡單,如我把乙個審批檔案提交出去後,若由兩個人(張

三、李四)同時處理,若張三或李四需要把檔案退回來,檔案直接打回到發起人我這裡,這樣張三或李四手上不再存在審批檔案,但對於jbpm或activiti的流程回退則做不到這麼簡單。

但原則上我們要符合這種現實的要求:流程由誰提交過來,則退回給誰。

為了弄清這個關係,我們以乙個稍為複雜一點activiti流程為例。

以上流程包括了多種流程節點,如分支,並行節點,多例項任務,子流程。流程執行過程中我們記錄其任務完成的每個一步,然後歸納其回退的演算法實現。其中,a為多例項任務,我們在後台指定了其兩個執行使用者,我們啟動流程,然後記錄每一步執行的情況。

流程產生後,產生任務如:

當a的兩個例項任務完成後,將會產生後續的任務,即產生b、c、e任務,在這三任務中,若回退的話,均是回退至a,並且是由a原來的執行人員來處理。由於a是多例項任務,其執行的任務個數為動態,若當時執行數為2(並且為張

三、李四)兩人處理,則回退後,也是回到這兩個人那裡處理。如下所示:

而另外,e回退時,也需要b、c的任務刪除(在某種情況下也可能不刪除),現實中相當於我把任務完成後,同時提交給三個人去處理,其中乙個人回退,不能把另乙個任務的工作也回退回來處理。

在b點上回退,c需要銷毀,e也存在的話,也不合理,因為在a再往下執行時,又會重新產生b、c、e,因此,為了減少複雜度,需要全部刪除b、c、e,回退至a。

當e往下執行時,會產生f或g任務,在這裡我們設定條件讓他產生f任務,如:

若f回退,則應該產生e任務,b、c則正常執行,繼續往下執行後,將會產生i任務,再者是j任務。若在i任務回退,則應該回退至f。

同理,若b與c執行完成後,將會產生d。若我們記錄任務的產生順序,將比較容易實現任務的回退,由於jbpm4或activiti5均不記錄這種操作,所以要實現回退均比較困難。

在此我們用乙個有效的資料結構記錄所有的任務產生的順序,如下所示:

有了這樣的乙個資料結構,記錄了每個任務節點的產生順序,我們在任何乙個節點上,都能有效回退至上一任務節點,並且包括自由跳轉的方式,如在i節點,若我們回退至e,就把f節點從這個記錄順序中去掉,然後產生e任務出來。

這裡還有一些問題尚沒有得到有效解決:

1.如d任務回退時,應該產生b與c任務的還是僅需要產生其中乙個,系統中是提供人工選擇的方式給他還是自動產生其中乙個?

2.f回退至e時,要不要也產生b、c任務?

3.任務回退時,需要找回原來的執行人

4.這個任務堆疊執行記錄在什麼時候往裡放資料,即產生這個執行樹

演示請看:

Jbpm4或Activiti5的流程任務分發與彙總

在企業或事業單位,經常需要把乙個任務分派給多條線去處理,每條線可以由乙個或多個步驟構成,多條線的任務完成後需要再彙總一起於某個任務上。最常見的應用例子就是總經理把乙個任務分發下去給多個部門領導,每個部門領導再分發給多個主管,每個主管再分發給多個人處理,然後再彙總給每個主管,每個主管再彙總給部門領導,...

JBPM工作流 一

好了,吐槽了一番覺得心情頓時開朗了,那麼,接下來就進入正題把 jbpm,學技術首先知道這個技術是做什麼用的,否則學起來你就會沒頭沒腦了.這裡,個人的解釋不是很全面,大家可以在網上搜尋一下.知道個大概意思就行了 那麼,如何使用jbpm進行開發呢?首先,匯入相關的jbpm的jar包檔案,如果不知道匯入那...

Activiti工作流概述

一 概述 工作流 workflow 就是 業務過程的部分或整體在計算機應用環境下的自動化 它主要解決的是 使在多個參與者之間按照某種預定義的規則傳遞文件 資訊或任務的過程自動進行,從而實現某個預期的業務目標,或者促使此目標的實現 工作流管理系統 workflow management system,...