標籤:style blog io ar color os 使用 sp java
user task 是最常用的任務,當流程到達使用者任務時,使用者任務將會被分配到特定使用者或者使用者組。
任務候選人是指有許可權對該任務進行操作的潛在使用者群體,這個群體有許可權去處理或完成該任務。
任務受理人指真正執行該任務的人,一個可以有多個任務候選人,但是只能有一個任務受理人。
1.設定任務候選人
代碼設定
//設定候選人taskService.addCandidateUser(...)//設定組別taskService.addCandidateGroup(...)
xml配置
<userTask id="usertask1" name="Task1"> <potentialOwner> <resourceAssignmentExpression> <formalExpression>
user(angus), group(management), boss <!--不使用user或group時,直接被視作使用者組的ID--> </formalExpression> </resourceAssignmentExpression> </potentialOwner></userTask>
查看:
// 根據使用者組查詢任務List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("boss").list();System.out.println("分配到boss使用者組下的任務數量:" + tasks.size());// 根據使用者查詢任務tasks = taskService.createTaskQuery().taskCandidateUser("angus").list();System.out.println("使用者angus下的任務數量為:" + tasks.size());
註:指定的使用者組或使用者,並不需要一定要在表中存在。
2.設定任務受理人
代碼
//對應ACT_RU_TASK的ASSIGNEE_欄位taskService.setAssignee(...)
xml配置
<userTask id="usertask1" name="Task 1"> <humanPerformer> <resourceAssignmentExpression> <formalExpression>user1</formalExpression> </resourceAssignmentExpression> </humanPerformer></userTask>
查看可用 taskQuery.taskAssignee(...)
3.使用acitivi許可權分配擴充(activiti:assignee/activiti:candidateUsers/activiti:candidateGroups)
<userTask id="usertask1" name="Assignee" activiti:assignee="user1"></userTask> <userTask id="usertask2" name="Candidate User" activiti:candidateUsers="user1,user2"></userTask> <userTask id="usertask3" name="Candidate Group" activiti:candidateGroups="group1,group2"></userTask>
4.業務系統中,使用者組或使用者都有可能發生變化,這時可編寫任務監聽器進行動態許可權分配
4.1實現TaskListener介面
public class UserTaskListener implements TaskListener { public void notify(DelegateTask delegateTask) { System.out.println("使用任務監聽器設定任務許可權"); delegateTask.setAssignee("user1"); delegateTask.addCandidateGroup("group1"); }}
4.2配置監聽
<userTask id="usertask1" name="Assignee"> <extensionElements> <activiti:taskListener event="create" <!--任務建立的時候執行--> class="org.bestmyself.activiti.UserTaskListener"> </activiti:taskListener> </extensionElements></userTask>
查看:List<Task> tasks = taskService.createTaskQuery().taskAssignee("user1").list();
5.使用JUEL分配許可權(activiti預設支援juel)
<userTask id="usertask2" name="Task 1" activiti:assignee="${authService.getUserAssignee()}"></userTask><userTask id="usertask3" name="Task 2" activiti:candidateUsers="${authService.getCandidateUsers()}"></userTask><userTask id="usertask4" name="Task 3" activiti:candidateGroups="${authService.getCandidateGroups()}"></userTask><userTask id="usertask5" name="Task 4" activiti:assignee="${authService.lastUser}"> <!--要有相應的getter/setter方法--></userTask>
註:authService執行個體需要設定到流程參數中
Map<String, Object> vars = new HashMap<String, Object>(); vars.put("authService", new AuthService()); // 啟動流程,將authservice執行個體序列化到act_ge_bytearray中 ProcessInstance pi = runtimeService.startProcessInstanceByKey("process1", vars);
流程任務-使用者任務