第六节:Activiti6.0——流程任务:候选人、持有人和代理人

本人个人博客网站,欢迎访问:学教府

一、概述

介绍:在activiti的任务中,与任务相关的任务为以下三种,其含义如下:

  • 候选人(组):代表有权限对任务进行操作的人。
  • 持有人:指当前任务的执行人,他此时持有该任务。
  • 代理人:当一个人持有人不方便处理任务时,可以将任务指给另一人,被指的人即为代理人。

二、候选人

介绍:任务和候选人的关系是一个中间表(act_ru_identitylink)来保存的,所有任务和候选人的关系是多对多。

  1. 编码测试如下:
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
     TaskService taskService = processEngine.getTaskService();
    
     //此处新建一个任务。该处新建在生产上不能这样用,因为任务是要绑定到流程上的。此处只是演示,直接new了一个任务
     String taskId = UUID.randomUUID().toString();
     Task task = taskService.newTask(taskId);
     task.setName("测试任务");
     taskService.saveTask(task);
    
     //创建一个用户,因为候选用户组不支持由用户组查询任务,所有此处设置任务的候选人。
     IdentityService identityService = processEngine.getIdentityService();
    
     String userId = UUID.randomUUID().toString();
     User user = identityService.newUser(userId);
     user.setFirstName("老");
     user.setLastName("王");
     identityService.saveUser(user);
    
     //给任务设置候选人
     taskService.addCandidateUser(taskId,userId);
    
     //反向查询任务:根据用户来查询他拥有的任务
     List<Task> list = taskService.createTaskQuery().taskCandidateUser(userId).list();
     System.out.println(user.getFirstName() + "" + user.getLastName() + " 用户有权限处理的任务有:");
     list.forEach(task1 -> System.out.println(task1.getName()));
    
    
     //关闭
     processEngine.close();
     System.exit(0);
    
  2. 结果查看
    • 用户表查看:
      用户
    • 任务表查看:
      任务
    • 关系表:
      关系
  • 运行结果:
    运行结果

三、持有人

介绍:一个人可以持有多个任务,一个任务只能有一个持有人,因此持有人和任务的关系是一对多。持有人关系表现在任务表act_ru_taskOWNER字段中。

  1. 编码测试:
    //其他代码和上个候选人内容一样
    //给任务设置持有人
    taskService.setOwner(taskId,userId);
    
    //反向查询任务:根据持有人查询任务
    List<Task> list = taskService.createTaskQuery().taskOwner(userId).list();
    
  2. 结果
    在这里插入图片描述

四、代理人

介绍:一个人可以是多个任务的代理人,一个任务只能有一个代理人,因此代理人和任务的关系是一对多

区别taskService.setAssignee()和taskService.claim()都可以给任务设置代理人,区别:

  • setAssignee方法可以随时任意为任务指定代理人(可多次调用),
  • 而claim方法给任务指定一次代理人后,如果再次调用claim来指定代理人,则会抛出异常:ActivitiTaskAlreadyClaimedException: Task ‘b7ec485a-a4cd-4bdc-8117-8beb76a81c2f’ is already claimed by someone else.
  1. 编码测试
    //用户一
    String userId = UUID.randomUUID().toString();
    User user = identityService.newUser(userId);
    user.setFirstName("小");
    user.setLastName("明");
    identityService.saveUser(user);
    
    //用户二
    String userId2 = UUID.randomUUID().toString();
    User user2 = identityService.newUser(userId2);
    user2.setFirstName("大");
    user2.setLastName("明");
    identityService.saveUser(user2);
    
    //1.使用taskService.setAssignee()方法给任务设置代理人
    //        taskService.setAssignee(taskId,userId);
    //        taskService.setAssignee(taskId,userId2);
    
    //2.使用taskService.claim()方法给任务设置代理人
    taskService.claim(taskId,userId);
    taskService.claim(taskId,userId2);
    
    //完成任务
    //taskService.complete(taskId);
    
  2. 数据库查看:
    代理人
  3. 调用两次claim的报错如下:
    报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值