DMN中FEEL表达式遍历复杂列表计算Duration返回null求助
DMN遍历DateTime列表计算时长返回null的解决方法
问题背景
在DMN中遍历包含Start和End DateTime属性的列表Times,使用FEEL表达式for t in Times return t.End - t.Start时返回null,但单独返回t.End能得到预期的DateTime值,单个Time对象执行Time.End - Time.Start也能正常返回Duration对象。
示例输入数据:
{"Times": [{"Start": "2024-06-05T11:35:02.534Z","End": "2024-06-05T11:40:02.534Z"},{"Start": "2024-06-05T11:35:02.534Z","End": "2024-06-05T11:45:02.534Z"}],"Time": {"Start": "2024-06-05T11:35:02.534Z","End": "2024-06-05T11:40:02.534Z"}}
问题原因
查看DMN定义中的itemDefinition:
tTimes集合类型直接重复定义了Start和End两个itemComponent,没有复用已有的tTime类型。- 这种匿名结构的集合元素,虽然能读取属性值,但DMN引擎在执行DateTime减法运算时,无法正确识别元素属性的类型,导致运算返回null。
修复方案
方案1:修正集合类型定义(推荐)
修改itemDefinition中的tTimes,让它引用tTime作为集合的元素类型,替代重复定义的组件:
<dmn:itemDefinition id="_32787051-6A12-4E8B-9660-29D507705E74" name="tTimes" isCollection="true"> <dmn:typeRef>tTime</dmn:typeRef> </dmn:itemDefinition>
保持Durations决策的FEEL表达式不变:
for t in Times return t.End - t.Start
方案2:显式类型转换(临时 workaround)
如果暂时无法修改类型定义,可以在表达式中显式将属性转换为date and time类型:
for t in Times return date and time(t.End) - date and time(t.Start)
验证结果
修复后,执行表达式应该返回正确的时长列表,例如:
[PT5M, PT10M]
内容的提问来源于stack exchange,提问作者nmotter
相关产品推荐
相关产品推荐

