前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第六节:Activiti6.0——流程任务:候选人、持有人和代理人

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

作者头像
凡人飞
发布2020-09-20 20:21:54
3.8K0
发布2020-09-20 20:21:54
举报
文章被收录于专栏:指缝阳光指缝阳光

一、概述

介绍:在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_task的OWNER字段中。

  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. 数据库查看:
代理人
代理人
  1. 调用两次claim的报错如下:
报错
报错
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、候选人
  • 三、持有人
  • 四、代理人
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com