相关推荐recommended
SpringBoot整合Activiti7——代理候选人候选组(四)
作者:mmseoamin日期:2024-02-03

文章目录

  • 一、代理人
  • 二、候选人
  • 三、候选组
  • 四、组任务办理流程
  • 五、UEL表达式
    • UEL-value
    • UEL-method
    • UEL method结合value

      一、代理人

      一个用户任务只允许有一个代理人。为一个任务分配代理人后act_ru_task表的ASSIGNEE_字段会被设置为响应的值。

      审批任务设置assignee变量,表示是该任务的负责人:

      
      

      启动流程分配代理人:

      // 启动流程分配代理人
      Map map = new HashMap<>();
      map.put("assignee", "zhangsan");
      ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave", map);
      

      查询任务指定代理人:

      // 可通过代理人查询任务列表
      List list = taskService.createTaskQuery().taskAssignee("zhangsan").list();
      

      二、候选人

      一个任务可以设置多个候选人,候选人在业务上指的是有权对该任务进行操作的群体。

      某个候选人签收后,其他候选人就看不到该任务。

      可以使用activiti:candiateUsers=”用户 1,用户 2,用户 3”的这种方式来实现设置一组候选人

      直接赋值多个候选人示例:

      
      

      动态设置候选人变量 candidateUsers:

      
      

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

      注意任务和候选人的关系存储在act_ru_identitylink表中

      启动流程分配候选人:

      // 启动流程分配候选人
      List candidateUsers = new ArrayList<>();
      candidateUsers.add("zhangsan");
      candidateUsers.add("lisi");
      Map variableMap = new HashMap<>();
      variableMap.put("candidateUsers", candidateUsers);
      ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave", variableMap);
      

      三、候选组

      用来把一个群体的人指定为一个任务的权限人,对应的是activiti中的用户组,分配一个用户组id到某个任务上,可以指定整个组的人为该任务的候选人。

      属于该候选组的用户就可以签收然后办理该任务。

      如果候选组中存在多个用户,那么只有其中的某个用户签收了任务,那么其它用户就看不到该任务。

      只要任务还未被签收,候选组内的任意用户都可以签收该任务;一旦任务被签收,候选组内的其他用户就无法查看与签收该任务咯。

      可以使用activiti:candidateGroups=”用户组1,用户组2,用户组3”的这种方式来实现设置一组候选人

      动态设置候选组变量candidateGroup:

       
      

      这里的candidateGroup也是一个流程变量,其中存放了用户组id的lsit集合。

      注意任务和候选组的关系存储在act_ru_identitylink表中

      启动流程分配候选组:

      // 启动流程分配候选组
      Map map = new HashMap<>();
      List groupList = new ArrayList<>();
      groupList.add("项目经理");
      groupList.add("测试");
      map.put("candidateGroup",groupList);
      runtimeService.startProcessInstanceByKey("leave", map);
      

      四、组任务办理流程

      办理流程:

      1. 指定候选人,查询该候选人当前的待办任务
      2. 候选人不能立即办理任务,要先拾取
      3. 候选人拾取,将候选人的组任务,变成个人任务,原来候选人就变成了该任务的负责人,其他候选人就看不到该任务
      4. 候选人完成任务
      5. 如果个人不想办理该组任务,可以归还组任务,归还后该用户不再是该任务的负责人
        1. 查询该候选人个人任务
        2. taskService.setAssignee(taskId, null); // 设置为null,归还组任务
      6. 也可以将任务委托给其他人(委托的用户可以不是候选人)
        1. 查询该候选人个人任务
        2. taskService.setAssignee(taskId, “其他人”);

      五、UEL表达式

      表达式支持解析基础类型、 bean、 list、 array 和 map,也可作为条件判断。

      如下:${order.price > 100 && order.price < 250}

      UEL-value

      • ${applyUserId}:applyUserId这个变量是 activiti 的一个流程变量
        Map map = new HashMap<>();
        map.put("applyUserId", "zhangsan");
        
        • ${user.applyUserId}:表示通过调用 user 的 getter 方法获取 applyUserId 值
          User user = new User();
          Map map = new HashMap<>();
          map.put("user", user);
          

          UEL-method