1

私は BRE と BizTalk 全体にかなり慣れていないので、これは非常に単純で、私を回避するだけかもしれません...

私がやりたいことは次のとおりです: BRE でビジネス ルールを作成し、受信メッセージを入力として受け取り、メッセージに含まれる値が指定された値のセット内の値のいずれかと一致するかどうかを確認します。サンプル メッセージは次のとおりです。その後、<isFound>フィールドはそれに応じて更新されます。

<n1:DocumentTemplate xmlns:n1="mynamespace">
    <rootOid>2.16.840.1.113883.3.51.60.2.5</rootOid>
    <isFound>false</isFound>
</n1:DocumentTemplate>

<rootOid>基本的に、ノードを値のリストと照合したいと思います。ビジネス ルールの条件のハードコードされた値に対してを照合するビジネスを既に作成しました<rootOid>... BRE の使用方法の基本を学習し、オーケストレーションでルールを呼び出すための概念実証として。

ビジネスルールの「条件」でハードコードされたORの巨大なリストを実行する以外に、値のリストと照合する方法を見つけることができません。受け入れられる値のリストが十分に大きいため、一連の OR を実行してもうまくいきません。

<rootOid>理想的には、ビジネス ルール内からチェックするための許容可能な値でいっぱいの保守可能な XML ファイルを用意したいと考えています。

また、データベースを呼び出してテーブル/列から値を読み取って一致させる方法があることも認識していますが、SQL を式から除外して、これをもう少し自己完結型にすることをお勧めします。

4

1 に答える 1

1

1 つの「等しい」式で十分です。RHS ファクトは、別の語彙項目である必要があります。XML タイプの場合、適切なパスはすべての値を 1 つずつプルし、複数の評価を引き起こし、一致する場合はそれぞれアクションを起動します。覚えておくべき重要な点: BRE はパターン マッチング エンジンです。

語彙は、ファクト定義の便利なエイリアスにすぎません。次の構造を持つ XML ファイルを作成するとします。

<options>
  <value>A</value>
  <value>B</value>
  <value>C</value>
</options>

このファクトのボキャブラリを Name: PossibleValues XPath Selector: /options/value XPath Field: として定義します。

次に、ルールを IF currentValue == PossibleValues として定義すると、RHS が 3 つのファクトを作業メモリに生成するため、3 つの条件評価が発生します。その結果、true だったものだけがルール (アクション) を起動します。これを、1 つの (最初の) ファクトのみをアサートする XML スキーマからノードを選択したときに BRE が作成する既定の定義と比較してください。

XPath セレクター: /options/ XPath フィールド: 値

(簡潔にするために名前空間は省略されています)

実行時に、この XML ドキュメントを引数として BRE に渡します (BRE 呼び出しコンテキストに応じて、オーケストレーションまたは .Net コンポーネントのいずれか)。テストの設計時に、Fact Creator コンポーネント (IFactCreator を実装) を実装して、必要な引数のインスタンスを提供する必要があります。

カスタム ファクト リトリーバーを使用すると、長期的なファクト (問題のようなもの) をより適切に管理できます。ファクト リトリーバーは、IFactRetriever を実装する .Net コンポーネントです。詳細については、ドキュメントを参照してください。ファクト リトリーバーの実装内で、(ディスクから) XML を読み込み、それを TypedXmlDocument としてワーキング メモリにアサートします。

于 2013-08-11T18:05:36.667 に答える