使用 Microsoft Rules Composer 测试规则集(预览版)
适用于:Azure 逻辑应用(标准)
重要
此功能为预览版,受 Azure 预览版补充使用条款约束。
生成规则集以便将业务逻辑与标准工作流集成时,请以增量方式或在应用程序中使用规则之前测试规则集。 这样,你可以检查规则是否按预期的方式工作,或者当规则不太复杂且更易于故障排除时,可以更快地找到并解决问题。
如果等到最后再同时测试所有规则或等操作完成后再测试,而规则又很长或很复杂,那么可能会出现比想象中更多的错误或问题,这可能需要更长的时间来解决或很难排除故障。
先决条件
下载并安装 Microsoft Rules Composer。
包含要处理的规则集和要测试的事实的 XML 文件。
若要添加事实,请在从“选择事实”窗口中引用的 XML 文件中指定其值,该窗口会在通过以下步骤选择“测试规则集”后打开。 你可能想要生成一个事实创建者来添加 .NET 事实。 有关详细信息,请参阅生成事实创建者和检索者。
测试规则集版本
打开 Microsoft Rules Composer。 在“规则集资源管理器”窗口中,选择要测试的规则集版本,这将打开版本信息窗口。
从规则集版本的快捷菜单中,选择“测试规则集”。
在显示的“选择事实”框中,顶部窗口显示规则集规则引用的事实类型。
若要添加事实实例,请在“XML 文档”或“.NET 类”下选择相应的事实类型,然后选择“添加实例”。
注意
如果在规则中断言了派生类,但规则是直接针对基类成员编写的,那么就会断言基类实例,并针对基类实例评估条件。
若要移除事实实例,请选择相应的事实类型,然后选择“移除实例”。
若要添加生成的事实创建者,请在“事实创建者”窗口中,选择“添加”。
准备就绪后,选择“测试”。
打开测试输出窗口的快捷菜单,然后选择用于保存、清除、选择或复制输出文本的选项,以便可以查看结果。
下表介绍了可用于处理输出文本的“输出”窗口命令:
任务 快捷命令 清除“输出”窗口中的所有文本。 全部清除 将“输出”窗口中的选定文本复制到剪贴板。 复制 选择“输出”窗口中的所有文本。 全选 将“输出”窗口中包含的文本保存到指定文件。 保存到文件
规则集测试跟踪输出
本部分介绍使用 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
下表描述了此条目中的信息:
项 | 说明 |
---|---|
测试表达式 | 规则中的简单一元表达式或二进制表达式。 |
左操作数值 | 表达式左侧的术语的值。 |
右操作数值 | 表达式右侧的术语的值。 |
测试结果 | 计算的结果,即 True 或 False。 |
议程更新
此活动指示添加到规则引擎的后续执行议程中的规则。 以下示例显示了一个示例议程更新条目:
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