Microsoft Rules Composer を使ってルールセットをテストする (プレビュー)
適用対象: Azure Logic Apps (Standard)
重要
この機能はプレビュー段階にあり、「Microsoft Azure プレビューの追加使用条件」が適用されます。
ビジネス ロジックを Standard ワークフローと統合できるようにルールセットを構築するときは、ルールセットを段階的にテストするか、アプリケーションでルールを使用する前にテストします。 そうすることで、ルールが途中で期待した方法で動作することを確認して、ルールの複雑性が低く、トラブルシューティングが容易な状態で、問題をより早く見つけて修正したりできます。
すべてのルールを同時に、もしくはすべて完了したときにテストすることで、ルールが長いか複雑である場合は、思ったよりも多くのエラーや問題が発生する可能性があり、解決に時間がかかる場合り、トラブルシューティングが困難であることがあります。
前提条件
Microsoft Rules Composer をダウンロードしてインストールします。
作業するルールセットとテストするファクトを含む XML ファイル。
ファクトを追加するには、次の手順で [テスト ルール セット] を選択した後に表示される [ファクトの選択] ウィンドウから参照する XML ファイル 値を指定します。 .NET ファクトを追加するファクト作成者を構築することもできます。 詳細については、「ファクト クリエーターとレトリバーの構築」を参照してください。
ルールセットのバージョンをテストする
Microsoft Rules Composer を開きます。 [RuleSet エクスプローラー] ウィンドウで、テストするルールセットのバージョンを選択し、バージョン情報ウィンドウを開きます。
ルールセット バージョンのショートカット メニューから、[テスト ルールセット] を選択します。
表示される [ファクトの選択] ボックスに、上部のウィンドウにルール セット ルールによって参照されるファクトの種類が表示されます。
ファクト インスタンスを追加するには、[XML ドキュメント] または [.NET クラス] で、対応するファクトの種類を選択し、[インスタンスの追加] を選択します。
Note
派生クラスを規則にアサートするが、ルールが基底クラスのメンバーに対して直接書き込まれる場合、基底クラス インスタンスは代わりにアサートされ、条件は基底クラス インスタンスに対して評価されます。
ファクト インスタンスを削除するには、対応するファクトの種類を選択し、[インスタンスの削除] を選択します。
作成したファクト作成者を追加するには、[ファクト作成コンポーネント] ウィンドウで、[追加] を選択します。
準備ができたら、[テスト] を選択します。
出力ウィンドウには、ルールセットのテスト トレース出力 が表示されます。
テスト出力ウィンドウのショートカット メニューを開き、出力テキストを保存、クリア、選択、またはコピーするオプションを選択して、結果を確認できます。
次のテーブルでは、出力テキストの操作に使用できる出力ウィンドウ コマンドについて説明します:
タスク ショートカット コマンド 出力ウィンドウのすべてのテキストを消去します。 [すべてクリア] 出力ウィンドウで選択したテキストを、クリップボードにコピーします。 コピー 出力ウィンドウに表示されているすべてのテキストを選択します。 [すべて選択] 出力ウィンドウに表示されているテキストを指定したファイルに保存します。 ファイルに保存
ルールセットのテスト トレース出力
このセクションでは、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 関数はエラー "アサート– 識別されないファクト" を示します。 - 更新: ルールは、新しいデータと状態に基づいて、再評価のためにエンジンに再評価する必要があるファクトを更新します。 - 取り消し: ワーキング メモリからファクトが削除されます。 |
オブジェクトの種類 | 特定のアクティビティのファクトの種類: - 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 Name | 議題に追加または削除されるルールの名前。 |
競合解決条件 | ルールの優先順位。アクションが実行されるタイミングと優先度の高いアクションが最初に実行される場所の相対的な順序を決定します。 |
実行されたルール
このアクティビティは、ルールのアクションの実行を示します。 ルールが発生したエントリの例を次に示します:
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 フィールドが変更され、更新 コマンドが "Order オブジェクト" のエンジンに対して発行され、"Ship" ルールの再評価が行われます。 今回の条件は True に評価され、Ship ルールが実行されます。
Note
ルールが正しく記述されていない場合は、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 ファクトの種類
この例では、Microsoft.Samples.BizTalk.LoansProcessor.Case という名前のドキュメント型を持つ TypedXmlDocument エンティティがルール エンジンにアサートされていることを示します。 このルールで定義されている XPath セレクター 値に基づいて、エンジンは、ドキュメントの種類とセレクター文字列に基づいて、Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType という名前の型を持つ TypedXmlDocument エンティティの子を作成してアサートします。 この子 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