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

如何在Camunda 7 DMN中编写自定义脚本并处理REST调用问题

解决DMN单元格空值校验与自定义代码编写问题

问题概述

我正在创建DMN文件,用于依据配料百分比生成饮品评价,计划通过REST POST请求传递JSON格式的配料数据完成评估。需要实现空值校验逻辑(伪代码:if sugar is present in Cola: return ingredient.sugar else return 0),但未添加校验时出现以下报错:

{"type": "RestException","message": "Cannot evaluate decision Food:1:1c8bc453-4d53-11ee-b0ae-12d907201e30: Exception while evaluating decision with key 'null'"}

DMN单元格自定义代码/空值校验实现方案

不同DMN引擎的语法略有差异,以下是主流场景的实现方式:

1. DMN标准FEEL表达式(推荐)

使用FEEL的原生语法即可完成空值校验,无需额外自定义函数:

// 检查属性存在性并返回默认值
if exists(ingredients.Cola.sugar) then ingredients.Cola.sugar else 0

// 简化写法(部分引擎支持空合并运算符)
ingredients.Cola.sugar ?? 0

exists()函数用于验证属性是否存在且非空;??运算符会直接返回左侧非空值,否则返回右侧默认值,语法更简洁。

2. 嵌入脚本代码(针对JVM系引擎如Camunda)

如果需要复杂逻辑,可在单元格中嵌入Groovy/Java脚本实现自定义函数:

def getIngredientValue(ingredientsMap, drinkName, ingredientName) {
    // 安全链式访问避免空指针
    return ingredientsMap?.get(drinkName)?.get(ingredientName) ?: 0
}

// 调用函数,参数对应REST传入的JSON字段
getIngredientValue(ingredients, "Cola", "sugar")

注意:确保引擎开启脚本支持,且变量名(如ingredients)与REST请求的JSON顶级字段完全匹配。

3. 可视化配置空值处理(无代码方案)

部分DMN编辑器(如Camunda Modeler)支持可视化配置:

  • 右键点击目标单元格,选择「空值处理」
  • 设置空值时的默认返回值(比如0)
  • 适合简单场景,无需编写代码

报错排查要点

你遇到的decision with key 'null'错误,通常和以下问题有关:

  • 检查DMN文件中所有决策节点的Id和Name是否非空且唯一
  • 确认REST请求的JSON结构与DMN定义的输入变量结构完全匹配,比如是否存在ingredients顶级字段
  • 开启DMN引擎调试日志,定位具体为空的变量或决策节点

内容的提问来源于stack exchange,提问作者Ehtesham Sajed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:32:09