这是我启动流程的代码:
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Map<String, Object> params = new HashMap<String, Object>();
params.put("doctorsDecision", "L1");
ksession.startProcess("MyProcess", params);
以下是我希望MyProcess中可以使用此变量的方法。这是MyProcess中我的一个脚本任务的Action:
System.out.println("doctorsDecision: "+doctorsDecision);
这是从流程中访问外部变量的正确方法吗?
P.S。
当我运行我的应用程序时,流程定义永远不会添加到知识库中,因为jBPM似乎无法识别医生决策变量。如何告诉jBPM这个变量是外部变量,它的值是否会在运行时提供?
答案 0 :(得分:0)
你能描述一下你的过程好一点吗?您是否只有开始事件,然后是打印出来的脚本任务? 您是否定义了流程中的输入变量?因为您应该在流程定义中添加在启动流程时将从外部世界接收的变量。
你能给我们更多背景吗?如果您可以启动流程,那么“流程定义永远不会添加到知识库”是什么意思?这意味着流程已添加到知识库中......如果不是,则startProcess(“MyProcess”,params)将失败。 你能显示执行的输出吗?
使用KnowledgeRuntimeLoggerFactory.newConsoleLogger(ksession);在开始您的流程之前,将在控制台中显示流程引擎的内部活动。
希望它有帮助.. 干杯
答案 1 :(得分:0)
我是JBPM的初学者,当我开始使用JBPM时,我遇到了同样的问题。 尝试在您的过程中添加数据对象 name是doctorsDecision,type是String
结果是
<process>
...
...
<dataObject id="doctorsDecision" name="doctorsDecision" itemSubjectRef="ItemDefinition_1"/>
</process>
<itemDefinition id="ItemDefinition_1" structureRef="String"/>
它适用于我。