我们可以从java代码中触发多个dmn吗



我在商业中心有一个项目,有8个dmn模型。有没有办法在一个api调用中触发java代码中的所有8个模型,就像我们在一个api调用中触发许多drl文件一样?

DRL文件属于定义的知识库/KieBase,您可以从给定的KieBase创建KieSession。这就是为什么在将事实/事件插入KieSession并启动时,会评估来自几个DRL的几个规则,因为它们属于指定的知识库。

DMN模型不是通过知识库来识别的,而是通过它们的{ namespace, name }坐标来识别的。

没有一个命令可以执行一系列DMN模型ootb,特别是因为每个模型所需的InputData可能不同。例如:一个给定的DMN模型需要InputDataNameAge,而另一个DMN模型则需要InputData CC D_4和Product

然而,您可以在一批中编排一系列KieCommand(s(,这些CCD_6将根据您的需求迭代评估每个DMN模型,或者类似地从Kie Server客户端(Java API(连锁调用。

通常当我使用以下方法测试/验证dmn模型的输出时:

HashMap<String, Object> input = new HashMap<String, Object>();
input.put("variable1", value1);
input.put("variable2", value2);
List<DMNDecisionResult> decision = jbpmDmnService.getDmnDecision(input, containerId,
dmnNamespace, dmnModel);
for (DMNDecisionResult dr : decision) {
log.info("Decision: {}, Result: {}", dr.getDecisionName(), dr.getResult());
}

如果触发多个dmn,则将调用此方法jbpmDmnService.getDmnDecision(input,containerId,dmnNamespace、dmnModel(;多次基于dmn的必要输入、容器、名称空间和模型

DMNDecisionResult from package org.kie.dmn.api.core

getDmnDecision方法内容:

KieServicesConfiguration conf = KieServicesFactory.newRestConfiguration(jbpmUrl, initUsername, initPassword);
KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(conf);
log.info("URL [{}], Namespace[{}], Model[{}]",jbpmUrl,namespace,model);
DMNServicesClient dmnClient = kieServicesClient.getServicesClient(DMNServicesClient.class);
DMNContext dmnContext = dmnClient.newContext();
for (Map.Entry<String, Object> con: context.entrySet()) {
dmnContext.set(con.getKey(), con.getValue());
}
ServiceResponse<DMNResult> serverResp = dmnClient.evaluateAll(containerId, namespace, model, dmnContext);
DMNResult dmnResult = serverResp.getResult();

相关内容

  • 没有找到相关文章

最新更新