我在商业中心有一个项目,有8个dmn模型。有没有办法在一个api调用中触发java代码中的所有8个模型,就像我们在一个api调用中触发许多drl文件一样?
DRL文件属于定义的知识库/KieBase,您可以从给定的KieBase创建KieSession。这就是为什么在将事实/事件插入KieSession并启动时,会评估来自几个DRL的几个规则,因为它们属于指定的知识库。
DMN模型不是通过知识库来识别的,而是通过它们的{ namespace, name }
坐标来识别的。
没有一个命令可以执行一系列DMN模型ootb,特别是因为每个模型所需的InputData可能不同。例如:一个给定的DMN模型需要InputDataName
和Age
,而另一个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();