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变量的使用
1、流程启动时设置
流程变量的作用域是整个流程实例
startProcessInstanceByKey
2、任务完成时设置
taskService.complete()
在完成任务时设置变量,只有在该节点完成后其他节点才可以使用该变量
同名会进行覆盖
3、当前流程实例设置
流程实例必须保证没有完成
通过流程实例ID单独给一个执行实例设置变量
String excutionId="";
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);
每个任务都可以设置同名变量,该任务结束时流程变量删除,下一个任务无法访问,互不影响