Activiti6實現自由跳轉

2021-09-13 22:55:23 字數 1888 閱讀 6748

工作快2年的小白,如有錯誤,懇請大家批評指點,這也是開始寫部落格的乙個初衷,能夠在分享互動、知識梳理中進步。

之前工作的專案使用activiti5進行企業流程系統開發,現在這份工作也開始需要流程開發,了解到activiti6扔掉了原來的pvm,直接針對bpmn進行處理,效能有了一定的提公升;也有看到flowable6,雖說是activiti原班人馬出來的,但是實在太新了、用的人也少,小白不敢輕易下手,於是選擇了activiti6。說了好多廢話。。正題正題

最為安全可靠,不修改activiti自身執行和流程定義物件,但是對於中國式流程的功能需求(駁回、回退等),經常是要求在沒有連線的情況下完成跳轉,靈活性不夠。

activiti5中實現,文中第二種

activiti6中實現

這種方法可以實現動態跳轉,不需要修改activiti自身執行,但是會動態修改系統中的流程定義快取物件。理論上這會出現乙個多執行緒下,全域性變數不安全的問題。單個activiti流程引擎中,流程定義快取物件是被所有執行緒共用的,當乙個應用伺服器同時收到兩個不同流程例項、同個流程定義、同個環節的任務提交請求。a要求駁回,所以該執行緒動態修改了流程定義;與此同時,b要求正常流轉,但是執行過程中,依據的流程定義已被修改,可能導致b也走向了駁回。

activiti5中實現

activiti5中實現,文中第一種

這種方法即可以實現動態跳轉,又沒有動態修改流程定義帶來的不安全問題,而activiti6中因為pvm下的包都刪了,執行計畫的**也進行了改造,原來的方法就不可用了。沒找到相關介紹,自己根據原先的思路,學習activiti6原始碼,找到了實現的方法,下面提供**。

//跳轉方法

public void jump(string taskid)

------------------

//刪除當前執行時任務命令,並返回當前任務的執行物件id

//這裡繼承了needsactivetaskcmd,主要時很多跳轉業務場景下,要求不能時掛起任務。可以直接繼承command即可

public class deletetaskcmd extends needsactivetaskcmd

public string execute(commandcontext commandcontext, taskentity currenttask)

public string getsuspendedtaskexception()

}------------------

//根據提供節點和執行物件id,進行跳轉命令

public class setflownodeandgocmd implements command

public void execute(commandcontext commandcontext)

//隨便選一條連線來執行,時當前執行計畫為,從連線流轉到目標節點,實現跳轉

executionentity executionentity = commandcontext.getexecutionentitymanager().findbyid(executionid);

executionentity.setcurrentflowelement(flows.get(0));

commandcontext.getagenda().plantakeoutgoingsequenceflowsoperation(executionentity, true);

return null;

}}

以上就是對activiti6實現自由跳轉的介紹。後面會再繼續介紹

即處理人小王完成環節a的任務(id=6000)後,流程走到下一環節b生成任務(id=6004),任務(id=6004)處理人小張審核不通過執行駁回,流程流轉回環節a,環節a重新生成一條id=6000的待處理人為小王的任務。

包括字型配置、自定義全域性事件監聽、流程定義自動部署開關配置

activiti6 發布流程)

在講發布流程之前,我先普及一下activiti6的七大介面 repositoryservice 提供一系列管理流程部署和流程定義的api。runtimeservice 在流程執行時對流程例項進行管理與控制。historyservice 對流程的歷史資料進行操作,包括查詢 刪除這些歷史資料。ident...

activiti6 獲取下一節點 (持續更新)

這種方式是通過當前節點與當前節點之後的節點中間的連線物件 sequenceflow 類 中的outgoingflows屬性 標識輸出的物件 之後對輸出的物件進行判斷 判斷其是否是排他閘道器 exclusivegateway 如果是排他閘道器 再通過自己程式的邏輯處理來判斷下一節點是哪乙個節點。每行 ...

在Activiti 5 4中實現會簽

最近正在使用activiti5.4實現系統中的流程,在發文流程中有會簽,研究了兩天終於搞定了 1 會簽節點策略配置 2 流程定義檔案中會簽節點的配置 3 countersigntasklistener package com.flowcenter.listener.task import org.a...