当前位置:网站首页>第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」
第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」
2022-08-05 10:05:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
上一章我们介绍了部署流程实例,启动流程,查看任务,完成任务的service和实例,下面我们介绍下怎么获取流程中需要传递的变量。
开始前,先撸一遍流程的任务节点名和任务委派人:
流程图如上,三个任务节点名分别是leave001,leave002,leave003,因为我的Navicat不能看流程中的汉字所以可以简单理解为三个请假流程,请假001,请假002,请假003.
然后看任务委派人:
分别是xiaoliu001,xiaoliu002,xiaoliu003;
好了,下面开始介绍流程变量的传递了:
承接上一章:
/**
* 设置流程变量数据
*/
@Test
public void setVariableValues(){
TaskService taskService=processEngine.getTaskService();//获取任务
String taskId="";//更加任务id知道是哪个人物,设置流程变量。可以更加查看任务方法查看任务的id,可以到数据库直接看
//下面设置任务的内容,比如请假流程,任务的第一节点也就是申请人要写请节哀的原因
taskService.setVariable(taskId, "days", 2);//请假天数
taskService.setVariable(taskId, "date", new Date());//请假日期
taskService.setVariable(taskId, "reason", "发烧");//请假原因
//下面我们再测试一个额外的知识点,就是流程传输变量,这里我们再新建一个student对象,对象有id 和name两个属性,还有就是序列化传输
Student student=new Student();
student.setId(1);
student.setName("zhangsan");
taskService.setVariable(taskId, "student",student);//序列化对象
}上面是设置流程变量。
下面获取流程变量:
/**
* 获取流程变量数据
*/
@Test
public void getVariableValues(){
TaskService taskService=processEngine.getTaskService();//获取任务
String taskId="";
Integer day=(Integer) taskService.getVariable(taskId, "days");//获取请假天数
Date date=(Date) taskService.getVariable(taskId, "date");//请假日期
String reason=(String) taskService.getVariable(taskId, "reason");//请假原因
Student student2=(Student) taskService.getVariable(taskId, "student");//序列化对象
System.out.println("请假天数:"+day);
System.out.println("请假日期:"+date);
System.out.println("请假原因:"+reason);
System.err.println("请假对象:"+student2.getId()+",,,"+student2.getName());
}然后,就启动流程了,启动前我们先打开数据库,可以先看看act_ru_task任务表,此时没有任务,这个表应该是空的。
下面启动流程:
这运行start方法:
此时任务表有了一条数据,
然后执行查看任务方法,看看任务id:
结果如下:
任务ID:12504
任务名称:leave001
任务创建时间:Sun Apr 22 12:40:52 CST 2018
任务委派人:xiaoliu001
任务流程实例Id:12501也可看任务表的ID_字段值。
然后把这个值放到刚才我们写的设置流程变量的方法中:
、
执行上面的方法,成功后我们看看数据库的act_ru_variable表会有我们设置的几个变量:
然后我们继续往下走,执行完成任务方法,注意修改任务id哦
完成后任务到了leave002节点,
这里我们直接看数据的任务id是多少:
17502,然后我们那这个任务id去执行我们刚才写的获取流程变量的方法:
执行结果是:
请假天数:2
请假日期:Sun Apr 22 12:47:58 CST 2018
请假原因:faShao
请假对象:1,,,zhangsan结果是我们设进去的值。说明没问题。
然后再执行完成方法,流程到leave003任务节点,然后再获取流程变量数据。
结果:
请假天数:2
请假日期:Sun Apr 22 12:47:58 CST 2018
请假原因:faShao
请假对象:1,,,zhangsan也是同样能获得的。
最后再complete完成方法,执行完流程,流程结束:
任务表清空。
下面再介绍一种可以设置多个变量的方法:
/**
* 设置多个流程变量数据
*/
@Test
public void setVariableValue1(){
TaskService taskService=processEngine.getTaskService();//获取任务
String taskId="25004";//更加任务id知道是哪个人物,设置流程变量。可以更加查看任务方法查看任务的id,可以到数据库直接看
//下面设置任务的内容,比如请假流程,任务的第一节点也就是申请人要写请节哀的原因
// taskService.setVariable(taskId, "days", 2);//请假天数
// taskService.setVariable(taskId, "date", new Date());//请假日期
// taskService.setVariable(taskId, "reason", "faShao");//请假原因
//下面我们再测试一个额外的知识点,就是流程传输变量,这里我们再新建一个student对象,对象有id 和name两个属性,还有就是序列化传输
Student student2=new Student();
student2.setId(1);
student2.setName("zhangsan");
taskService.setVariable(taskId, "student",student2);//序列化对象
Map<String, Object> variables=new HashMap<String,Object>();
variables.put("days", 3);
variables.put("date",new Date());
variables.put("reason", "faShao2");
variables.put("student", student2);
taskService.setVariables(taskId, variables);
}
/**
* 获取多个流程变量数据
*/
@Test
public void getVariableValue(){
TaskService taskService=processEngine.getTaskService();//获取任务
String taskId="25004";
Map<String, Object> variables=taskService.getVariables(taskId);
Integer day=(Integer) variables.get("days");//获取请假天数
Date date=(Date) variables.get("date");//请假日期
String reason=(String) variables.get("reason");//请假原因
Student student2=(Student) variables.get("student");//序列化对象
System.out.println("请假天数:"+day);
System.out.println("请假日期:"+date);
System.out.println("请假原因:"+reason);
System.err.println("请假对象:"+student2.getId()+",,,"+student2.getName());
}测试过程跟之前的一样,最后获取的结果是:
请假天数:3
请假日期:Sun Apr 22 13:09:22 CST 2018
请假原因:faShao2
请假对象:1,,,zhangsan跟设置的一样。
下面再介绍一个局部变量,就是设置的变量值只在当前节点有效,当流程走到下一个节点时,是获取不到这个值的。
/**
* 设置流程局部变量数据
*/
@Test
public void setVariableLocalValue(){
TaskService taskService=processEngine.getTaskService();//获取任务
String taskId="25004";//更加任务id知道是哪个人物,设置流程变量。可以更加查看任务方法查看任务的id,可以到数据库直接看
//下面设置任务的内容,比如请假流程,任务的第一节点也就是申请人要写请节哀的原因
taskService.setVariableLocal(taskId, "days", 2);//请假天数
taskService.setVariable(taskId, "date", new Date());//请假日期
taskService.setVariable(taskId, "reason", "faShao");//请假原因
//下面我们再测试一个额外的知识点,就是流程传输变量,这里我们再新建一个student对象,对象有id 和name两个属性,还有就是序列化传输
Student student=new Student();
student.setId(1);
student.setName("zhangsan");
taskService.setVariable(taskId, "student",student);//序列化对象
}
/**
* 获取流程变量数据
*/
@Test
public void getVariableLocalValues(){
TaskService taskService=processEngine.getTaskService();//获取任务
String taskId="32502";
Integer day=(Integer) taskService.getVariableLocal(taskId, "days");//获取请假天数
Date date=(Date) taskService.getVariable(taskId, "date");//请假日期
String reason=(String) taskService.getVariable(taskId, "reason");//请假原因
Student student2=(Student) taskService.getVariable(taskId, "student");//序列化对象
System.out.println("请假天数:"+day);
System.out.println("请假日期:"+date);
System.out.println("请假原因:"+reason);
System.err.println("请假对象:"+student2.getId()+",,,"+student2.getName());
}这里代码值改了请假天数的值,并使用了setVariablesLocal()方法。先运行设置局部流程变量方法,发现数据库的变量表会多出一个请假天数的数据:
然后执行获取方法:
请假对象:1,,,zhangsan
请假天数:2
请假日期:Sun Apr 22 13:24:02 CST 2018
请假原因:faShao请假的天数是2覆盖了数据库中另一个请假天数的值。然后执行complete()方法完成任务。
再次执行获取方法,结果:
请假天数:null
请假日期:Sun Apr 22 13:24:02 CST 2018
请假原因:faShao
请假对象:1,,,zhangsan请假天数变成了空。
数据库的变量表也少了一条数据。
好了,这就是流程局部变量了。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/106144.html原文链接:https://javaforall.cn
边栏推荐
- 新白娘子传奇系列
- 19.服务器端会话技术Session
- 【zeno】为zeno增加子模块/新节点的最小化的例子
- 力扣(LeetCode)216. 组合总和 III(2022.08.04)
- [Unity] [UGUI] [Display text on the screen]
- Handwriting Currying - toString Comprehension
- 高质量 DeFi 应用构建指南,助力开发者玩转 DeFi Summer
- IO流篇 -- 基于io流实现文件夹拷贝(拷贝子文件夹及子文件夹内文件)满满的干货
- uniapp 连接ibeacon
- DFINITY 基金会创始人谈熊市沉浮,DeFi 项目该何去何从
猜你喜欢

什么是CRM决策分析管理?

egg框架使用(二)

5.部署web项目到云服务器

JS逆向入门学习之回收商网,手机号码简易加密解析

皕杰报表的下拉框联动

Bias lock/light lock/heavy lock lock is healthier. How is locking and unlocking accomplished?

华为轻量级神经网络架构GhostNet再升级,GPU上大显身手的G-GhostNet(IJCV22)

three objects are arranged in a spherical shape around the circumference

mysql索引

How can project cost control help project success?
随机推荐
js劫持数组push方法
three物体围绕一周呈球形排列
【Unity】【UGUI】【在屏幕上显示文本】
Our Web3 Entrepreneurship Project, Yellow
2022.8.3
无题七
5. Deploy the web project to the cloud server
STM32+ULN2003驱动28BYJ4步进电机(根据圈数正转、反转)
七夕浪漫约会不加班,RPA机器人帮你搞定工作
正则表达式replaceFirst()方法具有什么功能呢?
matcher中find,matches,lookingAt匹配字符串的不同之处说明
Why are RELTABLESPACE values 0 for many tables displayed in sys_class?
【AGC】增长服务1-远程配置示例
歌词整理
High-quality DeFi application building guide to help developers enjoy DeFi Summer
NowCoderTOP35-40——持续更新ing
What is the function of the regular expression replaceAll() method?
【MindSpore易点通机器人-01】你也许见过很多知识问答机器人,但这个有点不一样
无题一
MySQL advanced (twenty-seven) database index principle