需求:在流程定义中在任务节点的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. 响应式Web设计与CSS(上)

    1.一个例子 响应式Web设计最核心的一点,就是可以适配不同视口大小的流式布局. 1.1 简单上手 <div class="row"> <header class ...

  2. JS 图片跟随鼠标移动案例

    css代码 img { position: absolute; /* top: 2px; */ width: 50px; height: 50px; } HTML代码 <img src=&quo ...

  3. 远程服务器的管理工具SSH

    1.SSH是什么? SSH:Secure Shell 安全外壳协议 建立在应用层基础上的安全协议 可靠,专为远程登录会话和其他网络服务提供安全性的协议 有效防止远程管理过程中的信息泄露问题 SSH客户 ...

  4. salesforce零基础学习(九十九)Git 在salesforce项目中的应用(vs code篇)

    本篇参考: https://code.visualstudio.com/docs/editor/versioncontrol https://git-scm.com/doc https://git-s ...

  5. JS学习第一天

    JS的三种引入方式: 内联:在标签属性中引入javascript:js代码    <a href="javascript:("helloworld")"& ...

  6. 工作小记[csv文件、admin中filed与list_display区别、ModuleNotFoundError: No module named'xxx'、django创建admin用户]

    CSV-Comma Separated Values,CSV文件可以直接用Excel表格打开,如果用文本打开属性之间用逗号隔开,Python有直接操作CSV文件的函数. fileds字段控制“修改添加 ...

  7. JavaScript 循环数组的时候调用方法中包含Promise的时候如何做到串行

    forEach是不能阻塞的, 默认[并行]方式 const list = [1, 2, 3] const square = num => { return new Promise((resolv ...

  8. .Net微服务实战之Kubernetes的搭建与使用

    系列文章 .Net微服务实战之技术选型篇 .Net微服务实战之技术架构分层篇 .Net微服务实战之DevOps篇 .Net微服务实战之负载均衡(上) .Net微服务实战之CI/CD 前言 说到微服务就 ...

  9. CSS动画基础知识

    CSS动画就是通过CSS (Cascading Style Sheet,层叠样式表)代码搭建的网页动画.它允许设计师和开发人员通过编辑网站的CSS代码来添加页面动画,从而轻松取代传统动画图片或flas ...

  10. loading动态效果

    html <div class="loadingcontainer" :style="{display:disp}"> <div class= ...