大部分的业务流程都会有人的参与,用户任务是最常用的任务,在流程图中使用userTask元素定义用户任务。

当流程到达用户任务时该任务会被分配到特定用户或者用户组,这就是给用户任务分配权限。这个分配权限指的是分配后可以通过activiti提供的任务查询api根据用户或者用户组来查询到这个任务。

一、使用JUEL表达式分配权限

juel表达式指定候选人.png

一个任务可以设置多个候选人,候选人在业务上指的是有权对该任务进行操作的群体。在流程图上使用juel表达式分配候选人的方法如下
<userTask id="sid-31845D76-A308-4442-AE19-4AA4238DB39A" name="juel表达式分配候选人" activiti:candidateUsers="${candidateUsers}"></userTask>

这里的candidateUsers是一个流程变量,以list的形式存放了候选人列表。

//使用juel表达式指定候选人

    List<String> candidateUsers=new ArrayList<>();
    candidateUsers.add("zhangsan");
    candidateUsers.add("lisi");
    Map<String,Object> variableMap=new HashMap<>();
    variableMap.put("candidateUsers",candidateUsers);
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("juel-candidateUser2",variableMap);
    System.out.println(processInstance);

权限分配成功后就可以使用activiti提供的任务查询api来根据候选人查询任务

List<Task> list = taskService.createTaskQuery().taskCandidateUser("lisi").list();

    for (Task task : list) {
        System.out.println(task.getName());
    }

1.2 给用户任务分配候选组

liucheng.png

候选组的概念和候选人类似,用来把一个群体的人指定为一个任务的权限人,对应的是activiti中的用户组,分配一个用户组id到某个任务上,可以指定整个组的人为该任务的候选人,在流程图上指定候选组的方式和指定候选人类似

1.3 给用户任务分配代理人
候选组的概念和候选人类似,用来把一个群体的人指定为一个任务的权限人,对应的是activiti中的用户组,分配一个用户组id到某个任务上,可以指定整个组的人为该任务的候选人,在流程图上指定候选组的方式和指定候选人类似
<userTask id="juel-candidateGroup" name="juel表达式指定候选组" activiti:candidateGroups="${candidateGroup}"></userTask>
这里的candidateGroup也是一个流程变量,其中存放了用户组id的lsit集合

Map<String,Object> map=new HashMap<>();

    List<String> groupList=new ArrayList<>();
    groupList.add("项目经理");
    groupList.add("测试");
    map.put("candidateGroup",groupList);
    runtimeService.startProcessInstanceByKey("juel-candidateGroup2",map);

注意这个用户组在activiti的群组表中可以不存在。

可以使用任务查询api查询群组对应的任务
List<Task> list = taskService.createTaskQuery().taskAssignee("jerry").list();

    for (Task task : list) {
        System.out.println(task.getName());
    }

与候选人和候选组不同的是,代理人会被设置到任务表act_ru_task的ASSIGNEE_字段中

上面的juel表达式中放置的都是一个流程变量,流程变量中存的是集合或者字符串,实际上也可以在流程变量中存一个JavaBean对象,然后在juel表达式中调用这个对象的方法和或者属性,调用属性时需要提供属性的get方法,并且属性要是public的,调用方式如下

${authBean.getAssignee}
${authBean.getCandidateUsers}
原文地址:https://www.cnblogs.com/chengxuxiaoyuan/p/13760913.html

https://www.bilibili.com/video/BV1Fp4y19729?p=18

标签: none

相关阅读

  • 测试信息
  • 拼多多2023年度财报分析
  • 2023年最后一个工作日
  • 2023山东社会责任企业(企业家)” 推选活动结果
  • 测试信息
  • 测试信息
  • 测试信息