需求:在流程定义中在任务节点的assignee固定设置任务负责人,这种情况不是很好,如果有天任务负责人请假了,你想请假,等着吧..没人审批,针对这种情况,可以给任务设置多个候选人,可以从候选中选择参与者来完成任务

设置候选人:画图

候选人 采用Candidate Users字段设置 多人使用逗号隔开

画完图之后,部署,然后启动流程实例,提交zhangsan的任务,接下来的看代码注释吧

package com.itheima.test;

import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.junit.Before;
import org.junit.Test; import java.util.List; public class ActivitiGroupTest { ProcessEngine processEngine;
TaskService taskService;
String candidateUser = "lisan";
static String KEY = "holiday"; @Before
public void init() {
processEngine = ProcessEngines.getDefaultProcessEngine();
taskService = processEngine.getTaskService();
} /**
* 部署流程定义
*/
@Test
public void deployment(){ RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment deploy = repositoryService.createDeployment()
.addClasspathResource("pic/holidayGroup.bpmn")
.addClasspathResource("pic/holidayGroup.png")
.name("请假流程")
.deploy(); System.out.println(deploy);
} /**
* 启动流程实例
*/
@Test
public void startProcessInstance(){ RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(ActivitiGroupTest.KEY); System.out.println(processInstance); } /**
* 查询组任务
*/
@Test
public void queryGroupTask() { queryTaskByCandidateUser(candidateUser, null, false).forEach(task -> {
System.out.println(task);
}); } /**
* 用户拾取组任务
*/
@Test
public void claimTask() { queryTaskByCandidateUser(candidateUser, null, false).forEach(task -> {
taskService.claim(task.getId(), candidateUser);
System.out.println(candidateUser + "用户拾取了[" + task.getName() + "]任务");
});
} /**
* 用户归还组任务
*/
@Test
public void unClaimTask(){
queryTaskByCandidateUser(null, candidateUser, true).forEach(task -> {
taskService.setAssignee(task.getId(),null);
System.out.println(candidateUser + "用户丢弃了[" + task.getName() + "]任务");
});
} /**
* 用户任务交接,委托
*/
@Test
public void toAssignee(){
queryTaskByCandidateUser(null,candidateUser,true).forEach(task -> {
taskService.setAssignee(task.getId(),"lisi");
System.out.println(candidateUser+"用户将["+task.getName()+"]任务交接给了lisi用户");
});
} /**
* 查询并处理自己的任务
*/
@Test
public void queryCompletTask() { queryTaskByCandidateUser(null, "lisi", true).forEach(task -> {
taskService.complete(task.getId());
System.out.println(candidateUser+"处理了["+task.getName()+"]任务");
});
} /**
* 根据候选人查询任务
*
* @param candidateUser 候选人
* @param assignee 指定人
* @param isAssignee 是否是指定人
* @return 任务列表
*/
public List<Task> queryTaskByCandidateUser(String candidateUser, String assignee, Boolean isAssignee) { TaskQuery taskQuery = taskService.createTaskQuery().processDefinitionKey(ActivitiGroupTest.KEY); if (isAssignee) {
taskQuery.taskAssignee(assignee);
} else {
taskQuery.taskCandidateUser(candidateUser);
} return taskQuery.list(); } }

作者:彼岸舞

时间:2020\09\06

内容关于:Activiti工作流

本文来源于网络,只做技术分享,一概不负任何责任

Activiti7 组任务的更多相关文章

  1. activiti7组任务测试

    package com.zcc.activiti05; import org.activiti.engine.*;import org.activiti.engine.repository.Deplo ...

  2. Activiti7 与 Spring Boot 及 Spring Security 整合 踩坑记录

    1.  前言 实话实说,网上关于Activiti的教程千篇一律,有参考价值的不多.很多都是老早以前写的,基本都是直接照搬官方提供的示例,要么就是用单元测试跑一下,要么排除Spring Security ...

  3. Activiti7基本介绍

    官方地址 官方地址 官方最新用户文档-V6.0.0 码云镜像-activiti-7-developers-guide 关于BPMN BPMN(Business Process Model AndNot ...

  4. 01.SQLServer性能优化之----强大的文件组----分盘存储

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...

  5. SQL Server 大数据搬迁之文件组备份还原实战

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...

  6. SQLSERVER将一个文件组的数据移动到另一个文件组

    SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...

  7. SQL Server中的高可用性(2)----文件与文件组

        在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...

  8. 微信小程序的机会在于重新理解群组与二维码

    历时一年,唯一一个尚未发布就获得Pony Ma与Allen Zhang站台的产品:微信小程序,将于2017年1月9日正式上线了.我很期待.唯一要警惕的是:防止长考出臭棋. 在上线前夕,我对于如何借助小 ...

  9. jmeter之线程组的使用

    线程组 在使用jmeter性能测试时,我们都得先添加个线程组,右键testplan-->添加-->Threads-->线程组.在线程组下执行. 问题:为了能够让jmeter在做性能测 ...

随机推荐

  1. 用python分析1225万条淘宝数据,终于搞清楚了我的交易行为

    大家好,我是黄同学

  2. NIO(二):Channel通道

    一.Channel概述 channel(通道):进行IO的连接通道,为NIO的几个核心(Buffer,selector,channel)之一,相比于IO的stream具有较高的性能. IO 单向传输 ...

  3. JDK 1.8 中文 API CHM

    链接: https://pan.baidu.com/s/1AiJn6RM1KoEL1n_96qoQhQ 提取码: n2ya

  4. ReentrantLock与synchronized 源码解析

    一.概念及执行原理   在 JDK 1.5 之前共享对象的协调机制只有 synchronized 和 volatile,在 JDK 1.5 中增加了新的机制 ReentrantLock,该机制的诞生并 ...

  5. 为什么我们需要Q#?

    原文地址:https://blogs.msdn.microsoft.com/visualstudio/2018/11/15/why-do-we-need-q/ 本文章为机器翻译. 你可能熟悉微软量子的 ...

  6. Deep learning-based personality recognition from text posts of online social networks 阅读笔记

    文章目录 一.摘要 二.模型过程 1.文本预处理 1.1 文本切分 1.2 文本统一 2. 基于统计的特征提取 2.1 提取特殊的语言统计特征 2.2 提取基于字典的语言特征 3. 基于深度学习的文本 ...

  7. dota2输入法无候选框?

    win10自带的微软拼音在dota2中不会显示候选框,或者说是选词框. 这种情况下只能选择其他输入法. 我选择的是搜狗输入法(此随笔添加时的最新版),在dota2中有选词框. 网上有些人说要改兼容性, ...

  8. 浏览器自动化的一些体会2 webBrowser控件之ajax

    上个帖子简要讨论了浏览器自动化的几种方法.现在讨论webBrowser控件使用中的一些问题.基本的操作就不详细说了,随便网上找个帖子或找本书都有介绍的.这里只写点网上似乎少有人总结过的内容,以及自己的 ...

  9. python 去除Excel中的重复行数据

    导入pandas import pandas as pd 1.读取excel中的数据: frame = pd.DataFrame(pd.read_csv('excel的绝对路径.csv'', 'She ...

  10. Spring Boot系列(二):Spring Boot自动装配原理解析

    一.Spring Boot整合第三方组件(Redis为例) 1.加依赖 <!--redis--> <dependency> <groupId>org.springf ...