使用 Microsoft Rules Composer 测试规则集(预览版)

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

重要

此功能为预览版,受 Azure 预览版补充使用条款约束。

生成规则集以便将业务逻辑与标准工作流集成时,请以增量方式或在应用程序中使用规则之前测试规则集。 这样,你可以检查规则是否按预期的方式工作,或者当规则不太复杂且更易于故障排除时,可以更快地找到并解决问题。

如果等到最后再同时测试所有规则或等操作完成后再测试,而规则又很长或很复杂,那么可能会出现比想象中更多的错误或问题,这可能需要更长的时间来解决或很难排除故障。

先决条件

  • 下载并安装 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

Update 函数

此示例演示名为“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)

“Ship”规则

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