我正在做一些早期的实验,使用drools和用DMN编写的规则。
在我的用例中,输入数据可以是大的和多样的。在单独调用规则引擎作为输入时,还有一些输出可能被传回。
因此,一些输入变量可能与我的一些输出变量具有相同的名称。这似乎会引起问题。
特别地,如果我有一个决策表,并且我的输出名称与数据输入中的任何内容匹配(不管DRD树是否真的访问它),则drools响应报告一个错误,输出值被设置为null。
只需更改输出变量的名称就可以解决这个问题。
然而,对于非常动态的数据,这样的冲突是不容易预测的。
所以我想问:
编辑:
我现在可能已经找到了一些DMN标准,它描述了为什么输出名称和输入名称不能发生冲突。我认为图中的最终决策并不特殊,因此,在理论上,如果一个图可以存在,那么任何决策都可以作为对以后的决策的输入,如果决策输出和同一图上的输入具有相同的名称,那就没有意义了。
来自标准的https://www.omg.org/spec/DMN/1.3/PDF
如上所述,DRG级别上的每个决策、输入数据和业务知识模型都与决策逻辑级别上使用的变量相关联。决策表达式引用的每个变量必须与所需的决策、所需的输入数据或所需的知识相关联。此外,决策表达式中必须引用与所需决策、所需输入数据和所需知识相关联的每个变量。
如果一项决定需要另一项决定,则所需决策的值表示会将该值分配给变量,以用于评估所需的决策。这是DMN中用于在决策逻辑级别上组合决策的通用机制。
如果决策需要输入数据,则在执行时将变量的值分配给附加到输入数据的数据源的值。这是DMN中用于实例化决策的数据需求的通用机制。
决策逻辑的输入变量不能在该值表达式或其分量值表达式之外使用:决策元素为其决策逻辑定义输入变量的词法范围。为了避免名称冲突和歧义,变量的名称在其作用域中必须是唯一的。当DRG元素映射为FEEL时,变量的名称与其关联的输入数据或决策的(可能是限定的)名称相同,这保证了它的唯一性。
发布于 2021-07-21 11:00:56
如果我正确理解了您的问题,您正在尝试建模一个DMN模型,其中一些DRGElement (InputData,Decision,…)节点共享相同的名称。
这与符合DMN标准规范的有效模型是不兼容的,而且我们已经与kie-dmn-validation模块进行了检查,该模块将报告此问题。在尝试用Drools DMN引擎“编译”DMN模型之前,就会报告这个问题。
示范:

因此,当您创建DMN模型时,如果您不遵守DMN标准规范的基本规定,我们将使用验证器模块检测它,并根据上面的屏幕截图尝试提供一个合理的用户消息。
请注意,在使用Maven和/或在使用基于Kogito的项目使用kie-dmn-validation构建KJAR时,KJAR也是“嵌入”的(因此,所有构建系统和平台都使用相同的验证功能)。
https://stackoverflow.com/questions/68457132
复制相似问题