[关闭]
@ruoli 2016-08-19T11:12:52.000000Z 字数 2089 阅读 3634

Activiti流程变量详解

Activiti


1、1、什么事流程变量?

在流程执行或者任务执行的过程中,用于设置和获取变量,使用流程变量在流程传递的过程中传递业务参数。
对应的表:
act_ru_variable:正在执行的流程变量表
act_hi_varinst:流程变量历史表

2、setVariable和setVariableLocal的区别

setVariable

设置流程变量的时候,流程变量名称相同的时候,后一次的值替换前一次的值,此设置为全局设置,每一个Task都可以获取到。

setVariableLocal

针对特定Task环节设置的参数,获取时必须传入TaskID,当此环节完结后,就只能在历史中查询,好处是多个Task可以设置同名的参数而不影响,他们独立存在。
总结来说,setVariable作用域为整个流程实例,一此设置多次使用,setVariableLocal作用域为Task本身,一此设置一次使用。

参考示例代码

  1. /**
  2. * 设置流程变量
  3. */
  4. @Test
  5. public void variablesTest(){
  6. TaskService taskService = processEngine.getTaskService();
  7. String taskId = "5503";
  8. //私有变量:与任务ID绑定,任务私有变量,必须要当前的taskId才可以获取到
  9. taskService.setVariableLocal(taskId, "请假天数", 5);
  10. //全局变量:可在当前流程所有Task可获取
  11. taskService.setVariable(taskId, "请假日期", "2016/07/29");
  12. //获取私有变量
  13. String days =taskService.getVariableLocal(taskId, "请假天数").toString();
  14. //获取全局变量
  15. String time =taskService.getVariable(taskId, "请假日期").toString();
  16. System.out.println("请假天数:"+days);//请假天数:5
  17. System.out.println("请假日期:"+time);//请假日期:2016/07/29
  18. }

3、注意事项

在同一Task环节,getVariableLocal 和 getVariable 都可获取到本环节的所有参数(交叉获取),参考代码如下:

  1. @Test
  2. public void variablesTest(){
  3. TaskService taskService = processEngine.getTaskService();
  4. String taskId = "5503";
  5. //可通过getVariableLocal的形式获取到setVariable的全局变量
  6. taskService.setVariable(taskId, "请假天数", 1);
  7. String days1 =taskService.getVariableLocal(taskId, "请假天数").toString();
  8. System.out.println("请假天数:"+days1);//请假天数:1
  9. //可通过getVariable的形式获取到setVariableLocal的私有变量
  10. taskService.setVariableLocal(taskId, "请假天数", 2);
  11. String days2 =taskService.getVariable(taskId, "请假天数").toString();
  12. System.out.println("请假天数:"+days2);//请假天数:2
  13. }

如果同一Task环节,setVariable 和 setVariableLocal 同时设置了相同的参数名,则后面设置的值会覆盖前面的,代码如下:

  1. TaskService taskService = processEngine.getTaskService();
  2. String taskId = "5503";
  3. taskService.setVariable(taskId, "请假天数", 5);
  4. taskService.setVariableLocal(taskId, "请假天数", 10);
  5. String days1 =taskService.getVariableLocal(taskId, "请假天数").toString();
  6. String days2 =taskService.getVariable(taskId, "请假天数").toString();
  7. System.out.println("请假天数:"+days1+"-"+days2);
  8. //返回结果:请假天数:10-10

4、其他设置流程参数的方式及作用域

启动流程时设置,为全局变量,任意环节都可以获取。
Task完成时可设置,为全局变量,任意环节都可以获取。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注