Encountered confusion between global and local variables when using activiti7.1.0M6

38 Views Asked by At

I have encountered some issues using the setVariable and setVariableLocal methods. The information I have obtained from reviewing the materials is that the properties set using the setVariableLocal method are usually associated with the task node and are valid on the associated task node. But I found through testing that variables set using setVariableLocal will appear in process variables (global variables). I don't know why

A simple process design

start->a_ask_for_leave->b_approve->c_approve->d_approve->end

The test code is as follows

    @Override
    public AjaxResult test() {
        // Start the process and Set the initial parameters
        Map<String, Object> initMap = new HashMap<>();
        initMap.put("init", "init_value");
        ProcessInstance processInstance = this.runtimeService.startProcessInstanceByKey("zhangsan_test", "zs008", initMap);

        while (getTask(processInstance) != null) {
            Task task = getTask(processInstance);

            // Set variables for the current task node
            taskService.setVariable(task.getId(), task.getName() + "_global", task.getName() + "_global");
            taskService.setVariableLocal(task.getId(), task.getName() + "_local", task.getName() + "_local");


            // Print variables
            String id = task.getId();
            log.info("id:{}", id);
            log.info("name:{}", task.getName());
            log.info("processVariables:{}", taskService.getVariables(task.getId()));
            log.info("taskLocalVariables:{}", taskService.getVariablesLocal(task.getId()));

            // Complete the task
            this.taskService.complete(task.getId());
        }

        return AjaxResult.success();
    }


    Task getTask(ProcessInstance processInstance) {
        Task task = this.taskService.createTaskQuery().processDefinitionId(processInstance.getProcessDefinitionId()).processInstanceId(processInstance.getId()).includeTaskLocalVariables().includeProcessVariables().singleResult();
        return task;
    }

The output results are as follows

11:52:51.845   - id:2526b917-658e-11ee-811c-12b1df80d923
11:52:51.845   - name:a_ask_for_leave
11:52:52.201   - processVariables:{init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, a_ask_for_leave_global=a_ask_for_leave_global}
11:52:52.318   - taskLocalVariables:{init=init_value, a_ask_for_leave_local=a_ask_for_leave_local}

11:52:56.819   - id:287065e3-658e-11ee-811c-12b1df80d923
11:52:56.819   - name:b_approve
11:52:57.183   - processVariables:{b_approve_global=b_approve_global, init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, b_approve_local=b_approve_local, a_ask_for_leave_global=a_ask_for_leave_global}
11:52:57.310   - taskLocalVariables:{init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, b_approve_local=b_approve_local, a_ask_for_leave_global=a_ask_for_leave_global}

11:53:02.213   - id:2b47c8e5-658e-11ee-811c-12b1df80d923
11:53:02.214   - name:c_approve
11:53:02.693   - processVariables:{b_approve_global=b_approve_global, init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, c_approve_global=c_approve_global, b_approve_local=b_approve_local, a_ask_for_leave_global=a_ask_for_leave_global, c_approve_local=c_approve_local}
11:53:02.816   - taskLocalVariables:{b_approve_global=b_approve_global, init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, b_approve_local=b_approve_local, a_ask_for_leave_global=a_ask_for_leave_global, c_approve_local=c_approve_local}

11:53:08.949   - id:2e9c713d-658e-11ee-811c-12b1df80d923
11:53:08.949   - name:d_approve
11:53:09.293   - processVariables:{b_approve_global=b_approve_global, init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, c_approve_global=c_approve_global, d_approve_global=d_approve_global, b_approve_local=b_approve_local, a_ask_for_leave_global=a_ask_for_leave_global, c_approve_local=c_approve_local, d_approve_local=d_approve_local}
11:53:09.409   - taskLocalVariables:{b_approve_global=b_approve_global, init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, c_approve_global=c_approve_global, b_approve_local=b_approve_local, a_ask_for_leave_global=a_ask_for_leave_global, c_approve_local=c_approve_local, d_approve_local=d_approve_local}

The version information is as follows

<activiti-version>7.1.0.M6</activiti-version> <spring-boot-version>2.7.0</spring-boot-version>

I hope that local variables are only valid at the specified task node

0

There are 0 best solutions below