《Activiti/Flowable  深入BPM工作流》-组任务的办理流程是什么?

一. 问题

         组任务的办理流程是什么?

二. 详情

第一步:查询组任务

指定候选人,查询该候选人当前的待办任务。

候选人不能办理任务。

第二步:让候选人去拾取(claim)任务

该组任务的所有候选人都能拾取。

将候选人的组任务,变成个人任务。原来候选人就变成了该任务的负责人。

问题:  如果拾取后不想办理该任务怎么办?

解答: 需要将已经拾取的个人任务归还到组里边,将个人任务变成了组任务。

第三步:查询个人任务

查询方式同个人任务部分,根据 assignee 查询用户负责的个人任务。

第四步:办理个人任务

1. 部署流程定义

 // 新的请假流程定义的部署public static void main(String[] args) {// 1. 得到 processEngineProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 得到 RepositoryServiceRepositoryService repositoryService = processEngine.getRepositoryService();// 部署Deployment deploy = repositoryService.createDeployment().addClasspathResource("holiday.bpmn")
//                .addClasspathResource("studentHoliday.png").name("请假流程2020-5-20").deploy();System.out.println(deploy.getId());System.out.println(deploy.getName());System.out.println(deploy.getKey());}

2. 启动流程定义

// 启动流程实例,同时还要设置流程变量的值public static void main(String[] args) {// 1. 得到 processEngineProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2.得到 RuntimeServiceRuntimeService runtimeService = processEngine.getRuntimeService();// 3.流程定义的key问题并进行启动String processDefinitionKey = "myProcess_1";ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess_1");// 4.输出实例信息;System.out.println(processInstance.getName());System.out.println(processInstance.getProcessDefinitionId());System.out.println(processInstance.getId());}

3. 处理任务,到下一步,部门经理

 // 处理任务: 任务查询是否存在再执行public static void main(String[] args) {// 1. 得到 processEngineProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2.得到 TaskServiceTaskService taskService = processEngine.getTaskService();// 3. 查询当前用户是否有任务String key = "myProcess_1";Task task = taskService.createTaskQuery().processDefinitionKey(key).singleResult();// 4. 判断task!=null,说明当前用户有任务if (task != null) {taskService.complete(task.getId());System.out.println("用户任务执行完成");System.out.println(task.getId());}}

任务成功执行完毕如下:

4. 查询候选用户的组任务

// 4.根据候选人查询组任务public  void findGroupTaskList() {// 流程定义keyString key = "myProcess_1";// 任务候选人String candidateUser = "zhangsan";// 创建 TaskServiceTaskService taskService = ProcessEngines.getDefaultProcessEngine().getTaskService();// 查询任务List<Task> list = taskService.createTaskQuery().processDefinitionKey(key).taskCandidateUser(candidateUser).list();// 流程信息的输出展示if (!list.isEmpty()) {for (Task task : list) {System.out.println("===============================");System.out.println("流程实例id:" + task.getProcessInstanceId());System.out.println("任务id:" + task.getId());System.out.println("任务负责人:" + task.getAssignee());System.out.println("任务名称:" + task.getName());}}}

成功运行结果如下:

5. 让候选人去拾取(claim)任务

// 5. 让候选人去拾取(claim)任务public static void claimTask() {TaskService taskService = ProcessEngines.getDefaultProcessEngine().getTaskService();String key = "myProcess_1";String candidateUsers = "zhangsan";// 先查询是否有任务,校验用户是否有资格Task task = taskService.createTaskQuery().processDefinitionKey(key).taskCandidateUser(candidateUsers).singleResult();if (task != null) {// 拾取主任务taskService.claim(task.getId(), candidateUsers);System.out.println("该任务拾取成功!");}}

如果任务拾取成功显示如下:

查看部门经理的assignee,之前是空, 目前已经确认,给 "zhansan" 了. "zhansan"由候选人变成了执行人.

任务拾取的核心:    TaskService.claim(taskId, candidateUser); 目的就是将候选人转化为执行人, 让assignee有值.

6.  用户查询个人代办任务(候选人查询自己的任务,候选人已经转换成执行人了.)

这里的核心是用taskAssignee(userId);进行查询, userId还是candidateUser, 但是candidateUser实际已经编程执行人了, 所以查询的时候方法是用taskAssignee()来进行查询.

// 6. 用户查询个人代办任务public static void findPersonalTaskList(){// 流程定义keyString key = "myProcess_1";// 任务候选人String candidateUser = "zhangsan";// 创建 TaskServiceTaskService taskService = ProcessEngines.getDefaultProcessEngine().getTaskService();// 查询任务List<Task> list = taskService.createTaskQuery().processDefinitionKey(key).taskAssignee(candidateUser).list();// 流程信息的输出展示if (!list.isEmpty()) {for (Task task : list) {System.out.println("===============================");System.out.println("流程实例id:" + task.getProcessInstanceId());System.out.println("任务id:" + task.getId());System.out.println("任务负责人:" + task.getAssignee());System.out.println("任务名称:" + task.getName());}}}

7. 用户办理个人任务.

// 7.用户办理个人任务public static void completeTask() {// 任务IdString taskId = "";ProcessEngines.getDefaultProcessEngine().getTaskService().complete(taskId);System.out.println("完成任务:" + taskId);}

优化--(判断有没有权限)

 // 7. 当前用户完成自己的任务 public static void completeTask() {TaskService taskService = ProcessEngines.getDefaultProcessEngine().getTaskService();String key = "myProcess_1";String candidateUsers = "zhangsan";// 先查询是否有任务,校验用户是否有资格Task task = taskService.createTaskQuery().processDefinitionKey(key).taskAssignee(candidateUsers).singleResult();if (task != null) {// 完成任务taskService.complete(task.getId());System.out.println("完成任务:" + task.getId());}

小结:   

组任务的办理流程和任务的交接流程如下:

第一步:查询组任务

指定候选人,查询该候选人当前的待办任务。

第二步:让候选人去拾取(claim)任务

第三步:查询个人任务

第四步:办理个人任务

《Activiti/Flowable  深入BPM工作流》-组任务的办理流程是什么?相关推荐

  1. 《Activiti/Flowable  深入BPM工作流》-如何设置local流程变量?

    <Activiti/Flowable  深入BPM工作流>-如何设置local流程变量? 一. 问题:  1. 什么是local流程变量?     2. 如何设置local流程变量?   ...

  2. 《Activiti/Flowable 深入BPM工作流》- BPM任务如何关联businessKey?

               <Activiti/Flowable  深入BPM工作流>- BPM任务如何关联businessKey? 一. 问题    1. BPM任务如何关联businessK ...

  3. 《Activiti/Flowable 深入BPM工作流》-流程部署实现方式二

    <Activiti/Flowable  深入BPM工作流>                                     ----流程部署实现方式二 一. 问题 流程部署实现方式 ...

  4. 《Activiti/Flowable 深入BPM工作流》---工作流中的网关有哪些?

    <Activiti/Flowable  深入BPM工作流>---工作流中的网关有哪些? 一. 问题: 1. 网关分为哪几类? 2. 什么是排他网关? 3. 什么是并行网关? 4. 什么是包 ...

  5. 《Activiti/Flowable  深入BPM工作流》-什么是流程变量?

               <Activiti/Flowable  深入BPM工作流>-什么是流程变量? 一. 问题:         1. 什么是流程变量?        2. 什么是glob ...

  6. 《Activiti/Flowable 深入BPM工作流》-如何分配任务负责人?

    <Activiti/Flowable  深入BPM工作流>-如何分配任务负责人? 一. 问题      如何分配任务负责人? 二. 详情 1. 直接在画 流程图的时候进行设置. 2.使用流 ...

  7. 《Activiti/Flowable 深入BPM工作流》-流程实例怎么实现挂起?

    <Activiti/Flowable  深入BPM工作流>-流程实例怎么实现挂起? 一. 问题 1. 什么情况要进行流程的挂起? 2. 具体怎么将流程挂起? 二. 详情   1. 什么情况 ...

  8. 《Activiti/Flowable  深入BPM工作流》- Activiti 与springboot 怎么进行整合?

    <Activiti/Flowable  深入BPM工作流> -Activiti 与springboot 怎么进行整合? 一.问题 Activiti 如何与springboot进行整合? 1 ...

  9. 《Activiti/Flowable 深入BPM工作流》-流程定义怎么进行删除?

        <Activiti/Flowable  深入BPM工作流>-流程定义怎么进行删除? 一. 问题 之前我们分享过流程定义的流程任务查询,  流程任务处理, 任务那么怎么进行删除? 二 ...

最新文章

  1. 2021年需要学习Python的自动化测试框架有哪些?你知道吗?
  2. leetcode 598. Range Addition II | 598. 范围求和 II
  3. ByteBuffer使用之道
  4. 欢乐纪中某B组赛【2018.12.22】
  5. python之lambda
  6. php的cms是什么意思,phpcms是什么系统
  7. Ext JS 6应用程序Build后出现“c is not a constructor return new c(a[0])”的处理
  8. TCP的粘包问题以及数据的无边界性
  9. Dfinity(ICP)介绍-1
  10. 汇编工具安装二:RadASM的安装!
  11. 【3dmax千千问】初学3dmax插件神器第16课|VRAY学习教程|疯狂模渲大师怎么使用VRAY渲染器?食住玩3dmax入门到精通进阶教程
  12. 搜索进阶-迭代加深搜索
  13. Linux系统下安装Chrome浏览器
  14. java学习篇(一)---从网络下载图片
  15. 多项创新功能驱动,Galaxy S9必将引爆2018智能手机市场
  16. proteus仿真arduino控制舵机
  17. win10 你没有足够的权限执行此操作。
  18. cad移动时捕捉不到基点_CAD中捕捉基点不能用怎么办?就是用fro不行?
  19. java常用缩写(pojo、DAO、EAO、DTO)
  20. 某酷ckey签名生成算法系列--(三)ast代码控制流平坦化

热门文章

  1. 徐盛:软件测试新趋势从超人时代到智慧测试时代
  2. 第五届全国现代物流绿色包装与循环共用大会线上成功举办
  3. C语言实现鸡尾酒排序
  4. 局域网内的攻击—Arp欺骗
  5. K-近邻算法(KNN) 预测电影类型
  6. USACO——混合牛奶
  7. 织梦网站地图生成插件下载
  8. 30条电商客服话术,快收好!
  9. 饥荒mod显示服务器连接失败,饥荒专属服务器添加MOD失败 | 手游网游页游攻略大全...
  10. 我的友谊之舟也曾颠簸