首页 > 代码库 > 流程任务-用户任务
流程任务-用户任务
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);
流程任务-用户任务
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。