activity流程变量

548 阅读2分钟

「这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

流程变量是什么?

流程变量在整个执行的流程中非常重要。
例如:请假流程中有请假天数,请假原因等都可以作为流程变量的范围。

作用范围

流程变量的作用返回只限于该流程实例,也就是说(张三请假,那么张三的流程变量就不能被李四使用)

保存

流程实例结束后流程变量仍然保存在数据库中的流程变量的历史表中

流程变量怎么用?

一般在审批申请的时候向数据库中存储流程变量的值。

流程变量以键值对的形式存放流程变量,也就是需要使用map对象

流程变量支持所有的类型的存储,即使是对象的类型,也可以使对象实现序列化的接口,这一步也是可以存储的,只是存储的是一个二进制表中对应id,对应的二进制表中就多了一条数据

使用

主要操作act_ru_variableact_hi_varinst

设置流程变量

在启动流程的时候就可以设置流程变量信息
//这个variables可以是所有的基本类型,map类型,序列化类型,基本所有的类型都支持,还支持二进制文件类型
runtimeService.startProcessInstanceByKey(processDefinitionKey,variables);

如果variable是map类型,那么一个键值对就对应数据库表中的一个字段(act_ru_variables)

在流程执行期间使用runtimeService设置
runtimeService.setVariable(ExecutionId,Key,values);//只能使用键值对的形式传入一个记录
runtimeService.setVariables(ExecutionId,variables);//可以传入一个variable对象,也就是什么类型都可以存放
//如果使用key是一样的,那么就会使数据覆盖
在流程执行期间使用TaskService设置
taskService.setVariable(ExecutionId,Key,values);
taskService.setVariables(ExecutionId,variables);

获取流程变量

需要,流程对象ID,变量需要的key

runtimeService.getVariable(executionId,key);//使用强制转换就可以转换成对应需要的value

//如果是获取其中的对象信息,就要求查询出来的还是原来那个系列化id,所以可以给一个序列化id在对象中

查询历史变量(act_hi_varinst)

histroyService.createHistoricVariableInstanceQuery().id("对应数据库中主键id").singleResult();
//基本和之前查询流程实例信息是一样的,组装条件就完了

总结

  1. 流程变量
    在流程执行或者任务执行的过程中,用于设置和获取变量,使用流程变量在流程传递的过程中传递业务参数。
    对应使用的数据库的表是act_ru_variable正在执行的流程变量表,act_hi_varinst历史流程变量表
  2. 扩展:在使用taskService的时候,可以使用setVariableLocal来设置一个可以作为分支的变量,这样可以方便进行分支的返回