Flowable引擎中的DMN决策模型与标记入门指南
什么是DMN?
决策模型与标记(Decision Model and Notation,简称DMN)是由对象管理组织(OMG)发布的一项标准规范。它提供了一种标准化的方法来描述和组织中的可重复决策过程,确保决策模型能够在不同组织间实现互换。
DMN的核心价值在于:
- 使业务决策逻辑可视化
- 实现业务规则与技术实现的解耦
- 提供标准化的决策建模方法
- 支持决策逻辑的复用
DMN定义结构解析
在Flowable引擎中,DMN定义以XML格式存储,其根元素为definitions
。每个DMN文件可以包含多个决策定义,但最佳实践建议每个文件只包含一个决策定义,这样更便于后续维护。
典型结构如下:
<definitions xmlns="http://www.omg.org/spec/DMN/20151101"
namespace="http://www.flowable.org/dmn"
name="DetermineDiscount">
<decision id="DET_DISC_1" name="DetermineDiscount">
<decisionTable id="determineDiscountTable1" hitPolicy="FIRST">
<!-- 决策表内容 -->
</decisionTable>
</decision>
</definitions>
创建DMN决策表实战
1. 决策表编辑器介绍
Flowable提供了直观的决策表编辑器,我们可以通过它来创建和编辑DMN决策表。以下以一个简单的折扣计算场景为例:
业务场景:根据客户类别(青铜、白银、黄金)确定相应的折扣百分比。
2. 命中策略详解
命中策略(Hit Policy)决定了当多个规则匹配时如何确定最终结果。Flowable支持以下7种策略:
单命中策略:
FIRST
:返回第一个匹配的规则结果UNIQUE
:确保规则互斥,只能匹配一个规则ANY
:匹配规则输出必须一致,否则视为错误PRIORITY
:返回优先级最高的匹配规则
多命中策略:
OUTPUT ORDER
:按输出优先级排序返回所有匹配RULE ORDER
:按规则顺序返回所有匹配COLLECT
:返回所有匹配,并可应用聚合函数(求和、最小值、最大值、计数)
3. 输入输出表达式配置
决策表分为两部分:
- 蓝色区域:输入表达式,定义规则匹配条件
- 绿色区域:输出表达式,定义规则执行结果
每个规则由输入条目和输出条目组成。输入条目是JUEL表达式,将与输入变量进行比较;当所有输入条件为真时,对应的输出条目将被执行。
4. 实际案例构建
构建一个完整的折扣决策表:
- 设置命中策略为
UNIQUE
,确保规则互斥 - 添加输入表达式
customerCat
(客户类别) - 添加输出表达式
discountPerc
(折扣百分比) - 创建规则:
- 青铜客户 → 5%折扣
- 白银客户 → 10%折扣
- 黄金客户 → 20%折扣
- 默认情况 → 0%折扣(使用空输入条目表示默认规则)
在BPMN流程中集成DMN决策
Flowable的强大之处在于DMN与BPMN的无缝集成。我们可以通过以下步骤在业务流程中使用决策表:
- 在BPMN流程中添加决策任务节点
- 引用已创建的决策表
- 流程变量将自动传递给决策表作为输入
- 决策结果将存储为流程变量供后续任务使用
例如,在用户任务中可以通过表达式${discountperc}
直接访问决策结果。
DMN XML结构深度解析
完整的DMN 1.1 XML包含以下关键元素:
definitions
:根元素,包含命名空间和名称定义decision
:决策定义,包含唯一ID和名称decisionTable
:决策表核心,包含命中策略和规则集input
/output
:定义输入输出参数及类型rule
:具体业务规则,包含条件和结果
<definitions xmlns="http://www.omg.org/spec/DMN/20151101"
id="definition_78d09dd7"
name="Determine Discount"
namespace="http://www.flowable.org/dmn">
<!-- 完整决策表结构 -->
</definitions>
最佳实践建议
- 命名规范:为决策和变量使用清晰的业务名称
- 规则验证:利用编辑器的验证功能确保规则完整性
- 版本控制:决策表变更应纳入版本管理系统
- 性能考量:复杂决策表应考虑规则执行顺序
- 测试策略:为关键决策表编写自动化测试用例
通过本文的介绍,您应该已经掌握了在Flowable引擎中使用DMN进行业务决策建模的基本方法。DMN的强大之处在于它将业务规则从流程逻辑中解耦出来,使业务专家能够直接参与规则的定义和维护,同时保持与技术实现的良好集成。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考