Compartir a través de

使用Microsoft规则编辑器测试规则集

适用于:Azure 逻辑应用(标准)

本指南演示如何使用 Microsoft Rules Composer 测试规则集,并包括规则测试的输出示例。

为什么以增量方式测试规则集?

生成规则集以将业务逻辑与标准逻辑应用工作流集成时,请以增量方式测试规则集,或者至少在应用程序中使用规则之前测试规则集。 这样,就可以确认每个规则的工作方式,或者在规则不太复杂且更易于故障排除时更快地找到并解决问题。

如果你等到同时测试所有规则,尤其是当这些规则很长或复杂时,你可能会遇到比预期更多的错误,解决这些错误会花费更长的时间,并且调试起来更困难。

先决条件

  • 下载并安装 Microsoft Rules Composer

  • 包含要处理的规则集和要测试的事实的 XML 文件。

    若要添加事实,请在从“选择事实”窗口中引用的 XML 文件中指定其值,该窗口会在通过以下步骤选择“测试规则集”后打开。 你可能想要生成一个事实创建者来添加 .NET 事实。 有关详细信息,请参阅生成事实创建者和检索者

测试规则集版本

  1. 打开 Microsoft Rules Composer。 在“规则集资源管理器”窗口中,选择要测试的规则集版本,这将打开版本信息窗口。

  2. 从规则集版本的快捷菜单中,选择“测试规则集”。

    在显示的“选择事实”框中,顶部窗口显示规则集规则引用的事实类型。

  3. 若要添加事实实例,请在“XML 文档”或“.NET 类”下选择相应的事实类型,然后选择“添加实例”。

    注意

    如果在规则中断言了派生类,但规则是直接针对基类成员编写的,那么就会断言基类实例,并针对基类实例评估条件。

  4. 若要移除事实实例,请选择相应的事实类型,然后选择“移除实例”。

  5. 若要添加生成的事实创建者,请在“事实创建者”窗口中,选择“添加”。

  6. 准备就绪后,选择“测试”。

    输出窗口显示规则集测试跟踪输出

  7. 打开测试输出窗口的快捷菜单,然后选择用于保存、清除、选择或复制输出文本的选项,以便可以查看结果。

    下表介绍了可用于处理输出文本的“输出”窗口命令:

    任务 快捷命令
    清除“输出”窗口中的所有文本。 全部清除
    将“输出”窗口中的选定文本复制到剪贴板。 复制
    在“输出”窗口中选择所有文本。 全选
    将“输出”窗口中包含的文本保存到指定文件。 保存到文件

规则集测试跟踪输出

本部分介绍使用 Microsoft Rules Composer 测试规则集时跟踪中包含的跟踪信息和活动。 跟踪输出可以包括以下语句类型:

  • 事实性活动
  • 条件评估
  • 议程更新
  • 触发的规则

事实活动

此活动表明引擎工作内存中的事实发生了变化。 以下示例展示一个事实活动记录:

FACT ACTIVITY 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: MyTest.test
Object Instance Identifier: 872

下表描述了此条目中的信息:

项目 说明
规则引擎实例标识符 RuleEngine 实例的唯一标识符,它为规则触发提供执行环境。
规则集名称 规则集的名称。
操作 以下操作类型可以在事实活动中发生:

- 断言:将事实添加到工作内存中。 注意:如果断言事实的类型与规则集中使用的任何类型都不匹配,Assert 函数将显示错误“Assert – Fact Unrecognized”。

- 更新:规则会更新一个事实,然后必须根据新的数据和状态将该事实重新输入引擎进行重新评估。

- 收回:从工作内存中移除事实。
“对象类型” 特定活动的事实类型:- TypedXmlDocument

显示了对父级和子级 TypedXmlDocument 实例的断言。
对象实例标识符 事实引用的唯一实例 ID。

条件评估

此活动显示评估单个谓词的结果。 以下示例显示了一个条件评估条目示例:

CONDITION EVALUATION TEST (MATCH) 1/07/2023 5:33:13 PM
Rule Engine Instance Identifier: f1dd3ff2-b4a8-4fe1-8d46-4d9b3e2502d3
Ruleset Name: LoanProcessing
Test Expression: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:Root.EmploymentType/TimeInMonths >= 18
Left Operand Value: 31
Right Operand Value: 18
Test Result: True

下表描述了此条目中的信息:

项目 说明
测试表达式 规则中的简单一元表达式或二进制表达式。
左操作数的值 表达式左侧术语的值。
右操作数值 表达式中右侧项的值。
测试结果 计算的结果,即 TrueFalse

议程更新

此活动指示将规则添加到规则引擎的议程中以供后续执行。 以下示例显示了一个示例议程更新条目:

AGENDA UPDATE 1/07/2023 5:33:13 PM
Rule Engine Instance Identifier: f1dd3ff2-b4a8-4fe1-8d46-4d9b3e2502d3
Ruleset Name: LoanProcessing
Operation: Add
Rule Name: Employment Status Rule
Conflict Resolution Criteria: 0

下表描述了此条目中的信息:

项目 说明
操作 从议程中添加或删除规则的操作。
规则名称 从议程中添加或移除的规则的名称。
冲突解决条件 规则的优先级,用于确定操作执行时间的相对顺序,以及优先执行高优先级操作的位置。

触发的规则

此活动指示执行规则的操作。 以下示例显示了触发的规则条目:

RULE FIRED 1/07/2023 5:33:13 PM
Rule Engine Instance Identifier: f1dd3ff2-b4a8-4fe1-8d46-4d9b3e2502d3
Ruleset Name: LoanProcessing
Rule Name: Residency Status Rule
Conflict Resolution Criteria: 10

更新函数

此示例演示名为“Order”的示例规则集中的示例“InventoryCheck”规则和“Ship”规则。首次检查规则时,与“Ship”规则关联的条件的计算结果为 False。 但是,当“InventoryCheck”规则触发时,Order 上的 InventoryAvailable 字段将更改,并且 Update 命令将颁发给“Order 对象”的引擎,从而导致重新评估“Ship”规则。 这次条件评估结果为True,因此“Ship”规则被触发。

注意

如果规则未正确编写,则使用 Update 函数向前链接可能会导致无限循环。 在此事件中,在 Microsoft Rules Composer 中测试规则集时,会收到一条错误消息,其中包含文本“规则引擎检测到执行循环”

InventoryCheck 规则

IF Inventory.AllocateInventory == True
THEN Order.InventoryAvailable == True
Update(Order)

船舶规则

IF Order.InventoryAvailable == True
THEN Shipment.ShipOrder

输出

RULE ENGINE TRACE for RULESET: Order 3/17/2023 10:31:17 AM
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Assert
Object Type: TestClasses.Order
Object Instance Identifier: 448
CONDITION EVALUATION TEST (MATCH) 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Test Expression: TestClasses.Order.inventoryAvailable == True
Left Operand Value: null
Right Operand Value: True
Test Result: False
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Assert
Object Type: TestClasses.Shipment
Object Instance Identifier: 447
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Assert
Object Type: TestClasses.Inventory
Object Instance Identifier: 446
CONDITION EVALUATION TEST (MATCH) 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Test Expression: TestClasses.Inventory.AllocateInventory == True
Left Operand Value: True
Right Operand Value: True
Test Result: True
AGENDA UPDATE 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Add
Rule Name: InventoryCheck
Conflict Resolution Criteria: 0
RULE FIRED 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Rule Name: InventoryCheck
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Update
Object Type: TestClasses.Order
Object Instance Identifier: 448
CONDITION EVALUATION TEST (MATCH) 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Test Expression: TestClasses.Order.inventoryAvailable == True
Left Operand Value: True
Right Operand Value: True
Test Result: True
AGENDA UPDATE 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Add
Rule Name: Ship
Conflict Resolution Criteria: 0
RULE FIRED 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Rule Name: Ship
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Retract
Object Type: TestClasses.Order
Object Instance Identifier: 448
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Retract
Object Type: TestClasses.Shipment
Object Instance Identifier: 447
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Retract
Object Type: TestClasses.Inventory
Object Instance Identifier: 446

规则集测试跟踪输出示例

本部分提供了显示不同类型的事实的规则集测试输出的示例。

.NET 类事实类型

此示例是名为“LoanProcessing”的规则集中名为“TestRule1”的示例规则:

IF test.get_ID > 0
THEN <do something>

输出

RULE ENGINE TRACE for RULESET: LoanProcessing 3/16/2023 9:50:28 AM
FACT ACTIVITY 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: MyTest.test
Object Instance Identifier: 872
CONDITION EVALUATION TEST (MATCH) 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Test Expression: MyTest.test.get_ID > 0
Left Operand Value: 100
Right Operand Value: 0
Test Result: True
AGENDA UPDATE 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Add
Rule Name: TestRule1
Conflict Resolution Criteria: 0
RULE FIRED 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Rule Name: TestRule1
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Retract
Object Type: MyTest.test
Object Instance Identifier: 872

TypedXmlDocument 事实类型

此示例演示 TypedXmlDocument 实体,其文档类型命名为 Microsoft.Samples.BizTalk.LoansProcessor.Case,已被断言到规则引擎中。 根据规则中定义的 XPath 选择器值,引擎基于文档类型和选择器字符串创建和断言子级 TypedXmlDocument 实体,该实体的类型名为 Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType。 此子级 TypedXmlDocument 实体在条件中的计算结果为 True,从而导致计划更新和规则触发。 然后收回父级和子级 TypedXmlDocument 实体。

此示例展示了在名为“LoanProcessing”的规则集中,名为“TestRule1”的示例规则。

IF Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType.TimeInMonths >= 4
THEN <do something>

输出

RULE ENGINE TRACE for RULESET: LoanProcessing 3/17/2023 9:23:05 AM
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case
Object Instance Identifier: 858
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType
Object Instance Identifier: 853
CONDITION EVALUATION TEST (MATCH) 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Test Expression: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType.TimeInMonths >= 4
Left Operand Value: 6
Right Operand Value: 4
Test Result: True
AGENDA UPDATE 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Add
Rule Name: TestRule1
Conflict Resolution Criteria: 0
RULE FIRED 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Rule Name: TestRule1
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Retract
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case
Object Instance Identifier: 858
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Retract
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType
Object Instance Identifier: 853