⼯作流笔记第四天_流程变量
0、流程变量要⽤的表:
select * FROM act_ru_variable; -- 正在执⾏的流程变量表
select * FROM act_hi_varinst; -- 流程变量历史表
1、流程变量的作⽤:
(1)⽤来传递业务参数(⽐如请假天数,请假原因等);
(2)指定连线完成任务(同意和拒绝);
(3)动态指定任务的办理⼈.
2、加载路径:
(1)从classPath⽬录下加载指定名称的⽂件:
InputStream inbpmn = Class().getClassLoader().getResourceAsStream("diagrams/helloWord.bpmn");
InputStream inpng = Class().getClassLoader().getResourceAsStream("diagrams/helloWord.png");
(2)从classPath⽬录下加载指定名称的⽂件:
InputStream inputStreambpmn = Class().getResourceAsStream("/diagrams/processVariables.bpmn");
InputStream inputStreampng = Class().getResourceAsStream("/diagrams/processVariables.png");
(3)从当前包下加载指定名称的⽂件:
InputStream inputStreambpmn = Class().getResourceAsStream("diagrams/processVariables.bpmn");
InputStream inputStreampng = Class().getResourceAsStream("diagrams/processVariables.png");
3、⼯作流中变量的类型:
file:///D:/就业班/⼯作流/activiti-5.13/docs/userguide/index.html 从下载的⼯作流⽂件夹中查看,在这也页⾯中搜索 Variable Types
设置流程变量使⽤javaBean对象设置
当⼀个javaBean(实现序列化)放置到流程变量中,要求javaBean中的属性不能改变,如果改变再次获取时会报错
解决⽅案:在person对象中⽣成⼀个固定的序列化编号
4、注意:
//可以使⽤任务对象,也可以使⽤正在执⾏的服务对象设置或者获取设置的变量
//RuntimeService runtimeService = RuntimeService();
TaskService taskService = TaskService();
5、setVariable和setVariableLocal的区别
// 设置的变量与当前任务绑定,只有使⽤当前任务的id才能查询,当这个任务完成时下⼀个任务不能获取到当前任务设置的变量。
// taskService.setVariableLocal(taskId, "请假天数", 5);
setVariable:设置流程变量时当流程变量名称相同后⼀次设置的值会覆盖掉前⼀次设置的值,⽽且可以看到TASK_ID的字段上不会存放任务id值
setVariableLocal:与当前任务绑定,只有使⽤当前任务的id才能查询,当这个任务完成时下⼀个任务不
能获取到当前任务设置的变量。设置的值就算是名称相同也不会覆盖,会根据任务id存储。
6、代码:
package itheima.processDefinition;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.zip.ZipInputStream;
import ine.ProcessEngine;
import ine.ProcessEngines;
import ine.RuntimeService;
import ine.TaskService;
import ine.history.HistoricVariableInstance;
import pository.Deployment;
import org.junit.Test;
public class ProcessVariable {
// 获得⼯作流引擎对象
ProcessEngine processEngine = DefaultProcessEngine();
/* 部署流程定义(从inputStream中部署流程定义) */
@Test
public void deloymentProcessDefinitionFromZip() {
// 根据反射获取zip⽂件转换成对应的流
InputStream inputStreambpmn = Class().getResourceAsStream("/diagrams/processVariables.bpmn");
InputStream inputStreampng = Class().getResourceAsStream("/diagrams/processVariables.png");
// 部署对象
Deployment deploy = RepositoryService()// 与流程定义相关的service
.createDeployment()// 创建部署对象
.name("流程变量")// 添加部署名称
.addInputStream("processVariables.bpmn", inputStreambpmn)// 使⽤资源⽂件名称(要求:与资源⽂件
名称要⼀致)和输⼊流完成部署.addInputStream("processVariables.png", inputStreampng).deploy();// 完成部署;
System.out.println("部署id:" + Id());
System.out.println("部署名称:" + Name());
}
/* 启动流程实例 */
@Test
public void startProcessInstance() {
// 流程定义的key
String processDefinitionKey = "processVariables";
ine.runtime.ProcessInstance processInstance = RuntimeService()// 与正在执⾏的流程实例和流程对象有关的service
.startProcessInstanceByKey(processDefinitionKey);
// 使⽤流程定义的key启动流程实例,key与helloWord.bpmn中的id值相同
System.out.println("流程实例id:" + Id());
System.out.println("流程定义id:" + ProcessDefinitionId());
}
/* 完成我的任务 */
@Test
public void completeMyTask() {
// 任务id
String taskId = "1404";
.
complete(taskId);
System.out.println("完成任务,任务编号是:" + taskId);
}
/* 设置流程变量 */
@Test
public void setProcessVariable() {
// 获得任务的服务对象
TaskService taskService = TaskService();
// 任务id
String taskId = "1602";// 提交申请任务id
/*
* Map<String, Object> variables = new HashMap<>(); // 设置流程变量要使⽤基本数据类型
* variables.put("请假天数", 5);
* variables.put("请假开始时间", new Date());
* variables.put("请假原因", "回家探亲--改变");
* taskService.setVariables(taskId,variables);
*/
// 设置的变量与当前任务绑定,只有使⽤当前任务的id才能查询,当这个任务完成时下⼀个任务不能获取到当前任务设置的变量。// taskService.setVariableLocal(taskId, "请假天数", 5);
// 设置流程变量使⽤javaBean对象设置
/*
* 当⼀个javaBean(实现序列化)放置到流程变量中,要求javaBean中的属性不能改变,如果改变再次获取时会报错
* 解决⽅案:在person对象中⽣成⼀个固定的序列化编号
*/
//注意:前⼀次设置的值如果key相同会被后⼀次的值覆盖掉
Person person = new Person();
person.setId("6");
person.setName("使⽤⾃定义对象设置流程变量");
person.setAge(10);
taskService.setVariable(taskId, "⼈员信息", person);
System.out.println("设置变量成功!");
}
/* 获取流程变量 */
@Test
public void getProcessVariable() {
// 也可以使⽤正在执⾏的服务对象设置或者获取设置的变量
// RuntimeService runtimeService = RuntimeService();
// 获得任务的服务对象
TaskService taskService = TaskService();
// 任务id
String taskId = "1602";
// 根据任务id查询设置的变量值
/*
* Map<String, Object> variables = Variables(taskId); //
* 遍历map集合输出设置的变量值 Iterator<Entry<String, Object>> iterator =
* Set().iterator(); while (iterator.hasNext()) {
* Entry<String, Object> entry = ();
* System.out.Key() + ":" + Value()); }
*/
// 获取从javaBean对象中设置的流程变量
Person p = (Person) Variable(taskId, "⼈员信息");
System.out.Id() + ":" + p.getName() + ":" + p.getAge());
}
/* 查看历史流程变量的历史表 */
@Test
public void findHistoryProcessVariable() {
List<HistoricVariableInstance> list = HistoryService()// 获得历史流程对象
.createHistoricVariableInstanceQuery()// 创建历史查询变量对象
.variableName("请假天数")// 要查询的变量名称
.list();
if (list != null && list.size() > 0) {
for (HistoricVariableInstance his : list) {
System.out.Id() + " " + ProcessInstanceId() + " " + VariableName()
+ " " + VariableTypeName() + " " + Value());
}
}variable怎么记
}
}
package itheima.processDefinition;
import java.io.Serializable;
//要想使⽤⾃定义对象设置流程变量就要使⽤⼯作流变量规定的类型,其中有⼀个实现序列化的类型public class Person implements Serializable{
/**
* ⽣成序列化id
*/
private static final long serialVersionUID = 1L;
private String id;
private String name;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论