如何在Drools DMN/Kogito中基于父决策表调用子决策表?
基于DMN实现按年龄分组调用对应决策表的方案
1. 先做年龄分组决策表
创建名为AgeGroupDecision的决策表,核心逻辑如下:
- 输入:
Age(数值类型) - 输出:
AgeGroup(字符串类型,可选值OLD/YOUNG) - 规则:
- 当
Age > 50时,输出OLD - 当
Age < 50时,输出YOUNG - (可选补充)当
Age = 50时,输出自定义值(比如UNKNOWN),避免无匹配规则导致流程中断
- 当
2. 定义两个业务决策表
分别创建对应不同年龄组的业务决策表:
OldPersonDecision:实现针对OLD群体的业务逻辑,输入输出根据实际业务需求定义(可复用Age或新增其他输入)YoungPersonDecision:实现针对YOUNG群体的业务逻辑,输入输出同理匹配业务需求
3. 实现分支调用逻辑
通过DMN的决策引用能力,创建顶层决策FinalDecision来串联逻辑,有两种常用方式:
方式一:用决策表实现分支
创建FinalDecision决策表:
- 输入:
AgeGroup(来自AgeGroupDecision的输出)、Age(若子决策表需要) - 输出:业务结果(与两个子决策表的输出类型一致)
- 规则:
- 当
AgeGroup = OLD时,直接引用OldPersonDecision的结果作为输出 - 当
AgeGroup = YOUNG时,直接引用YoungPersonDecision的结果作为输出
- 当
DMN引擎会自动识别决策引用,先执行被引用的决策表,再返回结果。
方式二:用上下文决策实现分支
如果偏好结构化分支,可使用DMN的**上下文(Context)**决策类型:
- 上下文输入为
AgeGroup和Age - 定义两个上下文条目:
- 条件:
AgeGroup = OLD,执行OldPersonDecision并返回其结果 - 条件:
AgeGroup = YOUNG,执行YoungPersonDecision并返回其结果
- 条件:
- 上下文的输出即为对应分支的业务结果
4. 组装决策服务
将AgeGroupDecision、OldPersonDecision、YoungPersonDecision和FinalDecision打包成一个决策服务,指定执行顺序:先运行AgeGroupDecision,再根据结果触发对应子决策,最终返回FinalDecision的结果。
内容的提问来源于stack exchange,提问作者Nachiketa BG
相关产品推荐
相关产品推荐

