如何在 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。