我创建了一个示例drools项目,我正在使用BPMN流程的流程类型:
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-process");
kSession.insert(myTicket);
kSession.startProcess("com.sample.bpmn.hello");
kSession.fireAllRules();
如果我想在java中编写它而不是一般规则,我如何在BPMN Gateway的分歧约束中使用变量myTicket: (m:票证(status == Ticket.CREATE))。
答案 0 :(得分:0)
事实(在kie-session中声明的对象)在jbpm的范围内不可用(唯一的例外可能是使用DRL语法的网关)。您可以使用一些变通方法从会话中获取其中一个事实并在您的网关中使用它,但假设您在开始该过程之前拥有该对象(至少这是您的示例所示),您可以通过此对象作为流程变量。
Map<String, Object> variables = new HashMap<>();
variables.put("ticket", myTicket);
kSession.startProcess("com.sample.bpmn.hello", variables);
您的流程定义必须具有使用myTicket
类型的名称Ticket
定义的变量。
在您的网关中,您不需要任何特殊语法来引用此变量:
return ticket.getStatus() == Ticket.CREATE;
希望它有所帮助,