当前位置:网站首页>第八章: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
边栏推荐
- 技术干货 | 基于 MindSpore 实现图像分割之豪斯多夫距离
- IDEA performs the Test operation, resulting in duplicate data when data is inserted
- 语音社交软件开发——充分发挥其价值
- Open Source Summer | How OpenHarmony Query Device Type (eTS)
- 无题三
- Why are RELTABLESPACE values 0 for many tables displayed in sys_class?
- Keil升级到AC6后,到底有哪些变化?
- 【MindSpore Easy-Diantong Robot-01】You may have seen many knowledge quiz robots, but this one is a bit different
- 告白数字化转型时代:麦聪软件以最简单的方式让企业把数据用起来
- STM32+ULN2003驱动28BYJ4步进电机(根据圈数正转、反转)
猜你喜欢

The technological achievements of Shanghai Konan were selected into the "2021 Shanghai Network Security Industry Innovation Research Achievement Catalog" by the Municipal Commission of Economy and Inf

【zeno】为zeno增加子模块/新节点的最小化的例子

我们的Web3创业项目,黄了

Tanabata romantic date without overtime, RPA robot helps you get the job done

【 temperature warning program DE development 】 event driven model instance

Jenkins manual (2) - software configuration

5. Deploy the web project to the cloud server

2022华数杯数学建模A题环形振荡器的优化设计思路思路代码分享

茄子科技CEO仇俊:以用户为中心,做用户真正需要的产品

SD NAND Flash简介!
随机推荐
5.部署web项目到云服务器
Where is your most secretive personality?
Bias lock/light lock/heavy lock lock is healthier. How is locking and unlocking accomplished?
开源一夏|OpenHarmony如何查询设备类型(eTS)
自定义过滤器和拦截器实现ThreadLocal线程封闭
Four years of weight loss record
Custom filters and interceptors implement ThreadLocal thread closure
Dry goods!Generative Model Evaluation and Diagnosis
阿里顶级架构师多年总结的JVM宝典,哪里不会查哪里!
2022.8.3
无题五
蚁剑webshell动态加密连接分析与实践
hcip BGP 增强实验
偏向锁/轻量锁/重级锁锁锁更健康,上锁解锁到底是怎么完成实现的
hcip BGP enhancement experiment
MySQL事务
PHP 操作mangoDb
Analysis and practice of antjian webshell dynamic encrypted connection
Jenkins使用手册(2) —— 软件配置
Seata source code analysis: initialization process of TM RM client