码迷,mamicode.com
首页 > 其他好文 > 详细

流程任务-用户任务

时间:2014-12-02 01:27:29      阅读:817      评论:0      收藏:0      [点我收藏+]

标签: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);

                                                                                       

 

 

流程任务-用户任务

标签:style   blog   io   ar   color   os   使用   sp   java   

原文地址:http://www.cnblogs.com/baidu-google/p/4136347.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!