Activiti逐級審批

2021-08-27 09:13:24 字數 2065 閱讀 6972

動手實現了一下activiti下實現中國特色的逐級審批。

public class humanservice 

else if("gonzo".equals(user))

else if("fozzie".equals(user))

else}}

新建乙個流程,有兩個人工任務:員工提交乙個休假請求,老闆逐級審批。有乙個流程變數叫做currentoperator, 用來存放當前操作人;在流程開始節點的表單上我定義了乙個field對映到currentoperator(這樣做只是為了圖省事,沒有其他目的)

使用者提交請求的任務上定義兩個表單字段,分別表示請假天數和原因,當然他們也和同名的流程變數對應;同時我給該節點分配的assignee為kermit以方便測試;

在老闆審批節點上,設定assignee為表示式$。意義不用我多說;

審批節點定義乙個field用來接收當前操作人,並對映為流程變數currentoperator.

設定multi instance選項, sequential=true,因為逐級審批,所以需順序執行;loop cardinality=10, 為什麼設定這個呢?因為如果乙個節點需多次執行,則至少要設定執行次數或者遍歷物件collection.對於逐級審批來說,這兩個都不適合為固定量,因 為人事結構可能隨時變化;所以我耍了點小聰明,設定執行次數loop cardinality絕對大於可能的執行次數,同時設定結束條件completion condition=$, 即當找不到操作人的上級的時候就該結束了。

下面是測試用例:

public class testmultiinstance extends testcase 

// query gonzo's tasks;

tasks = taskservice.createtaskquery().taskassignee("gonzo").list();

for (task task : tasks)

// query fozzie's tasks;

tasks = taskservice.createtaskquery().taskassignee("fozzie").list();

for (task task : tasks)

// query john's tasks;

tasks = taskservice.createtaskquery().taskassignee("john").list();

for (task task : tasks) }}

測試結果:

kermit has job to do

gonzo has job to do

fozzie has job to do

john has job to do

所以綜上,在流程系統提供一定的基礎設施(如humanservice和表單引擎)的情況下, 可以不編寫任何**而配置乙個逐級審批模型出來。

Activiti5 新增 查詢審批批註(審批意見)

activiti 工作流開發,23張表中,act hi commit 中,用於儲存流程審核的批註資訊 呼叫 taskserver.addcomment taskid 任務 id processinstanceid 流程例項 id message 批註資訊 test public void compl...

activiti 如何設定多個審批人(十五)

1 activiti 中有互斥閘道器 和 並行閘道器 在實際專案開發中,經常會出現一項功能,任意審批人審批都可以的情況 例如 在5院委外專案申請中,生產單位上報的申請,計畫經營處中任意一人審批,該申請就通過 同時設定多個審批人,此功能和設定單個審批人 稍有差異 具體實現方法是 在審批人的任務監聽介面...

Activiti獲取某個流程例項已經審批的節點記錄

已知businessid即eventid獲得對應的審批記錄 某個流程例項的節點資訊都是存放在act hi actinst表中 business key存放在act hi procinst中,得到historicprocessinstance後獲得對應的流程例項id。然後根據流程例項id獲得act h...