当前位置:网站首页>第七章,activiti个人任务分配,动态指定和监听器指定任务委派人「建议收藏」
第七章,activiti个人任务分配,动态指定和监听器指定任务委派人「建议收藏」
2022-08-05 10:05:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
这章我们介绍下怎么把任务非配给指定的某个人去执行。现实使用的时候我们也有见过前面一个人审批结束后会自动走到下一个审批人,如果不处理就会一直等待,这里也是同样的道理。
这里先把任务分配给xiaoliu001,也就是写死指定某个人
代码如下:
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 StudentLeaveProcess10 {
//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
/**
* 部署流程定义
*/
@Test
public void deploy() {
//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
Deployment deployment=processEngine.getRepositoryService()
//创建部署
.createDeployment()
//加载流程图资源文件
.addClasspathResource("diagrams/StudentLeave10.bpmn")
//加载流程图片
.addClasspathResource("diagrams/StudentLeave10.png")
//流程名称
.name("leave10")
//部署流程
.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("StudentLeaveProcess10");
System.out.println(pi.getId());
System.out.println(pi.getProcessDefinitionId());
}
/**
* 查看任务
*/
@Test
public void findTaskList(){
//获取任务列表的service
List<Task> taskList=processEngine.getTaskService()
//创建任务查询
.createTaskQuery()
//指定任务的执行人
.taskAssignee("xiaoliu001")
.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:160004
任务名称:leave001
任务创建时间:Tue Apr 24 17:19:17 CST 2018
任务委派人:xiaoliu001
任务流程实例Id:160001
说明是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 StudentLeaveProcess10 {
//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
/**
* 部署流程定义
*/
@Test
public void deploy() {
//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
Deployment deployment=processEngine.getRepositoryService()
//创建部署
.createDeployment()
//加载流程图资源文件
.addClasspathResource("diagrams/StudentLeave10.bpmn")
//加载流程图片
.addClasspathResource("diagrams/StudentLeave10.png")
//流程名称
.name("leave10")
//部署流程
.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("userId", "xiaoliu002");
//运行启动流程的servicee
ProcessInstance pi=processEngine.getRuntimeService()
//定义流程表的KEY字段值,key值是我们前面定义好的key,可在act_re_procdef表中的key_字段中找到,
.startProcessInstanceByKey("StudentLeaveProcess10",variables);
System.out.println(pi.getId());
System.out.println(pi.getProcessDefinitionId());
}
/**
* 查看任务
*/
@Test
public void findTaskList(){
//获取任务列表的service
List<Task> taskList=processEngine.getTaskService()
//创建任务查询
.createTaskQuery()
//指定任务的执行人
.taskAssignee("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());
}
}
依次执行上面代码,最后查看任务可以看出流程的执行人已经是xiaoliu002了。
使用监听器设置执行人:
首先写一个监听器类:
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) {//DelegateTask 代理任务对象
// TODO Auto-generated method stub
delegateTask.setAssignee("liu001");//指定办理人
// delegateTask.addCandidateUser("liu002");
}
}
然后再复制一个流程图,做如下修改,把我们刚才新建的类放进去
完了再写测试类:
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 StudentLeaveProcess11 {
//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
/**
* 部署流程定义
*/
@Test
public void deploy() {
//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
Deployment deployment=processEngine.getRepositoryService()
//创建部署
.createDeployment()
//加载流程图资源文件
.addClasspathResource("diagrams/StudentLeave11.bpmn")
//加载流程图片
.addClasspathResource("diagrams/StudentLeave11.png")
//流程名称
.name("leave11")
//部署流程
.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("StudentLeaveProcess11");
System.out.println(pi.getId());
System.out.println(pi.getProcessDefinitionId());
}
/**
* 查看任务
*/
@Test
public void findTaskList(){
//获取任务列表的service
List<Task> taskList=processEngine.getTaskService()
//创建任务查询
.createTaskQuery()
//指定任务的执行人
.taskAssignee("liu001")
.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());
}
}}
最后的查看任务方法也是有数据的。
说明就
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/106137.html原文链接:https://javaforall.cn
边栏推荐
- C语言的高级用法
- 正则表达式replaceFirst()方法具有什么功能呢?
- 皕杰报表的下拉框联动
- 无题二
- First Decentralized Heist?Loss of nearly 200 million US dollars: analysis of the attack on the cross-chain bridge Nomad
- 2022 Huashu Cup Mathematical Modeling Ideas Analysis and Exchange
- 蚁剑webshell动态加密连接分析与实践
- What is the function of the regular expression replaceAll() method?
- Offensive World-PWN-new_easypwn
- Introduction to SD NAND Flash!
猜你喜欢
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增加子模块/新节点的最小化的例子
leetcode: 529. 扫雷游戏
The century-old Nordic luxury home appliance brand ASKO smart wine cabinet in the three-temperature area presents the Chinese Valentine’s Day, and tastes the love of the delicacy
阿里顶级架构师多年总结的JVM宝典,哪里不会查哪里!
首次去中心化抢劫?近2亿美元损失:跨链桥Nomad 被攻击事件分析
Introduction to SD NAND Flash!
【MindSpore易点通机器人-01】你也许见过很多知识问答机器人,但这个有点不一样
自定义过滤器和拦截器实现ThreadLocal线程封闭
High-quality DeFi application building guide to help developers enjoy DeFi Summer
随机推荐
长达四年的减肥记录
【MindSpore Easy-Diantong Robot-01】You may have seen many knowledge quiz robots, but this one is a bit different
static linking and dynamic linking
基于MindSpore高效完成图像分割,实现Dice!
七夕浪漫约会不加班,RPA机器人帮你搞定工作
【Unity】【UGUI】【在屏幕上显示文本】
IDEA执行Test操作导致数据插入时出现了重复数据
[Office] Collection of Microsoft Office download addresses (offline installation and download of Microsoft's official original version)
What is SPL?
韦东山 数码相框 项目学习(六)tslib的移植
【MindSpore易点通机器人-01】你也许见过很多知识问答机器人,但这个有点不一样
无题八
Egg framework usage (2)
js hijacks the array push method
Seata source code analysis: initialization process of TM RM client
Qiu Jun, CEO of Eggplant Technology: Focus on users and make products that users really need
[强网杯2022]WP-UM
无题三
egg框架使用(二)
手写柯里化 - toString 理解