このセクションでは、さまざまな種類のファクトに関するポリシー テストの出力例について説明します。
.Net クラス
"LoanProcessing" ポリシーの "TestRule1" ルールの例:
IF test.get_ID > 0
THEN <do something>
出力:
RULESET のルール エンジン トレース: LoanProcessing 3/16/2004 9:50:28 AM
FACT ACTIVITY 3/16/2004 9:50:28 AM
ルール エンジン インスタンス識別子: 9effe3f9-d3ad-4125-99fa-56bb379188f7
ルール セット名: LoanProcessing
操作: Assert
オブジェクトの種類: MyTest.test
オブジェクト インスタンス識別子: 872
条件評価テスト (一致) 3/16/2004 9:50:28 AM
ルール エンジン インスタンス識別子: 9effe3f9-d3ad-4125-99fa-56bb379188f7
ルール セット名: LoanProcessing
テスト式: MyTest.test.get_ID > 0
左オペランド値: 100
右オペランド値: 0
テスト結果: True
議題の更新 2004/3/16 9:50:28 AM
ルール エンジン インスタンス識別子: 9effe3f9-d3ad-4125-99fa-56bb379188f7
ルール セット名: LoanProcessing
操作: 追加
ルール名: TestRule1
競合解決基準: 0
実行されたルール 2004/3/16 9:50:28 AM
ルール エンジン インスタンス識別子: 9effe3f9-d3ad-4125-99fa-56bb379188f7
ルール セット名: LoanProcessing
ルール名: TestRule1
競合解決基準: 0
FACT ACTIVITY 3/16/2004 9:50:28 AM
ルール エンジン インスタンス識別子: 9effe3f9-d3ad-4125-99fa-56bb379188f7
ルール セット名: LoanProcessing
操作: 取り消し
オブジェクトの種類: MyTest.test
オブジェクト インスタンス識別子: 872
DataConnection/TypedDataRow
"LoanProcessing" ポリシーの "TestRule1" ルールの例:
IF NorthWind.CustInfo.CreditCardBalance > 0
THEN <do something>
出力:
RULESET のルール エンジン トレース: LoanProcessing 3/16/2004 8:30:16 AM
FACT ACTIVITY 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
操作: Assert
オブジェクトの種類: DataConnection:Northwind:CustInfo
オブジェクト インスタンス識別子: 874
条件の評価テスト (一致) 2004/3/16 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
テスト式: [CustInfo] の [CreditCardBalance] 0 から * を > 選択します
左側のオペランド値:
右側のオペランド値:
テスト結果: True
FACT ACTIVITY 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
操作: Assert
オブジェクトの種類: TypedDataRow:Northwind:CustInfo
オブジェクト インスタンス識別子: 177556
AGENDA UPDATE 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
操作: 追加
ルール名: TestRule1
競合解決基準: 0
FACT ACTIVITY 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
操作: Assert
オブジェクトの種類: TypedDataRow:Northwind:CustInfo
オブジェクト インスタンス識別子: 177559
AGENDA UPDATE 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
操作: 追加
ルール名: TestRule1
競合解決基準: 0
FACT ACTIVITY 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
操作: Assert
オブジェクトの種類: TypedDataRow:Northwind:CustInfo
オブジェクト インスタンス識別子: 177558
AGENDA UPDATE 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
操作: 追加
ルール名: TestRule1
競合解決基準: 0
RULE FIRED 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
ルール名: TestRule1
競合解決基準: 0
RULE FIRED 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
ルール名: TestRule1
競合解決基準: 0
RULE FIRED 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
ルール名: TestRule1
競合解決基準: 0
FACT ACTIVITY 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
操作: 取り消し
オブジェクトの種類: DataConnection:Northwind:CustInfo
オブジェクト インスタンス識別子: 874
FACT ACTIVITY 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
操作: 取り消し
オブジェクトの種類: TypedDataRow:Northwind:CustInfo
オブジェクト インスタンス識別子: 177559
FACT ACTIVITY 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
操作: 取り消し
オブジェクトの種類: TypedDataRow:Northwind:CustInfo
オブジェクト インスタンス識別子: 177558
FACT ACTIVITY 3/16/2004 8:30:16 AM
ルール エンジン インスタンス識別子: 1aad35bb-0599-470b-b0fa-73b3fa1dfb83
ルール セット名: LoanProcessing
操作: 取り消し
オブジェクトの種類: TypedDataRow:Northwind:CustInfo
オブジェクト インスタンス識別子: 177556
上記の例は、CustInfo テーブルの 3 つの行がルールの条件を満たしていることを示しています。 この結果、エンジンに 3 つの一意の TypedDataRows がアサートされ、議題の更新およびルール実行が各インスタンスで発生します。
TypeDataTable/TypedDataRow
"LoanProcessing" ポリシーの "TestRule1" ルールの例:
IF NorthWind.CustInfo.CreditCardBalance > 0
THEN <do something>
出力:
RULESET のルール エンジン トレース: LoanProcessing 3/17/2004 11:27:35 AM
FACT ACTIVITY 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
操作: Assert
オブジェクトの種類: TypedDataTable:Northwind:CustInfo
オブジェクト インスタンス識別子: 377
FACT ACTIVITY 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
操作: Assert
オブジェクトの種類: TypedDataRow:Northwind:CustInfo
オブジェクト インスタンス識別子: 376
条件評価テスト (一致) 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
テスト式: TypedDataRow:Northwind:CustInfo.CreditCardBalance > 0
左オペランド値: 500
右オペランド値: 0
テスト結果: True
AGENDA UPDATE 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
操作: 追加
ルール名: TestRule1
競合解決基準: 0
FACT ACTIVITY 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
操作: Assert
オブジェクトの種類: TypedDataRow:Northwind:CustInfo
オブジェクト インスタンス識別子: 375
条件評価テスト (一致) 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
テスト式: TypedDataRow:Northwind:CustInfo.CreditCardBalance > 0
左オペランド値: 1000
右オペランド値: 0
テスト結果: True
AGENDA UPDATE 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
操作: 追加
ルール名: TestRule1
競合解決基準: 0
FACT ACTIVITY 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
操作: Assert
オブジェクトの種類: TypedDataRow:Northwind:CustInfo
オブジェクト インスタンス識別子: 374
条件評価テスト (一致) 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
テスト式: TypedDataRow:Northwind:CustInfo.CreditCardBalance > 0
左オペランド値: 35000
右オペランド値: 0
テスト結果: True
AGENDA UPDATE 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
操作: 追加
ルール名: TestRule1
競合解決基準: 0
RULE FIRED 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
ルール名: TestRule1
競合解決基準: 0
RULE FIRED 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
ルール名: TestRule1
競合解決基準: 0
RULE FIRED 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
ルール名: TestRule1
競合解決基準: 0
FACT ACTIVITY 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
操作: 取り消し
オブジェクトの種類: TypedDataTable:Northwind:CustInfo
オブジェクト インスタンス識別子: 377
FACT ACTIVITY 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
操作: 取り消し
オブジェクトの種類: TypedDataRow:Northwind:CustInfo
オブジェクト インスタンス識別子: 375
FACT ACTIVITY 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
操作: 取り消し
オブジェクトの種類: TypedDataRow:Northwind:CustInfo
オブジェクト インスタンス識別子: 374
FACT ACTIVITY 3/17/2004 11:27:35 AM
ルール エンジン インスタンス識別子: 0f7bcdf3-8103-4990-a740-acaeee386439
ルール セット名: LoanProcessing
操作: 取り消し
オブジェクトの種類: TypedDataRow:Northwind:CustInfo
オブジェクト インスタンス識別子: 376
Note
上記の例は、TypedDataTable に 3 つの行が含まれていることを示しています。各行は、TypedDataRow としてアサートされています。 各行は、条件で True として評価され、ルールが議題に追加されて実行されます。
TypedXmlDocument
"LoanProcessing" ポリシーの "TestRule1" ルールの例:
IF Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType.TimeInMonths >= 4
THEN <do something>
出力:
RULESET のルール エンジン トレース: LoanProcessing 3/17/2004 9:23:05 AM
ファクト アクティビティ 2004/3/17 9:23:05 AM
ルール エンジン インスタンス識別子: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
ルール セット名: LoanProcessing
操作: Assert
オブジェクトの種類: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case
オブジェクト インスタンス識別子: 858
ファクト アクティビティ 2004/3/17 9:23:05 AM
ルール エンジン インスタンス識別子: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
ルール セット名: LoanProcessing
操作: Assert
オブジェクトの種類: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType
オブジェクト インスタンス識別子: 853
条件評価テスト (一致) 3/17/2004 9:23:05 AM
ルール エンジン インスタンス識別子: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
ルール セット名: LoanProcessing
テスト式: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType.TimeInMonths >= 4
左オペランド値: 6
右オペランド値: 4
テスト結果: True
AGENDA UPDATE 3/17/2004 9:23:05 AM
ルール エンジン インスタンス識別子: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
ルール セット名: LoanProcessing
操作: 追加
ルール名: TestRule1
競合解決基準: 0
RULE FIRED 3/17/2004 9:23:05 AM
ルール エンジン インスタンス識別子: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
ルール セット名: LoanProcessing
ルール名: TestRule1
競合解決基準: 0
ファクト アクティビティ 2004/3/17 9:23:05 AM
ルール エンジン インスタンス識別子: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
ルール セット名: LoanProcessing
操作: 取り消し
オブジェクトの種類: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case
オブジェクト インスタンス識別子: 858
ファクト アクティビティ 2004/3/17 9:23:05 AM
ルール エンジン インスタンス識別子: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
ルール セット名: LoanProcessing
操作: 取り消し
オブジェクトの種類: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType
オブジェクト インスタンス識別子: 853
この例では、 TypedXmlDocument が"Microsoft.Samples.BizTalk.LoansProcessor.Case" というドキュメントの種類でエンジンにアサートされたことを示します。 ルールで定義されている XPath セレクターに基づいて、エンジンは、ドキュメントの種類とセレクター文字列に基づいて、型 "Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType" を持つ子 TypedXmlDocument を作成してアサートしました。
この子 TypedXmlDocument は、条件で True に評価されたため、議題の更新やルールの実行が行われます。 その後、親と子 の TypedXmlDocument が取り消されました。
Update 関数
"Order" ポリシーの例
"InventoryCheck" ルール
IF Inventory.AllocateInventory == True
THEN Order.inventoryAvailable == True
Update(Order)
"Ship" ルール
IF Order.inventoryAvailable == True
THEN Shipment.ShipOrder
出力:
RULESET のルール エンジン トレース: Order 3/17/2004 10:31:17 AM
FACT ACTIVITY 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
操作: Assert
オブジェクトの種類: TestClasses.Order
オブジェクト インスタンス識別子: 448
条件評価テスト (一致) 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
テスト式: TestClasses.Order.inventoryAvailable == True
左オペランド値: null
右オペランド値: True
テスト結果: False
FACT ACTIVITY 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
操作: Assert
オブジェクトの種類: TestClasses.Shipment
オブジェクト インスタンス識別子: 447
FACT ACTIVITY 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
操作: Assert
オブジェクトの種類: TestClasses.Inventory
オブジェクト インスタンス識別子: 446
条件評価テスト (一致) 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
テスト式: TestClasses.Inventory.AllocateInventory == True
左オペランド値: True
右オペランド値: True
テスト結果: True
AGENDA UPDATE 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
操作: 追加
ルール名: InventoryCheck
競合解決基準: 0
RULE FIRED 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
ルール名: InventoryCheck
競合解決基準: 0
FACT ACTIVITY 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
操作: 更新
オブジェクトの種類: TestClasses.Order
オブジェクト インスタンス識別子: 448
条件評価テスト (一致) 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
テスト式: TestClasses.Order.inventoryAvailable == True
左オペランド値: True
右オペランド値: True
テスト結果: True
AGENDA UPDATE 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
操作: 追加
ルール名: 出荷
競合解決基準: 0
RULE FIRED 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
ルール名: 出荷
競合解決基準: 0
FACT ACTIVITY 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
操作: 取り消し
オブジェクトの種類: TestClasses.Order
オブジェクト インスタンス識別子: 448
FACT ACTIVITY 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
操作: 取り消し
オブジェクトの種類: TestClasses.Shipment
オブジェクト インスタンス識別子: 447
FACT ACTIVITY 3/17/2004 10:31:17 AM
ルール エンジン インスタンス識別子: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
ルールセット名: Order
操作: 取り消し
オブジェクトの種類: TestClasses.Inventory
オブジェクト インスタンス識別子: 446
この例では、Ship ルールに関連付けられている条件が最初に確認されるときに False と評価されます。 ただし、InventoryCheck ルールが実行されると、Order オブジェクトの inventoryAvailable フィールドが変更され、Update コマンドが Order オブジェクトのエンジンで発行されます。 このため、Ship ルールが再評価されます。 今回の条件は True に評価され、Ship ルールが実行されます。
Note
ルールが不正確に書き込まれると、Update 関数の前向き連鎖で、無限ループに陥る可能性があります。 無限ループが発生すると、ビジネス ルール作成ツールのポリシーをテストするときに、"ルール エンジンが実行ループを検出しました。" というエラー メッセージが表示されます。