流程变量其实是一个需要用户填写的变量。拿请假来说,请假原因,请假时间,请假人等信息都是用户自己写的,可是这个请假的流程实例是一个,它是不会变的。如果总经理没空办理这个请假审批,他还可以通过流程变量指定某一个人来处理这个审批,使activiti工作流更加的灵活。
也因此:
流程变量会有作用范围:一个流程变量对一个一个流程实例。
而且各个流程实例的流程变量是互相不影响的。
流程变量的作用:
1、用来传递业务参数
2、指定下一个连线对应的流程对象完成任务
3、动态的指定任务的办理人
流程变量有3中设置方法:
/**与流程实例,执行对象(正在执行)*/ RuntimeService runtimeService =processEngine.getRuntimeService(); /**与任务*/ TaskService taskService =processEngine.getTaskService();
//设置流程变量的方法(3种) //1、设置流程变量 runtimeService.setVariable(executionId, variableName, value);//表示使用执行对象ID,和流程变量的名称,设置流程变量的值(一次一个) runtimeService.setVariables(executionId, variables);//使用执行对象ID,和Map集合设置流程变量,map集合的key就是流程变量的名称,value就是流程变量的值(可设置多个)
//2、设置任务的流程变量 taskService.setVariable(executionId, variableName, value);//表示使用任务ID,和流程变量的名称,设置流程变量的值(一次一个) taskService.setVariables(executionId, variables);//使用任务ID,和Map集合设置流程变量,map集合的key就是流程变量的名称,value就是流程变量的值(可设置多个)
//3、还可以任务完成时设置 runtimeService.startProcessInstanceByKey(processDefinitionKey, variables);//启动流程的同时设置流程变量,用Map集合 taskService.complete(taskId, variables);//完成任务的同时,设置流程变量,用Map集合 |
上面示例中的map中的value值,也可以是javabean:
示例如下:
/**设置流程变量*/ public void setVariables(){ TaskService taskService =processEngine.getTaskService(); //任务id String taskId="1504"; //设置流程变量 //taskService.setVariableLocal(taskId, "请假天数", 3);//local表示与当前任务ID绑定 taskService.setVariable(taskId, "请假天数", 3); taskService.setVariable(taskId, "请假日期", new Date()); taskService.setVariable(taskId, "请假原因", "回家看病");
//第二种使用javabean设置,Javabean需要实现Serializable接口 //使用javabean设置流程变量 Person p =new Person(); p.setId(10); p.setName("婉儿"); taskService.setVariable(taskId, "人员信息", p);
} |
获取流程变量的方法:
/*********获取流程变量*****/ runtimeService.getVariable(executionId, variableName);//使用执行对象id和变量名称,获取变量值 runtimeService.getVariables(executionId);//使用执行对象id,获取所有流程变量,放到map 中 runtimeService.getVariables(executionId, variableNames);//使用执行对象id,获取流程变量的值。但是可以通过设置流程变量的名称存放到集合中,获取指定流程变量名称的流程变量的值。
taskService.getVariable(executionId, variableName);//使用任务id和变量名称,获取变量值 taskService.getVariables(executionId);//使用任务id,获取所有流程变量,放到map 中 taskService.getVariables(executionId, variableNames);//使用任务id,获取流程变量的值。但是可以通过设置流程变量的名称存放到集合中,获取指定流程变量名称的流程变量的值。 |
示例如下:
/**获取流程变量*/ public void getVariables(){ TaskService taskService =processEngine.getTaskService(); //任务id String taskId="1504"; //获取流程变量,使用基本数据类型 Integer days=(Integer)taskService.getVariable(taskId, "请假天数"); Date date=(Date)taskService.getVariable(taskId, "请假日期"); String reason=(String)taskService.getVariable(taskId, "请假原因"); //使用Javabean获取 Person p =(Person)taskService.getVariable(taskId, "人员信息");
} |
流程变量的类型: