動手實現了一下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...