第 44 章 定义电子表格决策表
电子表格决策表(XLS 或 XLSX)需要两个关键区域来定义规则数据: RuleSet
区域和一个 RuleTable
区域。电子表格的 RuleSet
区域定义了您要对同一软件包中的所有规则(不仅仅是电子表格)全局应用的元素,如规则集名称或通用规则属性。RuleTable
区域定义了实际规则(箭头)以及条件、操作和其他规则属性(列),这些属性构成指定规则集中的规则表。表格的表格可以包含多个可 规则
的区域,但只能包含一个 RuleSet
区域。
通常,根据 Business Central 中的规则软件包,您通常只 上传一个
决策表,其中包含所有必要规则定义定义。您可以为单独的软件包上传单独的决策表电子表格,但在同一个软件包中上传多个电子表格可能会导致与冲突的 RuleSet
或 RuleTable
属性中相应的错误,因此不建议这样做。
在您定义决策表时,请参考以下示例电子表格:
图 44.1. 发运费用的电子表格决策表示例
流程
-
在新的 XLS 或 XLSX 电子表格中,转至第二栏或第三列,并标记单元
RuleSet
(例如 1)。为左侧的列或列保留描述性元数据(可选)。 -
在右侧的单元里,为
RuleSet
输入一个名称。此命名规则集将包含规则
软件包中定义的所有规则。 -
在
RuleSet
单元下,定义您要对软件包中的所有规则表进行全局应用的任何规则属性(每个单元一个)。指定右侧的单元格中的属性值。例如,您可以输入Import
标签并在右侧的单元格中,为您要导入的其它软件包(格式为package.name.object.name
)指定相关的数据对象。有关支持的单元标签和值,请参阅 第 44.1 节 “规则集定义”。 -
在
RuleSet
区域中,在RuleSet
单元下,跳过一行并标记一个新的单元规则
(示例中是 7),然后在相同的单元中输入表名称。名称用作来自此规则表的所有规则的初始部分,并附加行号。您可以通过插入NAME
属性列来覆盖此自动命名。 使用下面的四个行根据需要定义以下元素(如例中的 8-11 ):
- 规则属性: Conditions、actions 或其他属性。有关支持的单元标签和值,请参阅 第 44.2 节 “RuleTable 定义”。
- 对象类型: 规则属性应用到的数据对象。如果同一对象类型适用于多个列,请将对象单元格合并到多个列之间的一个单元格中(如示例决策表中所示),而不是在多个单元中重复对象类型。当对象类型合并时,合并范围下的所有列都将合并到单个模式中用于匹配单个事实的一组约束。在单独的列中重复对象时,各个列可以创建不同的模式,可能会匹配不同的或相同的事实。
- 约束: 对象类型的限制。
列标签: (可选)列的任何描述性标签(可选)作为视觉 aid。如果未使用,留空。
注意作为填充对象类型和约束单元格的替代选择,您可以将对象类型单元格或单元格留空,然后在对应的约束单元或单元格中输入完整的表达式。例如,如果对象类型和
itemsCount > $1
作为约束(不同的单元格),您可以保留对象类型单元格,然后在约束单元中输入Order
(itemsCount > $1)
定义了所有必要的规则属性(列),根据需要输入每个列的值,按行行(例如,第 12-17 一行)生成规则(例如,第 12-17)。没有数据的单元将被忽略(比如当条件或操作不适用时)。
如果您需要在此决策表格中添加更多规则表,在上表中的最后一条规则后跳过一行,在与前面的
RuleTable
RuleSet
cells 相同,再按照本部分中相同的步骤创建新表(示例为 19-29)。- 保存 XLS 或 XLSX 电子表格来完成。
默认情况下,在上传 Business Central 中电子表格的电子表格时,只有电子表格的首个工作表才会作为决策表进行处理。每个 RuleSet
名称都与 RuleTable
名称组合,必须在同一软件包中的所有决策表文件中是唯一的。
如果要处理多个工作表表,请创建一个 .properties
文件,其名称与电子表格图书器相同。.properties
文件必须包含带有以逗号分隔的值(CSV)的属性表,例如:
sheets=Sheet1,Sheet2
在上传 Business Central 中的决策表后,规则会呈现如下 DRL 规则,如以下示例表格:
//row 12 rule "Basic_12" salience 10 when $order : Order( itemsCount > 0, itemsCount <= 3, deliverInDays == 1 ) then insert( new Charge( 35 ) ); end
默认情况下,在决策引擎处理决策表单元之前或之后的任何空格之前或之后的任何空格会被移除。要保留您在单元格之前或之后使用的空白空间,请将 drools
设为 Red Hat Process Automation Manager 发行中的 false
。
例如,如果您在红帽 JBoss EAP 中使用 Red Hat Process Automation Manager,请在 $EAP_HOME/standalone/configuration/standalone-full.xml
文件中添加以下系统属性:
<property name="drools.trimCellsInDTable" value="false"/>
如果您使用嵌入在 Java 应用程序中的决策引擎,使用以下命令添加系统属性:
java -jar yourApplication.jar -Ddrools.trimCellsInDTable=false
44.1. 规则集定义
决策表的 RuleSet
区域中的条目定义了您要应用到软件包中所有规则的 DRL 结构和规则属性(不仅仅在电子表格中)。条目必须位于垂直的单元对序列中,其中第一个单元包含一个标签以及右侧包含值的单元格。表格电子表格只能有一个 RuleSet
区域。
下表列出了 RuleSet
定义支持的标签和值:
标签 | 值 | 使用 |
---|---|---|
|
生成的 DRL 文件的软件包名称。可选,默认为 | 必须是第一个条目。 |
|
| 可选,最多一次。如果省略,则不会强制触发顺序。 |
| 整数数字值 | 可选,最多一次。在连续模式中,此选项用于设置 salience 的开始值。如果省略,默认值为 65535。 |
| 整数数字值 | 可选,最多一次。在连续模式中,使用这个选项检查是否没有违反此最小值。如果省略,则默认值为 0。 |
|
| 可选,最多一次。如果省略,则转义引号。 |
|
| 可选,最多一次。如果省略,DRL 会采用格式化的值。 |
| 从另一个软件包中导入的、以逗号分隔的 Java 类列表。 | 可选,可以重复使用。 |
| DRL 全局声明(类型后跟变量名称)。必须使用逗号分隔多个全局定义。 | 可选,可以重复使用。 |
| 根据 DRL 语法,一个或多个功能定义。 | 可选,可以重复使用。 |
| 根据 DRL 语法,一个或多个查询定义。 | 可选,可以重复使用。 |
| 根据 DRL 语法,一个或多个声明类型。 | 可选,可以重复使用。 |
| 此决策表中生成的规则单元。 | 可选,最多一次。如果省略,则规则不属于任何单元。 |
|
|
可选,最多一次。如果省略,则使用 |
在某些情况下,Microsoft Office、LibreOffice 和 OpenOffice 可能会以不同的方式编码双引号,从而导致编译错误。例如,"A"
将失败,但 "A"
将传递。