4.1 变量

4.1.1 名词解释

4.1.1.1 BOM (Business Object Model - 业务对象模型)

  • 定义:BOM是从业务人员视角定义的、用于编写业务规则的词汇表。它是一个高层次的、业务友好的模型,包含了业务规则中会用到的名词和操作。
  • 特点

  • 业务导向:使用业务术语,易于业务分析师理解。

  • 抽象性:不关心底层技术实现,只关注业务概念。
  • 可读性:在规则编辑器中看起来像自然语言。
  • 独立性:可以独立于任何Java代码进行设计和讨论。

  • 示例:在BOM中,你可能有一个名为 Customer 的业务对象,它有属性 agecreditScore,还有一个操作 isHighValueCustomer()

4.1.1.2 XOM (Execution Object Model - 执行对象模型)

  • 定义:XOM是BOM在Java层面的具体实现。它是规则引擎在运行时实际操作的Java类、方法和字段。XOM提供了BOM所定义概念的技术实现。
  • 特点

  • 技术导向:由Java类、接口、方法、字段等构成。

  • 具体性:包含实际的代码逻辑和数据结构。
  • 可执行性:规则引擎直接调用XOM中的Java方法来执行规则。
  • 依赖性:BOM依赖于XOM来获得其行为和数据。

  • 示例:与BOM中的 Customer 对应,XOM中可能有一个Java类 com.mycompany.model.Customer,它有 int age 字段、double creditScore 字段,以及一个返回booleanisHighValueCustomer() 方法。

4.1.1.3 BOM和XOM的区别和联系

区别
特性 BOM (业务对象模型) XOM (执行对象模型)
视角 业务视角 技术/开发视角
使用者 业务分析师、规则作者 开发人员
内容 业务术语、概念、逻辑 Java类、方法、字段、代码
目的 定义规则的“词汇”和“语法” 提供规则执行的“引擎”和“数据”
可读性 高(对业务人员) 低(对非技术人员)
位置 .bom文件(在Rule Studio中) Java项目中的 .java文件或外部JAR库
联系
  1. 映射关系:BOM必须映射到一个或多个XOM。一个BOM元素(如业务类、属性、方法)需要关联到一个具体的XOM元素(如Java类、字段、方法)。
  2. 依赖关系:BOM依赖于XOM。没有XOM,BOM只是一个空壳,无法执行。规则引擎通过BOM的映射关系调用XOM中的实际代码。
  3. 桥梁作用:BOM充当了业务人员和开发人员之间的桥梁。开发人员创建XOM(Java代码),然后业务人员基于此XOM定义BOM,并用BOM编写规则。
  4. 创建顺序

img

  • 自底向上 (Bottom-Up):先创建Java类(XOM),然后在Rule Studio中导入这些类自动生成BOM。
  • 自顶向下 (Top-Down):先在Rule Studio中设计BOM(业务概念),然后生成对应的XOM(Java骨架代码),再由开发人员填充实现。
  • 混合方式:最常见的方式,BOM和XOM协同设计和迭代。
总结

简单来说:

  • XOM是“怎么做”(How):它是后台的Java实现,负责实际的数据存储和逻辑运算。
  • BOM是“说什么”(What):它是前台的业务语言,让非技术人员能用熟悉的词汇来描述业务决策逻辑。

它们的关系就像是“用户界面”和“后台代码”。BOM是给规则作者看的“界面”,而XOM是支撑这个界面运行的“后台服务”。两者紧密结合,共同构成了UDM中规则定义和执行的基础。

4.1.1.4 系统 BOM

​ 在缺省情况下, BOM 始终包含映射到特定 JDK 类的类以及与基本日期和时间相关的类,这些类称为系统 BOM。 例如,要比较日期的部分,如果您具有类型为 java.util.Date的 BOM 成员,那么可以将该类型更改为其中一种系统 BOM 日期类型, 引擎自动执行映射。

img

4.1.1.5 BOM组成

业务对象模型包含一个或多个 BOM 条目, BOM 条目定义业务对象模型中的一组业务元素。

(1)BOM 组成文件包含:

  • BOM 文件,用于描述 BOM 的结构
  • VOC 文件,这是特定于语言环境的文件,用于描述与 BOM 关联的词汇表
  • B2X 文件,用于描述 BOM 和 XOM 之间的映射

(2)BOM 条目包含:

  • 类:BOM条目名称和所在包路径
  • 成员:属性字段,方法
  • 术语:类/属性/方法的语言描述,操作短语“设置{this}的当前 ...为{...}”和导航短语"{this} 的{...}"
  • 类型:类的超类和接口,属性字段的值类型,方法的返回值类型
  • 定制属性:是指为 BOM (Business Object Model) 元素(如类、属性、方法)或规则项目本身添加的元数据 (Metadata)
  • 类别: 是一个强大的组织和管理功能,主要用于在规则编排中对规则、规则集、规则流、变量集等资产进行分类、分组和过滤
  • 域:它用于约束和定义业务对象模型(BOM)中属性、参数或变量的取值范围

UDM中BOM编辑器示例

(图:UDM中BOM编辑器示例画面)

ilog中BOM编辑器示例

(图:ilog中BOM编辑器示例画面)

4.1.1.6 变量的作用范围

变量 范围 定义和使用
临时变量(definitions) 只能在定义了该变量的操作规则中去引用,只作用于当前规则文件中。 在规则的定义部分中定义规则变量。规则变量是定义它们的规则的本地变量, 它们在其他规则中不可用, 变量名称在规则中必须唯一。
变量(BOM) 作为全局变量仅作用于当前规则项目 通过在BOM编辑器中定义类名和成员,在任一规则文件中引用目标变量,作为业务数据结构和类型的约束。
变量集(Variable Sets) 可以由规则项目中的所有业务规则引用的变量参数,作为全局参数仅作用于当前规则项目。 通过规则集变量的名称,类型和语言描述来定义该变量。 变量集中的变量条目可以是对一个已存在BOM条目的引用,也可以是一个 简单的Java类型,并能为其指定初始值。使用时,在任一规则文件或者是规则流中的任务之间传递数据。

4.1.2 创建 BOM

用户在规则设计器中,任选一目录名右键:New UDM File -->New BOM File,在输入文件名称后自动打开了一个如下编辑初始化窗口:

BOM编辑器初始化画面

创建包和类

img

添加类成员与述语

img

名称输入限制

变量名称、字段名称、术语中不得包含任何特殊字符,例如【制表符、换行符、单引号、双引号、左括号和右括号、斜杠、逗号、分号】等。

术语

定义:术语是来自 BOM (Business Object Model) 的预定义元素。它们是规则中使用的基本词汇单元,代表了业务领域的实体、属性、方法和值。

操作术语模板

在规则中,对术语可以执行的主要操作。

导航术语模板

导航是指如何在复杂的、相互关联的业务对象之间访问数据。这是通过点号 (.)**'s** 结构实现的。

the <顶层对象>'s <关联对象>'s <属性>
  • **the****'s** 是 BAL 的固定语法。
  • 路径中的每一级都必须是 BOM 中定义的有效术语(类、属性或方法)。
方法术语模板

将底层的 Java 方法调用(如 {this}.isMale({0}))转换成业务人员可以理解的、自然语言风格的规则表达式。它使用 {this}{0}, {1}, ... 来表示占位符。

  • {this}: 指代当前正在操作的对象实例(例如 Employee 实例)。
  • {0}: 指代第一个参数。
  • {1}: 指代第二个参数,依此类推。

4.1.3 域

在UDM中“域 (Domain)” 是用于约束属性、参数或变量取值范围的核心机制,它确保了数据的业务有效性和一致性。

域类型 用途 数据类型 示例值 优势
枚举域 固定选项 String, int LOW, MEDIUM, HIGH 语法安全,IDE 提示,业务友好
值域 数值范围 int, double, date [300, 850] 数据验证,防止越界
字符串域 字符串集合 String "PENDING", "SHIPPED" 约束合法字符串
布尔域 布尔标签 boolean true="ACTIVE" 业务语义化布尔值
类型域 基础类型 任意 所有该类型的值 最基本的数据约束

枚举域 (Enumeration Domain)

定义:定义一组固定的、命名的、互斥的值。这是最常用和最重要的域类型。

特点

  • 值是预定义的,不能有域外的值。
  • 在规则编辑器和 规则设计器中显示为下拉列表。
  • 避免了拼写错误和“魔法字符串”。

示例: 假设我们要管理客户的风险等级。

  • 域名称CustomerRiskLevel
  • 类型String (或 int,但 String 更业务友好)
  • 值 (Values)

  • LOW

  • MEDIUM
  • HIGH
  • CRITICAL

值域 (Value Domain / Range Domain)

定义:为数值型(int, double)或日期型属性定义一个取值范围。

特点

  • 定义最小值 (min) 和/或最大值 (max)。
  • 可以包含边界(包含或不包含)。
  • 用于确保数值在业务允许的范围内。

示例 1:信用分范围

  • 域名称CreditScoreRange
  • 类型int
  • 最小值300
  • 最大值850
  • 是否包含边界:是 (inclusive)

应用:约束 Customer.creditScore 属性。

示例 2:贷款金额范围

  • 域名称LoanAmountRange
  • 类型double
  • 最小值1000.0
  • 无最大值:(或设置一个合理的上限)

应用:约束 LoanApplication.amount 属性。

在规则中的体现: 虽然值域不直接出现在规则语法中,但它在数据验证时起作用。如果传入的 creditScore200900,规则引擎或 规则设计器会标记为无效。

字符串域 (String Domain / List Domain)

定义:定义一组允许的字符串值。与枚举域类似,但更灵活,通常用于字符串类型。

特点

  • 值是字符串集合。
  • 适合国家代码、状态码等。

示例:订单状态

  • 域名称OrderStatusDomain
  • 类型String
  • 允许的值

  • "PENDING"

  • "CONFIRMED"
  • "SHIPPED"
  • "DELIVERED"
  • "CANCELLED"

应用:约束 Order.status 属性。

布尔域 (Boolean Domain) - 带标签

定义:为布尔值 (true/false) 定义更具业务含义的标签。

特点

  • 本质是布尔值,但可以赋予业务语义。
  • 在 规则设计器中可显示为“是/否”、“开启/关闭”等。

示例:客户激活状态

  • 域名称ActiveStatus
  • 类型boolean
  • **true** 的标签"ACTIVE"
  • **false** 的标签"INACTIVE"

应用:约束 Customer.isActive 属性。

类型域 (Type Domain) - 隐式

定义:虽然不常被称为“域”,但 BOM 中的数据类型本身也是一种域约束

特点

  • String 类型的域是所有可能的字符串。
  • int 类型的域是整数范围。
  • 这是最基础的约束。

示例

  • Customer.age 的类型是 int,其隐式域是 Integer.MIN_VALUEInteger.MAX_VALUE
  • 我们通常会在此基础上再应用一个值域(如 AgeRange: min=0, max=150)来进一步约束。

4.1.4 定制属性

在UDM 中,“定制属性 (Custom Properties)” 是指为 BOM (Business Object Model) 元素(如类、属性、方法)或规则项目本身添加的元数据 (Metadata)。这些属性不是业务数据的一部分,而是用于存储额外的信息,以支持工具功能、代码生成、决策中心展示或特定的执行逻辑。它们是扩展 UDM 功能、实现自动化和增强管理能力的重要手段。

用途

  • 控制代码生成:引用系统内置属性去控制规则引擎如何生成底层 Java 代码。
  • 增强展示:控制规则在业务用户界面中的显示方式。
  • 标记和分类:为规则或模型元素打上标签,便于搜索、过滤和管理。
  • 集成与自动化:为外部系统或脚本提供配置信息。
  • 性能优化:提示引擎进行特定的优化。

最佳实践

  • 命名规范:使用反向域名约定(如 com.mycompany.rules.priority)避免命名冲突。
  • 文档化:记录你定义的每个定制属性的用途,供团队参考。
  • 谨慎使用:特别是影响引擎行为的属性(如禁用验证),需充分理解其后果。
  • 利用于自动化:将定制属性作为 DevOps 脚本或 CI/CD 流程的输入,实现自动化部署和测试。
  • 与团队共享:确保所有开发人员了解并遵循相同的定制属性约定。

总结

  • 定制属性只是模型的一部分,只用于配置工具和流程,也不作为业务逻辑的输入,不作用于规则运行时,因为在规则执行上下文 (Working Memory) 中,只有 BOM 定义的属性和方法是可访问的。定制属性存储在 .bom 文件的元数据部分,不会被加载到运行时对象中。
  • 定制属性功能对规则编排和流程影响范围,直接取决于UDM产品本身内置的属性,而不是规则开发者随意定制一个新属性能改变的。
  • 如果你有一个值既想在设计时作为标记,又想在运行时被规则使用,你应该在 BOM 中定义一个正常的属性或变量集 (Variable Set),将这个属性/变量设置为所需的值,在规则中正常引用它。

4.1.5 类别

在UDM 中,“类别 (Category)” 是一个强大的组织和管理功能,主要用于在规则编排中对规则、规则集、规则流、变量集等资产进行分类、分组和过滤。它不直接影响规则的逻辑或执行,而是极大地提升了大型项目中规则的可管理性、可发现性和治理能力。

在规则项目中定义类别

img

在BOM中引用类别

img

在规则管理中心查看类别

待补充。

4.1.6 BOM到XOM映射

​ 说明:在BOM的方法中定义一段java代码,在编译时会写入到.b2x文件中,在运行时会自动解析这段代码。

img

4.1.7 XOM到BOM映射

1)在IDEA中编写java类作为XOM

PixPin_2025-11-03_14-14-38

2)在BOM编辑器上,将XOM同步到BOM

XomInBom

4.1.8 变量集(Variable Sets)

变量集 (Variable Set)规则项目内部的共享变量容器,用于在规则之间传递和共享业务数据或可配置参数,适合业务用户管理。

变量集如何创建

img

关于初始值问题遵循java的语法即可,基本类型直接输入值,其它的如BigDecimal应这样去初始化new java.math.BigDecimal(0)

变量集如何使用

1)在业务规则集中使用变量库

img

2) 对应的业务规则

img

3) 快速测试和验证

img

results matching ""

    No results matching ""