通过 DMN 中的业务知识模型返回时处理 null

Handling null when returning through Business Knowledge model in DMN

我正在尝试在 kie 服务器上使用 DMN 制定一些业务规则。

我有结构数据对象及其列表,这是我的输入。我正在使用规则来验证我的结构列表,并且只获取那些通过我的条件的人。

我正在使用 BusinessKnowledgeModel,它具有每个对象的实际情况,并且我有决策逻辑,它遍历我的列表并调用 BusinessKnowledgeModel 函数。

决策迭代器感觉语言代码:

对于 InputList 中的 inputParam return BusinessKnowledgeModel(inputParam)

在 BusinessKnowledgeMode 中,我有我的函数,它包含通过 Feels 表达式检查我的条件的决策 table。

我不想从函数中获取 null 作为 otput,而是想跳过它。

我的努力:

我确实尝试探索各种方法;比如查找是否可以在 for 循环中使用 continue 关键字。甚至尝试在数据对象上添加约束,但无法在结构上添加空约束。

没有等价于 continue; 的运算符,这在过程语言中很典型,因为 FEEL 是一种表达式语言。如果您熟悉Java,您可以得出的关闭类比是您需要与JDK 流可以做的事情等价的东西,例如:在这种情况下过滤听起来很合适。

很可能您可以通过过滤表达式来实现您的需求:

(for inputParam in InputList return BusinessKnowledgeModel(inputParam))[item!=null]

示范[​​=36=]

在此示例 DMN 模型中,我将 inputList 作为数字列表,bkm() 是一个返回相同数字的函数,如果它可以被 2 整除,否则 null:

if (modulo(p1, 2) = 0) then p1 else null

Decision-1节点: 是从for的返回列表中过滤出来的,只有数字元素,可以看到输入列表大小是10个元素,Decision-1列表大小只有5个元素,过滤掉了nulls

完整示例:

请注意输出列显示带索引的列表元素, 元素索引 0 是值 2, 元素索引 1 是值 4, 等等