由于工作需要,最近在jbpm基础上进行工作流系统开发。在开发过程中发现TaskInstance有两个方法setVariable()和setVariableLocally()非常相象,一直没搞明白有何区别。今天写了个测试程序,终于弄懂了两者的区别。
测试程序部分代码:
processinstance.signal();
// jbpmContext.save(processinstance);
Collection co = processinstance.getTaskMgmtInstance()
.getTaskInstances();
Iterator it = co.iterator();
TaskInstance ti = (TaskInstance) it.next();
ti.setVariable("Variable.setVariable", "setVariable");
ti.setVariableLocally("Variable.setLocally", "setLocally");
ti.end();
co = processinstance.getTaskMgmtInstance().getTaskInstances();
it = co.iterator();
ti = (TaskInstance) it.next();
ti.setVariable("Variable.setVariable", "setVariable2");
ti.setVariableLocally("Variable.setLocally", "setLocally2");
jbpmContext.close();此时数据库中variableinstance表中的数据如下:

可以看出,setVariable()方法设置的变量是流程实例变量,其作用范围是整个流程实例;而setVariableLocally()方法设置的变量是任务实例变量,其作用范围只是该任务实例范围内。
但同时还有一个问题没搞清楚,当用setVariableLocally()设置变量时,有时会将第一个设置的变量值加入TokenVariableMap中,而有时又不会,现在还没找到原因,希望知道的高手能解释下。
JBPM流程变量解析
本文通过测试程序对比了JBPM中setVariable()与setVariableLocally()的区别:前者设置的变量作用于整个流程实例,后者仅限于当前任务实例。
2561

被折叠的 条评论
为什么被折叠?



