如何在 JBPM 6 中获取和设置流程的局部变量列表?
How to get and set Local Variable List for a process in JBPM 6?
有没有办法通过 JBPM 6 中的代码获取和设置 global/local 变量列表?
我看到了 JBPM 第 3 版的文档,如下所示:
ProcessInstance processInstance = ...;
ContextInstance contextInstance = (ContextInstance) processInstance.getInstance(ContextInstance.class);
但这似乎已被弃用,并给我一个错误。
此外,我可以使用
通过 bpmn 编辑器设置变量
kcontext.setVariable("isApproved", false);
但我不太确定如何在代码中检索此 kcontext
变量。我经历了 KieSession
对象和 ProcessInstance
对象的 getter 方法,但没有运气。
更新:
我可以通过传递给 ksession.startProcess(...)
方法的 params
映射对象访问这些局部变量。这是 get/set local/global 变量列表的唯一方法吗?
谢谢!
参见this thread,可以在KieSession中执行此命令访问进程实例变量:
Map<String, Object> variables = ksession.execute(new GenericCommand<Map<String, Object>>() {
public Map<String, Object> execute(Context context) {
StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
ProcessInstance processInstance = (ProcessInstance) ksession.getProcessInstance(piId);
VariableScopeInstance variableScope = (VariableScopeInstance) processInstance.getContextInstance(VariableScope.VARIABLE_SCOPE);
Map<String, Object> variables = variableScope.getVariables();
return variables;
}
});
如果您只想获得一个给定的过程变量:
WorkflowProcessInstance p = (WorkflowProcessInstance)ksession.startProcess("the.process");
p.getVariable("the_process_variable")
要获取所有全局变量,请使用 ksession.getGlobals()
。
这是我访问过程变量的方式
String variableName = "Your_Variable_Name_here";
KieSession ksession = runtime.getKieSession();
ProcessInstance pi = ksession.getProcessInstance(processInstanceId);
RuleFlowProcessInstance rfpi = (RuleFlowProcessInstance)pi;
Object variable = rfpi.getVariable(variableName);
然后您应该将变量转换为正确的 class。
有没有办法通过 JBPM 6 中的代码获取和设置 global/local 变量列表?
我看到了 JBPM 第 3 版的文档,如下所示:
ProcessInstance processInstance = ...;
ContextInstance contextInstance = (ContextInstance) processInstance.getInstance(ContextInstance.class);
但这似乎已被弃用,并给我一个错误。
此外,我可以使用
通过 bpmn 编辑器设置变量kcontext.setVariable("isApproved", false);
但我不太确定如何在代码中检索此 kcontext
变量。我经历了 KieSession
对象和 ProcessInstance
对象的 getter 方法,但没有运气。
更新:
我可以通过传递给 ksession.startProcess(...)
方法的 params
映射对象访问这些局部变量。这是 get/set local/global 变量列表的唯一方法吗?
谢谢!
参见this thread,可以在KieSession中执行此命令访问进程实例变量:
Map<String, Object> variables = ksession.execute(new GenericCommand<Map<String, Object>>() {
public Map<String, Object> execute(Context context) {
StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
ProcessInstance processInstance = (ProcessInstance) ksession.getProcessInstance(piId);
VariableScopeInstance variableScope = (VariableScopeInstance) processInstance.getContextInstance(VariableScope.VARIABLE_SCOPE);
Map<String, Object> variables = variableScope.getVariables();
return variables;
}
});
如果您只想获得一个给定的过程变量:
WorkflowProcessInstance p = (WorkflowProcessInstance)ksession.startProcess("the.process");
p.getVariable("the_process_variable")
要获取所有全局变量,请使用 ksession.getGlobals()
。
这是我访问过程变量的方式
String variableName = "Your_Variable_Name_here";
KieSession ksession = runtime.getKieSession();
ProcessInstance pi = ksession.getProcessInstance(processInstanceId);
RuleFlowProcessInstance rfpi = (RuleFlowProcessInstance)pi;
Object variable = rfpi.getVariable(variableName);
然后您应该将变量转换为正确的 class。