24、Camunda 流程变量作用域

流程变量

  • 流程变量作用域记录
  • 案例流程变量作用域测试
    • 流程变量作用域在多实例中
    • 流程变量在子流程中

流程变量作用域记录

  1. 流程变量作用域和当前活动ID识别目标作用域,当前活动ID可能是执行器ID、或多实例ID,具体需看具体流程分支。
  2. execution.setVariable()会在当前活动ID(执行器ID)下记录变量,如果当前执行器有父执行器ID会写入到父执行器ID下。这也就是在子流程中设置的变量在父流程中可获取到的原因。父执行器下的变量共享到子执行器下的变量
  3. execution.setVariableLocal() local可直接指定当前变量作用域,写入变量时,会直接写入到当前执行器ID下,不会找父执行器。这也就是在子流程中设置的变量,在父流程中获取不到。通常用于子流程中设置的变量,只在子流程中使用,不让暴露到父流程中
  4. 瞬时变量只会在当前事务中有效,事务提交后就会被删除,不会存储到数据库中,不推荐使用。设置变量时,变量值类型时TypedValue类型,并且设置属性isTransient=true时,此时的变量就是瞬时变量。execution.setVariable("task4_Transient",Variables.stringValue("444",true));
  5. execution.setVariable()execution.setVariableLocal() 设置的变量名称一样,并且作用域一样时,会相互覆盖
  6. 变量作用域可通过表字段 act_ru_variable.var_scope_act_hi_varinst.act_inst_id_act_hi_detail.var_inst_id_ 判断是否同一个作用域

案例流程变量作用域测试

定义一下groovy脚本,分别在流程脚本任务中设置变量、获取变量,打印变量输出,判断流程变量作用域。下面脚本只是案例,需要拆开分别设置到不同Task上

package cn.maitian.bss.hr.test.camunda.groovy

import org.camunda.bpm.engine.delegate.DelegateExecution
import org.camunda.bpm.engine.variable.Variables
import org.camunda.bpm.engine.variable.value.BooleanValue

/**
 * Groovy脚本测试
 */
class GroovyTest {
    public static void main(String[] args) {
        //1、流程:变量作用域测试  Process_Varias_Test  流程变量作用域测试
        //2、流程:流程变量作用域2   Process_Variable_Test2
        DelegateExecution execution=null;

        //任务1
        String activityName=execution.currentActivityName;
        println "当前任务名称:"+activityName+"--"+execution.processInstanceId+">>"+execution.currentTransitionId;
        execution.setVariable("globalVariable","1");
        execution.setVariableLocal("globalLocalVar","10");
        BooleanValue booleanValue= Variables.booleanValue(true,true);
        execution.setVariable("globalTransient",booleanValue);

        //任务2
        println "当前任务名称:"+execution.currentActivityName+"--"+execution.processInstanceId+">>"+execution.currentTransitionId;
        execution.setVariable("task2_Variable","2");
        execution.setVariableLocal("task2_LocalVar","20");
        execution.setVariable("task2_Transient",Variables.stringValue("222",true));

        println "globalVariable"+"--"+execution.getVariable("globalVariable")
        println "globalLocalVar"+"--"+execution.getVariableLocal("globalLocalVar")
        println "globalTransient"+"--"+execution.getVariable("globalTransient")

        //任务3
        println "当前任务名称:"+execution.currentActivityName+"--"+execution.processInstanceId+">>"+execution.currentTransitionId;
        execution.setVariable("task3_Variable","3");
        execution.setVariableLocal("task3_LocalVar","30");
        execution.setVariable("task3_Transient",Variables.stringValue("333",true));

        println "globalVariable"+"--"+execution.getVariable("globalVariable")
        println "globalLocalVar"+"--"+execution.getVariableLocal("globalLocalVar")
        println "globalTransient"+"--"+execution.getVariable("globalTransient")


        println "task2_Variable"+"--"+execution.getVariable("task2_Variable")
        println "task2_LocalVar"+"--"+execution.getVariableLocal("task2_LocalVar")

        //任务4
        println "当前任务名称:"+execution.currentActivityName+"--"+execution.processInstanceId+">>"+execution.currentTransitionId;
        execution.setVariable("task4_Variable","4");
        execution.setVariableLocal("task4_LocalVar","40");
        execution.setVariable("task4_Transient",Variables.stringValue("444",true));

        println "globalVariable"+"--"+execution.getVariable("globalVariable")
        println "globalLocalVar"+"--"+execution.getVariableLocal("globalLocalVar")
        println "globalTransient"+"--"+execution.getVariable("globalTransient")


        println "task2_Variable"+"--"+execution.getVariable("task2_Variable")
        println "task2_LocalVar"+"--"+execution.getVariableLocal("task2_LocalVar")
        println "task2_Transient"+"--"+execution.getVariableLocal("task2_Transient")

        println "task3_Variable"+"--"+execution.getVariable("task3_Variable")
        println "task3_LocalVar"+"--"+execution.getVariableLocal("task3_LocalVar")
        println "task3_Transient"+"--"+execution.getVariableLocal("task3_Transient")

    }
}

流程变量作用域在多实例中

24、Camunda 流程变量作用域_第1张图片

流程变量在子流程中

24、Camunda 流程变量作用域_第2张图片24、Camunda 流程变量作用域_第3张图片

你可能感兴趣的:(Activiti7,与,SpringBoot,spring,spring,boot,java)