流程变量是为了保障流程正常运行而创建的变量
可以定义多种类型

1、流程变量类型

如果将pojo类型作为流程变量,则必须实现序列化接口
添加序列化字段
private static final long serialVersionUID = 8935318654511183901L

支持如下类型:

  • String
  • Integer
  • short
  • long
  • double
  • boolean
  • date
  • binary
  • serializable

    2、流程变量作用域

    可以是一个流程实例(instance)或者是一个任务(task)或者一个执行实例(execution)

    1、global变量

    流程变量的默认作用域是流程实例
    当一个流程变量的作用域是流程实例时,可以称之为global变量
    global变量中的变量名称不能重复,后者会覆盖前者的值

    2、local变量

    任务和执行实例仅仅是针对一个任务和一个执行实例,范围没有global变量那么大
    称之为local变量
    local变量由于是在不同的任务或者执行实例中,作用域不会相互影响,所以变量命名可以重复,没有任何的影响,local变量名称可以和global的相同,不会存在影响

3、流程变量的使用方式

1、属性上使用UEL表达式

可以在流程属性上使用UEL表达式进行指定
例如:
${assignee}:可以对其进行动态分配

2、在连线上使用UEL表达式

在连线上使用UEL表达式可以作为连线跳转的条件,绝对流程的走向
例如:
${price>100}:只要满足条件了就会决定流程的走向 ,UEL表达式的结果必须是一个Boolean类型

4、global变量的使用

流程变量使用Map进行封装,变量同名会进行覆盖

1、流程启动时设置

流程变量的作用域是整个流程实例
startProcessInstanceByKey

2、任务完成时设置

taskService.complete()
在完成任务时设置变量,只有在该节点完成后其他节点才可以使用该变量
同名会进行覆盖

3、当前流程实例设置

流程实例必须保证没有完成
通过流程实例ID单独给一个执行实例设置变量

  1. String excutionId="";
  2. runtimeService.setVariable(excutionId,"variableName","variableValue");

4、当前任务设置

通过taskId设置流程变量

String taskId="";
taskService.setVariable(taskId,"variableName","variableValue");

5、local变量的使用

1、任务办理时设置

taskService.setVariableLocal(taskId,variableName,variableValue);
taskService.setVariablesLocal(taskId,variables);

每个任务都可以设置同名变量,该任务结束时流程变量删除,下一个任务无法访问,互不影响