Red Hat Decision Manager中DMN+FEEL实现一对多关系的方法咨询
在Red Hat Decision Manager中用DMN+FEEL实现一对多值映射
核心方案:决策表输出列设为列表类型,直接用FEEL列表语法定义多值
你遇到的问题本质是把决策表的输出从单值改成列表(List)类型,结合FEEL原生的列表语法就能实现客户到多值集合的映射,具体步骤如下:
定义数据类型
- 输入:创建
ClientIdentifier类型(字符串,取值为"A"/"B"/"C") - 输出:创建
MatchingValuesList类型(列表,内部元素类型根据你的值类型选择,比如Number)
- 输入:创建
配置决策表
- 输入列:绑定到客户标识符变量,类型选择
ClientIdentifier,条件单元格直接写"A"、"B"、"C" - 输出列:绑定到结果列表变量,类型选择
MatchingValuesList,规则行的输出单元格直接用FEEL列表语法赋值:- 客户A对应的输出:
[1, 2, 5] - 客户B对应的输出:
[6, 9, 22] - 客户C对应的输出:如果是允许任意数值,可写
range(1, 1000)(生成1到1000的整数列表);如果是业务上允许所有可能值,也可以根据实际场景用[*](需结合上下文的取值范围),或者直接定义一个包含所有合法值的列表
- 客户A对应的输出:
- 输入列:绑定到客户标识符变量,类型选择
替代方案:FEEL上下文+case表达式
如果不想用决策表,也可以直接用FEEL的case表达式实现映射,更灵活:case client_identifier when "A" then [1, 2, 5] when "B" then [6, 9, 22] when "C" then range(1, 100) // 按需调整范围 else [] // 处理未匹配的客户 end
为什么之前的方法无效?
- Context不合适:Context更适合定义结构化数据,若未将其与决策表的输入输出正确绑定,无法直接实现动态映射
- 逗号分隔字符串:FEEL不会自动将字符串拆分为列表,需要额外用
split()函数解析(比如split("1,2,5", ",")),但解析后是字符串列表,还需转成对应类型,远不如直接用列表类型高效
内容的提问来源于stack exchange,提问作者Apixio-wwells
相关产品推荐
相关产品推荐

