You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 23:45:53