52.3. 在规则资产中定义下拉列表的枚举数
Business Central 中的枚举定义决定了指导规则、指导规则模板和指导决策表中的条件或操作字段的可能值。enumeration 定义包含一个 fact.field
映射到支持值列表,该列表显示为规则资产相关字段中的下拉列表。当用户选择基于与枚举定义相同的事实和字段的字段时,则会显示定义值的下拉列表。
您可以在 Business Central 中定义枚举器,也可以在红帽决策管理器项目的 DRL 来源中定义。
流程
-
在 Business Central 中,前往 Menu
Design Projects 并点项目名称。 -
点 Add Asset
Enumeration。 - 输入参考 名称 并选择相应的 软件包。您指定的软件包必须是分配或分配所需数据对象和相关规则资产的同一软件包。
单击 Ok 以创建枚举。
新的 enumeration 现已列在 Project Explorer 的 Enumeration Definitions 面板中。
在 enumerations designer 的 Model 选项卡中,点 Add enum,并为枚举定义以下值:
- 事实 :指定您项目同一软件包中的现有数据对象,您要将此枚举关联。在 Project Explorer 中打开 Data Objects 面板,以查看可用的数据对象,或根据需要创建相关的数据对象作为新资产。
- 字段 :指定一个现有字段标识符,作为您为 事实 选择的 data 对象的一部分定义。在 Project Explorer 中打开 Data Objects 面板,以选择相关的数据对象并查看可用 标识符选项列表。如果需要,您可以为 data 对象创建相关标识符。
-
context :指定一个值列表,格式为
['string1','string2','string3']
或[integer1,integer2,integer3]
,您想要映射到 Fact 和 Field 定义。这些值将显示为规则资产中相关字段的下拉列表。
例如,以下枚举值定义了 loan 应用决策服务中 applicant 贡献等级的下拉菜单:
图 52.7. Business Central 中申请信贷评级的枚举示例
DRL 源中应用贡献度评级的枚举示例
'Applicant.creditRating' : ['AA', 'OK', 'Sub prime']
在本例中,对于任何指导规则、指导规则模板或指导决策表,这些表格位于项目的同一软件包中,并使用
Applicant
数据对象和creditRating
字段,配置的值作为下拉列表提供:图 52.8. 指导规则或指导规则模板中的 enumeration 下拉列表示例
图 52.9. 指导决策表中的枚举下拉列表示例
52.3.1. 规则资产的高级枚举选项
对于红帽决策管理器项目中的枚举定义的高级用例,请考虑以下扩展选项来定义枚举:
- Business Central 中的 DRL 值和值之间的映射
如果您希望 enumeration 值显示在 Business Central 界面中的不同于 DRL 源中显示的不同或更全面的值,使用格式
"fact.field" : ['sourceValue1=UIValue1','sourceValue2=UIValue2','sourceValue2=UIValue2', … ]
用于您的 enumeration 值。例如,在 loan status 的以下枚举定义中,选项
A
或D
会在 DRL 文件中使用,但选项已批准或拒绝在 Business Central 中:'Loan.status' : ['A=Approved','D=Declined']
- 枚举值依赖项
如果您希望在一个下拉列表中选择的值,以决定后续下拉列表中的可用选项,请使用
'fact.fieldB[fieldA=value1]' : ['value2', 'value3', 'value3', … ]
用于您的 enumeration 定义。例如,在保险政策的以下枚举定义中,
policyType
字段接受Home
或Car
的值。用户选择的策略类型决定了可用的策略覆盖
字段选项:'Insurance.policyType' : ['Home', 'Car'] 'Insurance.coverage[policyType=Home]' : ['property', 'liability'] 'Insurance.coverage[policyType=Car]' : ['collision', 'fullCoverage']
注意在规则条件和操作中不应用枚举依赖关系。例如,在这个保险策略用例中,规则条件中的所选策略不会决定规则操作中的可用覆盖范围选项(如果适用)。
- 枚举中的外部数据源
如果要从外部数据源检索枚举值列表,而不是直接在枚举定义中定义值,请在项目的类路径上添加一个 helper 类,该类返回
java.util.List
字符串列表。在枚举定义中,而不是指定值列表,标识您配置为从外部检索值的帮助程序类。例如,在 loan applicant 区域的以下枚举定义中,而不是以
"Applicant.region" 格式明确定义: ['country1', 'country2', … ]
, enumeration 使用一个帮助类返回外部定义的值列表:'Applicant.region' : (new com.mycompany.DataHelper()).getListOfRegions()
在本例中,
DataHelper
类包含一个getListOfRegions()
方法,它返回字符串列表。在规则资产中相关字段的下拉列表中载入 enumerations。您还可以将依赖的 enumeration 定义从 helper 类中动态加载,方法是将依赖字段标识为引号内帮助程序类的调用范围:
'Applicant.region[countryCode]' : '(new com.mycompany.DataHelper()).getListOfRegions("@{countryCode}")'
如果要完全从外部数据源(如相关数据库)加载所有枚举的数据,则可实施返回
Map<String、List<String>
映射的 Java 类。映射的键是fact.field
映射,值是值的java.util.List<String>
; 列表。例如,以下 Java 类为相关的枚举定义了 loan applicant 区域:
public class SampleDataSource { public Map<String, List<String>> loadData() { Map data = new HashMap(); List d = new ArrayList(); d.add("AU"); d.add("DE"); d.add("ES"); d.add("UK"); d.add("US"); ... data.put("Applicant.region", d); return data; } }
以下枚举定义与本例 Java 类相关。枚举不包含对事实或字段名称的引用,因为它们是在 Java 类中定义:
=(new SampleDataSource()).loadData()
=
运算符使 Business Central 能够加载 helper 类中的所有枚举数据。当请求枚举定义以便在编辑器中使用时,静态评估帮助程序方法。注意目前,Business Central 不支持在没有事实和字段定义的情况下定义枚举。要以这种方式为关联的 Java 类定义枚举值,请使用红帽决策管理器项目中的 DRL 源。