flowable流程变量

设置全局流程变量

流程变量 : 是跟当前 流程实例 绑定的
流程变量会存放在 act_ru_variableact_hi_varinst 这两个表中
act_ru_variabletask_id_为null

  1. 启动时设置
 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);
        }
    }
  1. 通过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);

    }
  1. 完成任务时设置
    因为流程执行结束了,,设置的变量在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);
    }
  1. 通过流程来设置
    流程全局变量,,,和 流程相关,, 不属于某一个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);

临时变量怎么使用?????????