0

3 つのノード (ヘッダー、本文、フッター) を持つ XML ファイルを受け取り、2 番目のノード (本文) 自体にレコードが含まれるシナリオがあります。これらのレコードを本文でフラット ファイルにマップし、特定のフォルダーに出力します。ただし、body ノードに含まれるレコードが 0 である場合もあります。

レコードがある場合のみ送信ポート出力ファイルを作成する必要があり、サイズが 0 kb のファイルは出力しません。

どうすればこれを行うことができますか?

4

1 に答える 1

1

次の 2 つのアプローチが考えられます。

  1. 洗練されたアプローチ - XPath を使用して本文ノードにレコードが含まれているかどうかを判断するカスタム受信パイプライン コンポーネントを作成します。存在する場合は、メッセージを通過させます。そうでない場合は、空のストリームを返し、メッセージ ボックスにメッセージが発行されないようにします。
  2. あまり洗練されていないアプローチ - オーケストレーションでメッセージ (ヘッダー、本文、およびフッター) を受信し、(1) と同じ XPath ステートメントを使用して、本文ノードにレコードが含まれているかどうかを判断します。その場合は、Send Shape を使用してメッセージを送信します。そうでない場合は、メッセージを送信せずにオーケストレーションを終了させます。

どちらのシナリオでも、送信ポート (フラット ファイル アセンブラーでも構成されます) でマップを実行します。メッセージングのみのソリューション (上記の 1) を選択した場合は、受信ポート名またはメッセージ タイプ (またはその他の昇格されたプロパティ) のいずれかでフィルター処理する必要があります。

最初のオプションを「エレガント」とマークしました。これは、メッセージが受信パイプラインによって解析されるときに処理を完了することができ、目的の結果を得るために追加の処理 (つまり、オーケストレーションのスピンアップ) を必要としないためです。

于 2013-04-24T13:55:49.213 に答える