(一)activiti流程圖用流程變量設置節點執行人
Activiti 使用 UEL 表達式, UEL 是 java EE6 規范的一部分, UEL(Unified Expression Language)即統一表達式語言, activiti 支持兩個 UEL 表達式: UEL-value 和 UEL-method。
<!--UEL-value: user1 是一個流程變量 --> <userTask activiti:assignee="${user1}" activiti:exclusive="true" id="_3" name="申請人提交申請"/> <!--UEL-method: user 是一個流程變量對象, user1.assignee 表示通過調用 user1 的 getter 方法獲取值 --> <userTask activiti:assignee="${user1.assignee}" activiti:exclusive="true" id="_3" name="申請人提交申請"/>
(二)方法調用賦值
${userService.findUserById(userId)}
userService 是 spring 容器的一個 bean, findUserById 是該 bean 的一個方法, userId 是流程變量。
(三)監聽器分配
任務監聽器是發生對應的任務相關事件時執行自定義java邏輯或表達式。
Create:任務創建后觸發
Assignment:任務分配后觸發
Delete:任務完成后觸發
All:所有事件發生都觸發
定義任務監聽類,且類必須實現org.activiti.engine.delegate.TaskListener接口
package com.activiti.example; import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.delegate.TaskListener; public class MyTaskListener implements TaskListener { @Override public void notify(DelegateTask delegateTask) { delegateTask.setAssignee("滅霸"); } }
(四)程序中動態指定任務實例執行人代碼
/** * 啟動一個實例,動態設置設置assignee */ @Test public void startProcessInstance() { //設置assignee,map鍵對應配置中的變量名 Map<String,Object> map=new HashMap<>(); map.put("user1","張三"); map.put("user2","李四"); map.put("user3","王五"); //啟動流程實例,同時還要設置流程定義的assignee的值 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess_1", map); }