每个条件的 DMN 表

jos*_*ero 2 drools dmn redhat-decision-manager

我想利用 DMN 来创建计算,但每个国家/地区的每个类别的规则都不同,因此美国和类别 1 的规则将与美国和类别 2 的规则不同,加拿大和类别 1 的规则也不同。

我不想为国家/地区类别添加列并将其全部保留在同一个表中,因为这将形成一个超级大的表,并且由于每个表将由一组不同的用户维护,因此将其分开会更简单,如果可能的。

有没有办法用 DMN 对此进行建模?

我知道 BPMN 可以用来决定调用哪个表,但很好奇 DMN 是否可以单独处理这种情况。

提前致谢

tar*_*abs 5

我知道 BPMN 可以用来决定调用哪个表,但很好奇 DMN 是否可以单独处理这种情况。

对于您的情况,最合适的方法指南确实是结合 BPMN 的力量来协调要评估的决策服务 (DMN)。

在此前提下,单独使用 DMN 可能有两种选择。

仅 DMN,选项 1

您可以为每个 DMN 模型文件定义一个决策服务,每个模型都对国家/地区特定性进行建模。然后,在“主管”DMN 模型中,您可以评估来自所有导入 DMN 模型的国家/地区的适当决策服务。

专业人士:

  • 仅限 DMN
  • 每个 DMN 确实可以由一组不同的用户维护
  • 已定义的特定国家决策服务的可重用性

缺点:

  • 可扩展性受到选项数量的限制,前提是需要导入许多特定于国家/地区的模型

例子:

选项1

这个例子实际上显示了选择哪个决策,即:评估所有变体,然后只选择所需的一个。

但是您绝对可以重构模型,仅调用您想要的导入决策服务(例如: 或s.Standard card ds()g.Gold card ds()

我想展示这个示例,因为它比您的用例更广泛,但正如前面提到的,您可以让它更简单。

仅 DMN,选项 2

您可以使用非 DMN 标准invoke()函数从给定的 DMN 模型动态调用所需的 DMN 模型,前提是调用的 DMN 模型可由特定平台 API 解析——即:在 Drools 上是相同的一部分KieContainer,在 Kogito 上是同一 Kogito 应用程序的一部分。

专业人士:

  • 仅限 DMN
  • 每个 DMN 确实可以由一组不同的用户维护

缺点:

  • invoke()函数是 Drools 扩展内置函数,不属于 DMN 规范的一部分。

例子:

选项2 drd

在此示例中,国家/地区用于查找包含我们要调用以评估购买年龄的决策表的模型的名称;然后扩展的内置函数用于调用所需的模型,传递所需的输入:

选项2运行

第二个屏幕截图从左到右显示:特定于国家/地区的 DMN 模型的示例、执行调用的“主管”DMN 模型、针对几个选定国家/地区运行该模型并显示所请求的购买年龄的场景测试示例

我相信这是极少数利用平台集成方面(例如功能)真正有意义的案例之一,invoke()因为导入不同 ISO 国家变体的 249 个模型是天真的。

  • 哇,太棒了,非常感谢您为如此详细的答案付出的努力,我正在尝试调用,因为我将使用流口水或决策管理器应该没问题。再次感谢 (2认同)