flowable流程变量
设置全局流程变量
流程变量 : 是跟当前 流程实例
绑定的
流程变量会存放在 act_ru_variable
和 act_hi_varinst
这两个表中
act_ru_variable
的task_id_
为null
- 启动时设置
HashMap<String, Object> map = new HashMap<>();
map.put("reason","no reason");
map.put("startTime","2023-1-20");
map.put("endTime","2023-1-21");
runtimeService.startProcessInstanceByKey("VariableDemo", map);
public void test03(){
// 根据 执行实例id 查找变量 act_ru_variable
List<Execution> list = runtimeService.createExecutionQuery().list();
System.out.println("list.size() = " + list.size());
for (Execution execution : list) {
// 查找指定变量
Object startTime = runtimeService.getVariable(execution.getId(), "startTime");
System.out.println(execution.getName()+"==========="+startTime);
Map<String, Object> map = runtimeService.getVariables(execution.getId());
System.out.println("map = " + map);
}
}
- 通过Task设置
public void test04(){
// task插入 也是 act_ru_variable 和 act_hi_varinst
// 插入的时候 task_id 是 null,,, 设置全局流程变量
Task task = taskService.createTaskQuery().taskAssignee("cc").singleResult();
taskService.setVariable(task.getId(),"hehe","123");
HashMap<String, Object> map = new HashMap<>();
map.put("birthday","11-02");
taskService.setVariables(task.getId(), map);
}
public void test05(){
// 根据task 查找变量: 根据taskId 找 执行实例Id ==》atc_ru_variable变量
Task task = taskService.createTaskQuery().taskAssignee("cc").singleResult();
Object birthday = taskService.getVariable(task.getId(), "birthday");
System.out.println("birthday = " + birthday);
Map<String, Object> map = taskService.getVariables(task.getId());
System.out.println("map = " + map);
}
- 完成任务时设置
因为流程执行结束了,,设置的变量在act_hi_varinst
中
public void test06(){
Task task = taskService.createTaskQuery().taskAssignee("cc").singleResult();
HashMap<String, Object> map = new HashMap<>();
map.put("status","complete");
taskService.complete(task.getId(), map);
}
- 通过流程来设置
流程全局变量,,,和 流程相关,, 不属于某一个task,,,但是可以通过执行实例来设置
public void test07(){
// 流程变量 : 是跟当前 流程实例 绑定的
List<Execution> list = runtimeService.createExecutionQuery().list();
for (Execution execution : list) {
runtimeService.setVariable(execution.getId(),"a","b");
}
}
设置本地流程变量
和某个具体的 task 绑定,在act_ru_variable
表中,task_id_
字段不为null
Task task = taskService.createTaskQuery().taskAssignee("cc").singleResult();
taskService.setVariableLocal(task.getId(),"sb","123");
本地流程变量获取,
public void test09(){
List<Execution> list = runtimeService.createExecutionQuery().list();
for (Execution execution : list) {
Object sb = runtimeService.getVariable(execution.getId(), "sb");
System.out.println("sb = " + sb);
}
Task task = taskService.createTaskQuery().taskAssignee("cc").singleResult();
// 涉及到多个sql
Object sb = taskService.getVariable(task.getId(), "sb");
System.out.println("sb = " + sb);
//
Object sb1 = taskService.getVariableLocal(task.getId(), "sb");
// 完成流程实例去设置 本地流程变量
HashMap<String, Object> map = new HashMap<>();
map.put("status","完成");
taskService.complete(task.getId(), map,true);
}
本地流程变量,,当前task执行完了,变量就会消失。。
为某一个 执行实例 设置变量,,不一定是 task
执行实例????? : 可以由多个 UserTask组成,,,多个UserTask的执行id 一样??
通过 runtimeService 设置 variable 通过 ExecutionId ,,, 因为ExecutionId是一致的,,可以获取同一个执行实例的 本地流程变量
Task zs = taskService.createTaskQuery().taskAssignee("zs").singleResult();
runtimeService.setVariableLocal(zs.getExecutionId(),"sb","123");
临时流程变量
临时变量不会存入数据库中
设置临时变量:
runtimeService.createProcessInstanceBuilder()
// 设置临时变量
.transientVariable("days",10)
.transientVariables(new HashMap<String,Object>())
.processDefinitionKey("VariableDemo")
.start();
Task task = taskService.createTaskQuery().taskAssignee("zs").singleResult();
HashMap<String, Object> transientVariables = new HashMap<>();
transientVariables.put("hehe","123");
taskService.complete(task.getId(),null, transientVariables);
临时变量怎么使用?????????