動手實現了一下activiti下實現中國特色的逐級審批。
public class humanservice
else if("gonzo".equals(user))
else if("fozzie".equals(user))
else}}
新建乙個流程,有兩個人工任務:員工提交乙個休假請求,老闆逐級審批。有乙個流程變數叫做currentoperator, 用來存放當前操作人;在流程開始節點的表單上我定義了乙個field對映到currentoperator(這樣做只是為了圖省事,沒有其他目的)![](https://pic.w3help.cc/f62/0bd6bca23a44e30a119a23ea4aae2.jpeg)
使用者提交請求的任務上定義兩個表單字段,分別表示請假天數和原因,當然他們也和同名的流程變數對應;同時我給該節點分配的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) }}
所以綜上,在流程系統提供一定的基礎設施(如humanservice和表單引擎)的情況下, 可以不編寫任何**而配置乙個逐級審批模型出來。kermit has job to do
gonzo has job to do
fozzie has job to do
john has job to do
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...