型指定されたファクト
型指定されたファクト は、 ITypedFact インターフェイスを実装するクラスです。 TypedXmlDocument、 DataConnection、 TypedDataTable、 TypedDataRow。
TypedXmlDocument クラスは、ビジネス ルール フレームワークの XML ドキュメント型を表します。 XML ドキュメントのノードをルールの引数として使用すると、セレクター バインドとフィールド バインドという 2 つの XPath 式が作成されます。
ノードに子ノードがない場合は、 セレクター バインド (XmlDocument バインドとも呼ばれます) がノードの親ノードに作成され、 Field バインディング (XmlDocumentMember バインドとも呼ばれます) がノード自体に作成されます。 このフィールド バインドはセレクター バインドと相対的な関係にあります。 ノードに子ノードがある場合は、そのノードにセレクター バインドが作成され、フィールド バインドは作成されません。
次のスキーマがあると仮定します。
ファクト エクスプローラー
Case.xsd
Income ノードが選択されている場合は、このノードに子ノードがないため、セレクター バインドのみが作成されます。 [プロパティ] ウィンドウの [XPath セレクター ] プロパティの既定の XPath 式には、次のものが含まれます。
/*[local-name()='Root' and namespace-uri()='http://LoansProcessor.Case']/*[local-name()='Income' and namespace-uri()='']
一方、Name ノードが選択されている場合は、セレクター バインドとフィールド バインドが作成されます。 バインド情報は次のようになります。
プロパティ | 値 |
---|---|
[XPath フィールド] | *[local-name()='Name' and namespace-uri()=''] |
[XPath セレクター] | /*[local-name()='Root' と namespace-uri()=''http://LoansProcessor.Case] |
ノードをルールの引数にドラッグする前に、XML ノードに対する既定の XPath 式を変更することもできます。これにより、新しいバインド情報がポリシーに含められます。 ただし、XPath 式に加えた編集はすべて、スキーマを再読み込みするときにビジネス ルール作成ツールで再入力する必要があります。
XML ノードのボキャブラリ定義が作成される際、バインドの XPath 式には、前に説明したルールに基づいた同様の既定値が設定されますが、これはボキャブラリ定義ウィザードで編集できます。 式に加えた変更はボキャブラリ定義に含められ、その定義から作成されたルールの引数すべてに反映されます。
DataConnection は、 RuleEngine ライブラリで提供される .NET クラスです。 これには、.NET SqlConnection インスタンスと DataSet 名が含まれています。 DataSet 名を使用すると、SqlConnection の一意の識別子を作成でき、結果の型の定義に使用されます。
DataConnection クラスは、ビジネス ルール エンジンにパフォーマンスの最適化を提供します。 ポリシーに関連しない多数のデータベース行 (TypedDataRow クラス) を含む可能性があるエンジンの非常に大きなデータベース テーブル (TypedDataTable クラス) にアサートするのではなく、軽量の DataConnection をアサートできます。 エンジンはポリシーを評価すると、ルールの述語/アクションに基づいて SELECT クエリを動的に構築し、実行時に DataConnection にクエリを実行します。 たとえば、次のようなルールがあるとします。
IF NorthWind.Products.UnitPrice >= 0
THEN <do something>
ルールから次の SQL クエリが生成されます。
Select * From [Product] Where [UnitPrice] >= 0
クエリの結果がデータ行としてエンジンにアサートされます。
注意
DataConnection での OleDbConnection の使用は現在サポートされていません。
ルールの条件またはアクションで使用するデータベース テーブル/列を選択する場合は、Fact エクスプローラー の [データベース] タブの [データベース] タブの [データベース バインドの種類] ドロップダウン ボックスから [データ接続] または [データベース テーブル/行] を選択して、DataConnection または TypedDataTable を使用してオブジェクトにバインドすることを選択できます。
注意
既定では DataConnection バインドが使用されます。
ADO.NET DataTable オブジェクトをエンジンにアサートすることはできますが、他の .NET オブジェクトと同様に扱われます。 ほとんどの場合、代わりにルール エンジン クラス TypedDataTable をアサートする必要があります。
TypedDataTable は、ADO.NET DataTable を含むラッパー クラスです。 コンストラクターは単に DataTable を受け取ります。 テーブルまたはテーブルの列をルール引数として使用すると、式は TypedDataTable ではなく、個々の TypedDataRow ラッパーに対して評価されます。
これは、ADO DataRow オブジェクトの型指定されたファクト ラッパーです。 ビジネス ルール作成ツールでテーブルまたは列を rule 引数にドラッグすると、返される TypedDataRow ラッパーに対して作成されたルールが作成されます。