首页 > 代码库 > 流程任务-用户任务

流程任务-用户任务

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);

                                                                                       

 

 

流程任务-用户任务