2

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

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

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

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

提前致谢

4

1 回答 1

3

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

在您的案例中,最合适的方法指南确实是结合 BPMN 的力量来协调要评估的决策服务 (DMN)。

在此前提下,您可能有两个单独使用 DMN 的替代选项。

仅限 DMN,选项 1

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

临:

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

缺点:

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

例子:

选项1

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

但是您绝对可以重构模型,仅调用您想要的导入决策服务(例如:ofs.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 个模型是天真的。

于 2021-08-18T14:43:33.820 回答