Activiti工作流之个人任务分配模式
1.固定分配
在進(jìn)行業(yè)務(wù)流程建模時指定固定的任務(wù)負(fù)責(zé)人。
在 properties 視圖中,填寫 Assignee 項為任務(wù)負(fù)責(zé)人
?
由于固定分配方式,任務(wù)只管一步一步執(zhí)行任務(wù),執(zhí)行到每一個任務(wù)將按照 bpmn 的配置去分配任務(wù)負(fù)責(zé)人。
2.表達(dá)式分配
(1)UEL表達(dá)式
Activiti 使用 UEL 表達(dá)式,UEL 是 java EE6 規(guī)范的一部分,UEL(Unified Expression Language)即統(tǒng)一表達(dá)式語言,activiti 支持兩個 UEL 表達(dá)式:UEL-value 和 UEL-method。
UEL-value定義如下:
?
assignee這個變量是activiti的一個流程變量
?
holiday 也是 activiti 的一個流程變量。holiday.assignee 表示通過調(diào)用 user 的 getter 方法獲取值。
(2)使用流程變量分配任務(wù)
/*** 啟動流程實例,動態(tài)設(shè)置assignee*/ public class AssigneeUEL { ? ?public static void main(String[] args) {//1.得到ProcessEngine對象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); ?//2.得到RuntimeService對象RuntimeService runtimeService = processEngine.getRuntimeService(); ?//3.設(shè)置assignee的取值 ? 用戶可以在界面上設(shè)置流程的執(zhí)行人Map<String,Object> map = new HashMap<>();map.put("assignee0","張三豐");map.put("assignee1","張無忌");map.put("assignee2","金毛獅王"); ?//4.啟動流程實例,同時還要設(shè)置流程定義的assignee的值ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday3", map); ?//5.輸出System.out.println(processEngine.getName()); ?} }(3)注意事項
由于使用了表達(dá)式分配,必須保證在任務(wù)執(zhí)行過程表達(dá)式執(zhí)行成功,比如:
某個任務(wù)使用了表達(dá)式${order.price > 100 && order.price < 250},當(dāng)執(zhí)行該任務(wù)時必須保證 order 在流程變量中存在,否則 activiti 異常。
3.監(jiān)聽器分配
任務(wù)監(jiān)聽器是發(fā)生對應(yīng)的任務(wù)相關(guān)事件時執(zhí)行自定義 java 邏輯 或表達(dá)式。
任務(wù)相當(dāng)事件包括:
?
Create:任務(wù)創(chuàng)建后觸發(fā) Assignment:任務(wù)分配后觸發(fā) Delete:任務(wù)完成后觸發(fā) All:所有事件發(fā)生都觸發(fā)
定義任務(wù)監(jiān)聽類,且類必須實現(xiàn) org.activiti.engine.delegate.TaskListener 接口
public class MyTaskListener implements TaskListener { @Overridepublic void notify(DelegateTask delegateTask) { //這里指定任務(wù)負(fù)責(zé)人 delegateTask.setAssignee("張三");} ???????}?
總結(jié)
以上是生活随笔為你收集整理的Activiti工作流之个人任务分配模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Activiti工作流之业务标识和流程的
- 下一篇: Activiti工作流之流程变量