当前位置:网站首页>第八章:activiti多用户任务分配
第八章:activiti多用户任务分配
2022-08-05 10:05:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
就是只要有一个人审批通过就可以进入到下一个节点。
画图如下:
点击leave001节点在下图位置加入几个人物的执行人:
、
完了还要设置流程图di为StudentLeaveProcess07;
代码:
package com.xiaoyexinxixn.ActivityLesson.flow;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
import com.xiaoyexinxixn.ActivityLesson.model.Student;
public class StudentLeaveProcess7 {
//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
/**
* 部署流程定义
*/
@Test
public void deploy() {
//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
Deployment deployment=processEngine.getRepositoryService()
//创建部署
.createDeployment()
//加载流程图资源文件
.addClasspathResource("diagrams/StudentLeave7.bpmn")
//加载流程图片
.addClasspathResource("diagrams/StudentLeave7.png")
//流程名称
.name("leave07")
//部署流程
.deploy();
System.out.println("流程部署的ID: "+deployment.getId());
System.out.println("流程部署的Name: "+deployment.getName());
}部署启动流程;
我们看身份联系表 act_ru_identitiylink
有六条数据,我们前面设置了三个人,这里每个人有两条数据,一个是参与者 participant.一个是候选人candidate,这样设计的目的是有可以修改删除候选人,此外我们后面使用接口查看任务时是通过候选人查询的,因为我们不知道参与者是哪个,所以就使用候选者了。
我们看任务表:
任务表的委派人是空的,因为是多用户,所以是空。
查看任务接口:
/**
* 查看任务
*/
@Test
public void findTaskList(){
//获取任务列表的service
List<Task> taskList=processEngine.getTaskService()
//创建任务查询
.createTaskQuery()
//指定任务的执行人
// .taskAssignee("xiaoliu001") //单用户
.taskCandidateUser("xiaoliu002")
.list();
for(Task task:taskList){
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务创建时间:"+task.getCreateTime());
System.out.println("任务委派人:"+task.getAssignee());
System.out.println("任务流程实例Id:"+task.getProcessInstanceId());
}
}结果:
任务ID:127504
任务名称:leave001
任务创建时间:Sun Apr 22 16:57:52 CST 2018
任务委派人:null
任务流程实例Id:127501完成任务也是根据任务id完成的。
上面是写死了任务的多用户人是那些人,下面我们通过变量来这是用户。
复制一个流程图如下:
流程id改为:StudentLeaveProcess08
把leave001的用户置为空。
leave001的任务执行人这里我们设置一个参数,后面通过变量赋值。
保存
package com.xiaoyexinxixn.ActivityLesson.flow;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
import com.xiaoyexinxixn.ActivityLesson.model.Student;
public class StudentLeaveProcess8 {
//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
/**
* 部署流程定义
*/
@Test
public void deploy() {
//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
Deployment deployment=processEngine.getRepositoryService()
//创建部署
.createDeployment()
//加载流程图资源文件
.addClasspathResource("diagrams/StudentLeave8.bpmn")
//加载流程图片
.addClasspathResource("diagrams/StudentLeave8.png")
//流程名称
.name("leave08")
//部署流程
.deploy();
System.out.println("流程部署的ID: "+deployment.getId());
System.out.println("流程部署的Name: "+deployment.getName());
}
/*
* 指定那些用过能够执行启动流程实例
*/
@Test
public void start(){
Map<String, Object> variables=new HashMap<String,Object>();
variables.put("userIds","liuxin01,liuxin02");//指定执行人有那些
//运行启动流程的servicee
ProcessInstance pi=processEngine.getRuntimeService()
//定义流程表的KEY字段值,key值是我们前面定义好的key,可在act_re_procdef表中的key_字段中找到,
.startProcessInstanceByKey("StudentLeaveProcess08",variables);
System.out.println(pi.getId());
System.out.println(pi.getProcessDefinitionId());
}
/**
* 查看任务
*/
@Test
public void findTaskList(){
//获取任务列表的service
List<Task> taskList=processEngine.getTaskService()
//创建任务查询
.createTaskQuery()
//指定任务的执行人
// .taskAssignee("xiaoliu001") //单用户
.taskCandidateUser("liuxin02")
.list();
for(Task task:taskList){
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务创建时间:"+task.getCreateTime());
System.out.println("任务委派人:"+task.getAssignee());
System.out.println("任务流程实例Id:"+task.getProcessInstanceId());
}
}
} 依次执行上面方法,最后的结果是:
任务ID:147505
任务名称:leave001
任务创建时间:Sun Apr 22 17:25:22 CST 2018
任务委派人:null
任务流程实例Id:147501说明没有问题。
下面介绍通过监听器指定任务委派人:
监听器代码:
package com.xiaoyexinxixn.ActivityLesson;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
public class MyTaskListener implements TaskListener{
@Override
public void notify(DelegateTask delegateTask) {
// TODO Auto-generated method stub
delegateTask.addCandidateUser("liu001");
delegateTask.addCandidateUser("liu002");
}
}然后新建流程图,修改流程图id,StudentLeaveProcess09
然后点击任务节点,选择Listeners–>new–》select class–》选择我们刚才写的监听类,–》ok
测试代码:
package com.xiaoyexinxixn.ActivityLesson.flow;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
import com.xiaoyexinxixn.ActivityLesson.model.Student;
public class StudentLeaveProcess9 {
//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
/**
* 部署流程定义
*/
@Test
public void deploy() {
//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
Deployment deployment=processEngine.getRepositoryService()
//创建部署
.createDeployment()
//加载流程图资源文件
.addClasspathResource("diagrams/StudentLeave9.bpmn")
//加载流程图片
.addClasspathResource("diagrams/StudentLeave9.png")
//流程名称
.name("leave09")
//部署流程
.deploy();
System.out.println("流程部署的ID: "+deployment.getId());
System.out.println("流程部署的Name: "+deployment.getName());
}
/*
* 指定那些用过能够执行启动流程实例
*/
@Test
public void start(){
//运行启动流程的servicee
ProcessInstance pi=processEngine.getRuntimeService()
//定义流程表的KEY字段值,key值是我们前面定义好的key,可在act_re_procdef表中的key_字段中找到,
.startProcessInstanceByKey("StudentLeaveProcess09");
System.out.println(pi.getId());
System.out.println(pi.getProcessDefinitionId());
}
/**
* 查看任务
*/
@Test
public void findTaskList(){
//获取任务列表的service
List<Task> taskList=processEngine.getTaskService()
//创建任务查询
.createTaskQuery()
//指定任务的执行人
// .taskAssignee("xiaoliu001") //单用户
.taskCandidateUser("liu002")
.list();
for(Task task:taskList){
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务创建时间:"+task.getCreateTime());
System.out.println("任务委派人:"+task.getAssignee());
System.out.println("任务流程实例Id:"+task.getProcessInstanceId());
}
}依次执行上面代码,最后查看任务是:
任务ID:155004
任务名称:leave001
任务创建时间:Sun Apr 22 17:36:07 CST 2018
任务委派人:null
任务流程实例Id:155001说明也是OK的。
我们看看身份联系表:
是有两个人的。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/106140.html原文链接:https://javaforall.cn
边栏推荐
- 电竞、便捷、高效、安全,盘点OriginOS功能的关键词
- matcher中find,matches,lookingAt匹配字符串的不同之处说明
- Pytorch Deep Learning Quick Start Tutorial -- Mound Tutorial Notes (3)
- 蚁剑webshell动态加密连接分析与实践
- Our Web3 Entrepreneurship Project, Yellow
- 【MindSpore Easy-Diantong Robot-01】You may have seen many knowledge quiz robots, but this one is a bit different
- 你最隐秘的性格在哪?
- NowCoderTOP35-40 - continuous update ing
- three.js调试工具dat.gui使用
- ffmpeg drawtext 添加文本水印
猜你喜欢

开源一夏|OpenHarmony如何查询设备类型(eTS)

How can project cost control help project success?

Open Source Summer | How OpenHarmony Query Device Type (eTS)

Jenkins manual (2) - software configuration

egg框架使用(二)

什么是CRM决策分析管理?

【AGC】增长服务1-远程配置示例

基于MindSpore高效完成图像分割,实现Dice!

七夕浪漫约会不加班,RPA机器人帮你搞定工作

STM32+ULN2003驱动28BYJ4步进电机(根据圈数正转、反转)
随机推荐
Redis源码解析:Redis Cluster
技术干货 | 基于 MindSpore 实现图像分割之豪斯多夫距离
电竞、便捷、高效、安全,盘点OriginOS功能的关键词
无题三
七夕浪漫约会不加班,RPA机器人帮你搞定工作
什么是CRM决策分析管理?
茄子科技CEO仇俊:以用户为中心,做用户真正需要的产品
egg框架使用(一)
Complete image segmentation efficiently based on MindSpore and realize Dice!
一文道清什么是SPL
hcip BGP enhancement experiment
Tanabata romantic date without overtime, RPA robot helps you get the job done
Custom filters and interceptors implement ThreadLocal thread closure
手把手教你纯c实现异常捕获try-catch组件
How does the official account operate and maintain?Public account operation and maintenance professional team
首次去中心化抢劫?近2亿美元损失:跨链桥Nomad 被攻击事件分析
【MindSpore易点通机器人-01】你也许见过很多知识问答机器人,但这个有点不一样
STM32+ULN2003 drives 28BYJ4 stepper motor (forward and reverse according to the number of turns)
IDEA执行Test操作导致数据插入时出现了重复数据
The difference between find, matches, lookingAt matching strings in matcher