3-4 流程任务-用户任务

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

                                                                                       

 

 

你可能感兴趣的:(用户)