Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
适用于:Azure 逻辑应用(标准)
本指南演示如何使用 Microsoft Rules Composer 测试规则集,并包括规则测试的输出示例。
为什么以增量方式测试规则集?
生成规则集以将业务逻辑与标准逻辑应用工作流集成时,请以增量方式测试规则集,或者至少在应用程序中使用规则之前测试规则集。 这样,就可以确认每个规则的工作方式,或者在规则不太复杂且更易于故障排除时更快地找到并解决问题。
如果你等到同时测试所有规则,尤其是当这些规则很长或复杂时,你可能会遇到比预期更多的错误,解决这些错误会花费更长的时间,并且调试起来更困难。
先决条件
下载并安装 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
更新函数
此示例演示名为“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