チュートリアル:ヘッダーおよびトレーラーを使用したフラットファイル逆アセンブリ
概要
このチュートリアルでは、フラット ファイル スキーマ ウィザードによって作成されたスキーマを使用して、ヘッダー、トレーラー、および繰り返しのメッセージ ボディを含んでいるファイルのフラット ファイル逆アセンブリを実行する方法を説明します。 このチュートリアルでは、次の要件を満たす架空のエラー追跡システムの一部を開発します。
エラー メッセージは社内のさまざまな物理的な場所でログに記録され、集中管理された場所に送信されて、さまざまなバックエンド システムに振り分けられます。
エラー メッセージは、場所を示すヘッダー、1 つ以上のエラー メッセージを含むボディ、およびバッチ数を示すトレーラーを含んだフラット ファイル形式で書き込まれます。
メッセージは、ヘッダー、ボディ、トレーラーを含んでいない場合、無効と見なされます。
このチュートリアルを完了すると、フラット ファイルを処理し、バックエンド システムで処理するために XML として出力する BizTalk Server アプリケーションが完成します。
前提条件
この例では、BizTalk Server プロジェクトの作成、アセンブリへの署名、および BizTalk Server 管理コンソールでのアプリケーションとポートの表示に慣れている必要があります。 「 チュートリアル: 基本的な BizTalk アプリケーションの展開」に示されているアイデアにも慣れる必要があります。 フラット ファイル スキーマ ウィザードの基礎知識は役立ちますが、必須ではありません。
この例の処理
この例では、受信フラット ファイルをカスタム パイプラインとフラット ファイル逆アセンブラー コンポーネントを使用して処理します。 ヘッダー スキーマ、トレーラー スキーマ、およびボディ スキーマを使用してメッセージを解析した後、バックエンドで処理するためにそれらのメッセージを送信場所に出力します。
例
この例を作成するには、以下で概要を説明している手順を実行します。
新しい BizTalk プロジェクトの作成
BizTalk プロジェクトを作成する必要があるソリューションをビルドする前に、ソリューションに厳密な名前が付いていることを確認し、アプリケーション名をそのソリューションに割り当てます。 アプリケーション名を割り当てると、そのソリューションが BizTalk Server によって既定の BizTalk アプリケーションに配置されるのを防ぐことができます。
Visual Studio を使用して新しい BizTalk プロジェクトを作成します。 プロジェクト FFDisassemblerWalkthrough を呼び出します。
キー ファイルを作成してプロジェクトに割り当てます。 このタスクの詳細については、「署名ページ、プロジェクト Designer」を参照してください。
プロジェクトの配置プロパティで、[ アプリケーション名] を [FlatFileExample] に設定し、[ ホスト インスタンスの再起動] を に
True
設定します。 このフラグを設定すると、キャッシュされたアセンブリのインスタンスを消去するようにホストに通知されます。
サンプル データ ファイルの作成
スキーマを生成する前に、テスト ファイルを作成する必要があります。
メモ帳または任意のテキスト エディターを起動します。
サンプル テスト ファイルを作成します。 このファイルは、エラーの報告元の場所を示すヘッダー、バッチの ID を含んだトレーラー、および 1 つ以上のエラー レコードで構成されたボディで構成されています。 ファイルの形式を次に示します。
Location ERRORid|type|priority|description|errorDateTime …additional error records BatchID
上記の ERROR レコードでは、テキスト "ERROR" と区切り記号 "|" が使用されています (位置指定ではありません)。 この ERROR レコードのデータ要素を次の表で説明します。
要素 データ型 説明 id 整数 (integer) このエラーの ID。 Type 整数 (integer) エラーの種類。 優先度 string 優先度インジケーター: 低、中、または高。 説明 string エラーの説明。 ErrorDateTime DateTime エラーが発生した日時です。 ファイルには、1 つ以上の ERROR レコードを含めることができます。
-- または --
次のサンプル データを新しいファイルにコピーします。 最後の行には、末尾の改行が含まれています。
East Coast Facility ERROR102|0|High|Sprocket query fails.|1999-05-31T13:20:00.000-05:00 ERROR16502|2|Low|Time threshold exceeded.|1999-05-31T13:20:00.000-05:00 8675309
新しいサンプル ファイルをプロジェクト ディレクトリに保存します。 簡単に見つけられるように、"ErrorFile.txt" などのわかりやすい名前を付けてください。
ヘッダー スキーマ、トレーラー スキーマ、およびボディ スキーマの作成
サンプル データ ファイルを作成したら、ヘッダー スキーマ、トレーラー スキーマ、およびボディ スキーマを作成します。 これらのスキーマは、受信したメッセージを処理するためにフラット ファイル逆アセンブラー受信パイプライン コンポーネントで使用されます。
フラット ファイル スキーマ ウィザードを使用してヘッダー スキーマを作成する
新しいスキーマをプロジェクトに追加します。 ソリューション エクスプローラーで、[FFDisassemblerWalkthrough] を右クリックし、[追加] をポイントして、[新しい項目] をクリックします。
[ 新しい項目の追加 ] ダイアログ ボックスで、[ スキーマ ファイル ] をクリックし、[ フラット ファイル スキーマ ウィザード] を選択します。 新しいスキーマに "Header.xsd" という名前を 付け、[追加] をクリックします。
[ BizTalk フラット ファイル スキーマ ウィザードへようこそ ] ページで、[ 次へ] をクリックします。
[ フラット ファイル スキーマ情報 ] ページで、[ 参照 ] をクリックし、前に作成したサンプル データ ファイルを見つけます。 [レコード名] を [ヘッダー] に変更し、コード ページを確認して、[次へ] をクリックします。
Note
サンプル ファイルを Unicode 形式で保存した場合、コード ページはリトル エンディアン UTF16 (1200) になります。 これは、この例に影響しません。
次に、ドキュメント データを選択します。 [ ドキュメント データの選択 ] ページで、次のように、改行文字 {CR} と {LF} を含むデータの最初の行を強調表示します。
[次へ] をクリックします。
[ レコード形式の選択 ] ページで、[ 次へ ] をクリックして既定値をそのまま使用します。 データ ファイルでは相対位置を使用していないので、既定の "区切り記号" を使用できます。
[ 区切りレコード ] ページで、[ 次へ] をクリックします。
次に子要素を指定します。 次に示すように、ヘッダーには、"Location" という要素が 1 つ含まれています。
ヘッダー
[次へ] をクリックして、続行します。
[ スキーマ ビュー ] ページで、スキーマを確認します。
問題がなければ、[完了] をクリックしてウィザードを完了 します 。
[ヘッダー スキーマ>]< ペインで [スキーマ] ノードをクリックします。 [プロパティ] ウィンドウで、[ 要素 FormDefault ] を [修飾済み] に変更します。 これは、ローカルに宣言された要素を、ターゲットの名前空間を使用してインスタンス ドキュメント内で修飾する必要があることを示します。
フラット ファイル スキーマ ウィザードを使用してトレーラー スキーマを作成する
新しいスキーマをプロジェクトに追加します。 ソリューション エクスプローラーで、[FFDisassemblerWalkthrough] を右クリックし、[追加] をポイントして、[新しい項目] をクリックします。
[ 新しい項目の追加 ] ダイアログ ボックスで、[ スキーマ ファイル ] をクリックし、[ フラット ファイル スキーマ ウィザード] を選択します。 新しいスキーマに "Trailer.xsd" という名前を 付け、[追加] をクリックします。
[ BizTalk フラット ファイル スキーマ ウィザードへようこそ ] ページで、[ 次へ] をクリックします。
[ フラット ファイル スキーマ情報 ] ページで、[ 参照 ] をクリックし、前に作成したサンプル データ ファイルを見つけます。 [レコード名] を "Trailer" に変更し、コード ページを確認して、[次へ] をクリックします。
Note
サンプル ファイルを Unicode 形式で保存した場合、コード ページはリトル エンディアン UTF16 (1200) になります。 これは、この例に影響しません。
次に、ドキュメント データを選択します。 [ ドキュメント データの選択 ] ページで、次のように、改行文字 {CR} と {LF} を含むデータの最後の行を強調表示します。
[次へ] をクリックします。
[ レコード形式の選択 ] ページで、[ 次へ ] をクリックして既定値をそのまま使用します。 データ ファイルでは相対位置を使用していないので、既定の "区切り記号" を使用できます。
[ 区切りレコード ] ページで、[ 次へ] をクリックします。
次に子要素を指定します。 次に示すように、ヘッダーには、"BatchID" という要素が 1 つ含まれています。
トレーラー
[次へ] をクリックして、続行します。
[ スキーマ ビュー ] ページで、スキーマを確認します。
問題がなければ、[完了] をクリックしてウィザードを完了 します 。
[トレーラー スキーマ>]< ペインで [スキーマ] ノードをクリックします。 [プロパティ] ウィンドウで、 elementFormDefault をQualified に変更します。 これは、ローカルに宣言された要素を、ターゲットの名前空間を使用してインスタンス ドキュメント内で修飾する必要があることを示します。
フラット ファイル スキーマ ウィザードを使用して本文スキーマを作成する
新しいスキーマをプロジェクトに追加します。 ソリューション エクスプローラーで、[FFDisassemblerWalkthrough] を右クリックし、[追加] をポイントして、[新しい項目] をクリックします。
[ 新しい項目の追加 ] ダイアログ ボックスで、[ スキーマ ファイル ] をクリックし、[ フラット ファイル スキーマ ウィザード] を選択します。 新しいスキーマに "Body.xsd" という名前を付け、[ 追加] をクリックします。
[ BizTalk フラット ファイル スキーマ ウィザードへようこそ ] ページで、[ 次へ] をクリックします。
[ フラット ファイル スキーマ情報 ] ページで、[ 参照 ] をクリックし、前に作成したサンプル データ ファイルを見つけます。 [レコード名] を [本文] に変更し、コード ページを確認して、[次へ] をクリックします。
Note
サンプル ファイルを Unicode 形式で保存した場合、コード ページはリトル エンディアン UTF16 (1200) になります。 これは、この例に影響しません。
次に、ドキュメント データを選択します。 [ ドキュメント データの選択 ] ページで、次のように、改行文字 {CR} と {LF} を含む 2 行目と 3 行目のデータを強調表示します。
本文スキーマ
[次へ] をクリックします。
[ レコード形式の選択 ] ページで、[ 次へ ] をクリックして既定値をそのまま使用します。 データ ファイルでは相対位置を使用していないので、既定の "区切り記号" を使用できます。
[ 区切りレコード ] ページで、[ 次へ] を選択します。
ここでは、子要素を定義します。 Body_Child1を Errorに変更し、その要素の種類を [繰り返しレコード] に設定します。 Body_Child2要素レコードの種類を [無視] に設定します。
[ スキーマ ビュー ] ページで、[ 次へ ] をクリックして、Error レコードの子要素を定義します。
[ ドキュメント データの選択 ] ページで、[ 次へ] をクリックします。 ウィザードによって、レコード定義データが適切に選択されます。
[ レコード形式の選択 ] ページで、[ 次へ] をクリックします。 データは、区切り記号で書式設定されます。
[区切り記号付きレコード] ページで、[子区切り記号] を選択|します。 次に、[Record has a tag identifier チェック] ボックスを選択し、タグ値に「ERROR」と入力します。
[次へ] をクリックします。
ここでは、Error レコードの子要素を定義します。
[次へ] をクリックします。
[ スキーマ ビュー ] ページで、スキーマを確認します。
間違えた場合は、[ 戻る ] をクリックして、必要な修正を行います。 問題がなければ、[完了] をクリックしてウィザードを完了 します 。
[本文スキーマ>]< ペインの [スキーマ] ノードをクリックします。 [プロパティ] ウィンドウで、[ 要素 FormDefault ] を [修飾済み] に変更します。 これは、ローカルに宣言された要素を、ターゲットの名前空間を使用してインスタンス ドキュメント内で修飾する必要があることを示します。
[本文スキーマ] <ペインの [エラー> ] ノードをクリックします。 [プロパティ] ウィンドウで、[ 最大発生 数] を 1 に変更します。 これにより、フラット ファイル逆アセンブラーによって各エラーがそれぞれのメッセージに分割されます。
FFDasm を使用してスキーマをテストする
コマンド プロンプトを開き、ディレクトリをプロジェクト ディレクトリに変更します。
コマンド プロンプトから、次に示すように FFDasm.exe を実行します。
<Samples Path>\SDK\Utilities\PipelineTools\FFDasm ErrorFile.txt -hs header.xsd -bs body.xsd -ts Trailer.xsd
このパイプライン ツールとその他のパイプライン ツールの場所については、「 パイプライン ツール」を参照してください。
FFDasm.exe によって、テスト ファイル内の各 ERROR レコードに対応した {GUID}.xml という名前の出力ファイルが 2 つ生成されます。 優先度の高いエラー レコードは、次のようになります。
<Body xmlns="http://FFDisassemblerWalkthrough.Body"> <Error> <ID>102</ID> <Type>0</Type> <Priority>High</Priority> <Description>Sprocket query fails.</Description> <DateTime>1999-05-31T13:20:00.000-05:00</DateTime> </Error> </Body>
カスタム受信パイプラインの作成
フラット ファイル スキーマを定義したので、次はフラット ファイル逆アセンブラー コンポーネントを使用するカスタム パイプラインを作成する必要があります。 その後で、フラット ファイル逆アセンブラー コンポーネントを、ヘッダー スキーマ、ボディ スキーマ、およびトレーラー スキーマを使用するように構成して、メッセージを分割できます。
新しい受信パイプラインをプロジェクトに追加します。 ソリューション エクスプローラーで、FFDisassemblerWalkthrough プロジェクトを右クリックし、[追加] をポイントして、[新しい項目] をクリックします。
[ 新しい項目の追加 ] ダイアログ ボックスで、[ パイプライン ファイル ] をポイントし、[ 受信パイプライン] をクリックします。 新しいパイプラインに "FFReceivePipeline" という名前を 付け、[追加] をクリックします。
フラット ファイル逆アセンブラー コンポーネントを、[ツールボックス] ペインから逆アセンブル ステップへドラッグして新しいパイプラインを構成します。
[プロパティ] ウィンドウで、 ドキュメント スキーマ を FFDisassemblerWalkthrough.Body に設定し、 ヘッダー スキーマ を FFDisassemblerWalkthrough.Header に設定し、 Trailer スキーマ を FFDisassemblerWalkthrough.Trailer に設定します。
アプリケーションの展開および送信ポートと受信ポートの構成
スキーマとカスタム受信パイプラインを作成したら、次はプロジェクトをコンパイルして配置する必要があります。 プロジェクトを配置すると、BizTalk Server 管理コンソールを使用して、送信ポートと受信ポートを構成できます。
デプロイ
Visual Studio 内から、プロジェクトを右クリックし、[配置] をクリックしてソリューションを デプロイします。
BizTalk Server管理コンソールを使用して、[アプリケーション] グループを展開して、FlatFileExample がカスタム アプリケーションとして存在することを確認します。
受信ポートを構成する
Windows エクスプローラー を使用して、FFDisassemblerWalkthrough プロジェクト ディレクトリの下に "Receive" という名前のディレクトリを作成します。
BizTalk Server管理コンソールで、FlatFileExample アプリケーションを展開し、[受信ポート] を右クリックし、[新規] をポイントして、[一方向の受信ポート] をクリックします。
[ 受信ポートのプロパティ ] ダイアログ ボックスで、ポートの名前を "ReceiveError" に設定します。
[ 受信場所] をクリックし、[ 新規 ] をクリックして受信場所を追加します。 新しい受信場所に "ReceiveErrorLocation" という名前を付けます。 受信パイプラインを FFReceivePipeline に設定します。 [ トランスポートの種類] で [ ファイル] を選択し、[ 構成] をクリックします。 作成した受信ディレクトリを選択し、 ファイル マスク を *.txt に設定します。
[OK] をクリックします。 受信ポートが正しく構成されます。 [OK] をクリックして閉じます。
送信ポートを構成する
Windows エクスプローラーを使用して、FFDisassemblerWalkthrough プロジェクト ディレクトリの下に "Send" という名前のディレクトリを作成します。
BizTalk Server管理コンソールで、FlatFileExample アプリケーションを展開し、[送信ポート] を右クリックし、[新規] をポイントして、[静的 One-Way 送信ポート] をクリックします。
[ 送信ポートのプロパティ ] ダイアログ ボックスで、ポートの名前を [送信] に設定します。
トランスポートの種類として [ ファイル] を選択し、[ 構成] をクリックします。 送信先のフォルダーを、先ほど作成した送信ディレクトリに設定します。
次は、フィルターを構成します。 [ フィルター] をクリックし、式を 1 つ追加します。
- Bts。MessageType ==
http://FFDisassemblerWalkthrough.Body#Body
- Bts。MessageType ==
[ OK] を クリックして送信ポートの構成を完了します。 送信ポートが正しく構成されます。
例の実行
次に、例を実行します。 BizTalk Server管理コンソールを使用してアプリケーションを起動した後、テスト ファイルを受信場所にコピーし、送信場所で生成される内容を確認します。
BizTalk Server管理コンソールで、FlatFileExample アプリケーションを右クリックし、[開始] をクリックします。 これにより、送信ポートと受信ポートが参加して開始されます。
サンプルの Errorfile.txt のコピーを受信ディレクトリに置きます。 2 つの出力ファイルが送信ディレクトリに書き込まれます。