当前位置:网站首页>第八章: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
边栏推荐
- CPU的亲缘性affinity
- What is the function of the regular expression replaceAll() method?
- What is the function of the regular expression replaceFirst() method?
- 无题四
- 微服务 技术栈
- 5. Deploy the web project to the cloud server
- 开发常用手册链接分享
- dotnet OpenXML parsing PPT charts Getting started with area charts
- hcip BGP 增强实验
- 使用工具类把对象中的null值转换为空字符串(集合也可以使用)
猜你喜欢
Oracle临时表空间作用
基于MindSpore高效完成图像分割,实现Dice!
2022华数杯数学建模A题环形振荡器的优化设计思路思路代码分享
项目成本控制如何帮助项目成功?
【zeno】为zeno增加子模块/新节点的最小化的例子
Qiu Jun, CEO of Eggplant Technology: Focus on users and make products that users really need
Bias lock/light lock/heavy lock lock is healthier. How is locking and unlocking accomplished?
Custom filters and interceptors implement ThreadLocal thread closure
leetcode: 529. Minesweeper Game
SD NAND Flash简介!
随机推荐
语音社交软件开发——充分发挥其价值
Handwriting Currying - toString Comprehension
leetcode: 529. Minesweeper Game
The JVM collection that Alibaba's top architects have summarized for many years, where can't I check it!
Tanabata romantic date without overtime, RPA robot helps you get the job done
正则表达式replaceAll()方法具有什么功能呢?
19. Server-side session technology Session
MySQL data view
First Decentralized Heist?Loss of nearly 200 million US dollars: analysis of the attack on the cross-chain bridge Nomad
Oracle temporary table space role
js hijacks the array push method
Qiu Jun, CEO of Eggplant Technology: Focus on users and make products that users really need
Voice conversion相关语音数据集综合汇总
5. Deploy the web project to the cloud server
IDEA执行Test操作导致数据插入时出现了重复数据
The difference between find, matches, lookingAt matching strings in matcher
Marketing Suggestions | You have an August marketing calendar to check! Suggest a collection!
SD NAND Flash简介!
长达四年的减肥记录
Our Web3 Entrepreneurship Project, Yellow