0

次のような入力 xml ファイルを取得しました。

<root>
   <item ...>
   <item ...>
   <item ...>
</root>

同じオーケストレーションで 2 つの方法でメッセージを作成して送信する必要があります。1. 1 つの宛先にアイテムごとに 1 つの xml ファイルとして送信します。

私のファイルは、エンベロープからすべての「アイテム」を抽出するパイプラインによって実際に処理されます。問題は、特定の条件に基づいてすべての「アイテム」をマージする必要があることです。

これを達成する方法はありますか?

4

1 に答える 1

1

これには少なくとも2つの方法があるようです.入力xmlファイルバッチにどのように「到着」するかは明確ではありません.

  1. 最初に 1 つの xml バッチですべてのメッセージを既に取得しているように見えるので、これは非常に簡単なはずです。パイプラインでそれらをデバッチする前に、このバッチ メッセージ ( root...) がメッセージ ボックスにパブリッシュされていない場合は、それもパブリッシュする必要があります (つまり、メッセージがまだメッセージ ボックスから来ていない場合はダイレクト バインディング)。 )。

    次に、ルートメッセージを入力として受け取り、CSV で不要itemな s を除外する CSV ファイルのマップを作成できます。Map でフィルタリングを行うには、条件付きのループ Functoid を使用できます。または、xslt でマップを実装してからitem、xpath フィルターを使用してテンプレートを望ましい s だけに適用することをお勧めします。次に、着信 xml バッチ メッセージに (BTS.MessageType) をフィルター処理するサブスクライブ FILE 送信ポートは、このマップを適用できます。

    個々の xml ファイルは、デバッチ パイプラインによって処理され、サブスクライブしている別の物理 FILE 送信ポートがそれらを書き出すことができます。

    2. または、手遅れでrootxml ファイルがデバッチされている (そして元の XML ファイル FWR にアクセスできない) 場合は、別の orch を使用して、CSV に必要なメッセージを再構築する必要があります (スキャッター アンド ギャザー)。メッセージを関連付ける必要がある可能性が高いため(バッチ識別子など)、タイマーを適用するなど、これはより複雑になります。

    ループを使用して「望ましい」CSV メッセージを変数に収集し、パイプラインを使用してバッチを組み立てる方法については、Pipeline Aggregatorサンプルを参照してください。Microsoft.XLANGs.Pipeline.SendPipelineInputMessages'望ましい' の基準が個々のアイテム メッセージで既に昇格されている場合は、受信にフィルターを適用できますが、そうでない場合は、ループで決定を使用してメッセージを追加するかどうかを決定する必要があります。バッチ。

于 2013-02-05T10:38:59.173 に答える