当前位置:网站首页>第八章: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
边栏推荐
猜你喜欢
Egg framework usage (1)
shell脚本实例
hcip BGP 增强实验
Seata source code analysis: initialization process of TM RM client
【AGC】增长服务1-远程配置示例
Tanabata romantic date without overtime, RPA robot helps you get the job done
19.服务器端会话技术Session
First Decentralized Heist?Loss of nearly 200 million US dollars: analysis of the attack on the cross-chain bridge Nomad
数据中台建设(十):数据安全管理
js graphics operation one (compatible with pc, mobile terminal to achieve draggable attribute drag and drop effect)
随机推荐
数据中台建设(十):数据安全管理
First Decentralized Heist?Loss of nearly 200 million US dollars: analysis of the attack on the cross-chain bridge Nomad
无题六
哪位大佬有20年4月或者1月的11G GI和ojvm补丁呀,帮忙发下?
无题五
IO stream articles -- based on io stream to realize folder copy (copy subfolders and files in subfolders) full of dry goods
SD NAND Flash简介!
Custom filters and interceptors implement ThreadLocal thread closure
Can MySQL use aggregate functions without GROUP BY?
茄子科技CEO仇俊:以用户为中心,做用户真正需要的产品
Where is your most secretive personality?
Oracle临时表空间作用
EU | Horizon 2020 ENSEMBLE: D2.13 SOTIF Safety Concept (Part 2)
Egg framework usage (1)
PAT Level B - B1021 Single Digit Statistics (15)
5.部署web项目到云服务器
Bias lock/light lock/heavy lock lock is healthier. How is locking and unlocking accomplished?
MySQL data view
歌词整理
无题九