EDI アセンブラの動作
BizTalk Serverは、EDI 送信パイプライン (Microsoft.BizTalk.DefaultPipelines.EDISendPipeline
) で送信される EDI でエンコードされたインターチェンジのほとんどの処理を実行します。 このパイプラインには、EDI アセンブラ パイプライン コンポーネントが含まれ、このコンポーネントにより、次の処理が実行されます。
XML エンコード メッセージをインターチェンジ内の EDI トランザクション セットに変換して、EDI インターチェンジをシリアル化する
EDI スキーマ検証、X12 エンコード メッセージのクロスフィールド検証 (設定されている場合)、EDI 構造検証、および拡張スキーマ検証 (スキーマがカスタマイズされており、EDI 以外のデータ型のノードがある場合) を実行します。
EDI メッセージに封筒を適用します。
EDI メッセージへの応答として受信した、技術および機能の確認を処理し、確認のバッチ解除を行います (設定されている場合)。
送信 EDI メッセージへのエンベロープの適用
EDI 送信パイプラインが中間 XML ファイルから送信 EDI メッセージを作成するときに、インターチェンジとグループのヘッダーが含まれたエンベロープがメッセージに適用されます。このエンベロープは、受信側のアグリーメントに対して設定された EDI プロパティに基づいて適用されます。 受信アグリーメントを送信ポートから特定できなかった場合は、フォールバック アグリーメントを使用してエンベロープが適用されます。
context プロパティが EdiOverride.OverrideEdiHeader
true に設定されている場合、EDI 送信パイプラインは EdiOverride プロパティ コレクションで指定された値を使用してエンベロープを構築します。 このコレクションにない値については、アグリーメント プロパティ内の対応する EDI 値が使用されます。 EdiOverride コレクションとアグリーメント プロパティのどちらにもない値については、フォールバック EDI アグリーメントのプロパティが使用されます。
中間 XML ファイルに予約済みのタグまたは ReuseEnvelope コンテキスト プロパティが含まれている場合、メッセージは保護されたバッチであるため、エンベロープ アプリケーション ロジックは適用されません。
X12 エンベロープ値のソース
次の表に、EDI 送信パイプラインが、X12 エンベロープの各部分に必要な情報を取得する場所を示します。
ヘッダー | source |
---|---|
インターチェンジ制御ヘッダー (ISA) | - EdiOverride コンテキスト プロパティ (が true の場合 EdiOverride.OverrideEdiHeader )。- 契約が定義されている場合は、[契約のプロパティ] ダイアログ ボックスの一方向アグリーメント プロパティの [インターチェンジの設定] セクションにある別のページの ISA セグメント定義。 - 契約が定義されていない場合は、[EDIFACT フォールバック設定] ダイアログ ボックスの [インターチェンジの設定] セクションにある別のページの ISA セグメント定義。 |
機能グループ ヘッダー (GS) | - EdiOverride コンテキスト プロパティ (が true の場合 EdiOverride.OverrideEdiHeader )- 契約が定義されている場合、[契約のプロパティ] ダイアログ ボックスの一方向アグリーメント プロパティの [エンベロープ] ページ ([トランザクション セットの設定] セクション) の GS セグメント定義 - 契約が定義されていない場合は、[X12 フォールバック設定] ダイアログ ボックスの [エンベロープ] ページ ([トランザクション セットの設定] セクション) の GS セグメント定義 アグリーメントが定義されている場合は、GS データ要素の値はトランザクション セット識別子 (ST1)、バージョン、およびターゲットの名前空間の組み合わせに基づいて決定されます。 これらの値は、契約プロパティ (契約が定義されている場合) またはフォールバック 契約プロパティ (契約が定義されていない場合) の [ エンベロープ ] ページ ([ トランザクション セットの設定] セクション) のグリッドと比較されます。 - 一致する行がある場合は、一致する行に含まれる値が GS ヘッダーに使用されます。 - 一致するものがないが、既定の行が定義されている場合は、GS01 を除くすべての GS データ要素が既定の行から設定されます。 GS01 は、ST1 の値に基づいて動的に決定されます。 - 一致する行がなく、既定の行がない場合、メッセージは中断されます。 メモ: グループが他のグループから一意である場合、これらの値の一部を別のグループの値と同じにすることはできません。 アグリーメントが定義されていない場合は、フォールバック アグリーメントのプロパティから GS データ要素の値が取得されます。 |
EDIFACT エンベロープ値のソース
次の表に、EDI 送信パイプラインが、EDIFACT エンベロープの各部分に必要な情報を取得する場所を示します。
ヘッダー | source |
---|---|
文字列サービス通知 (UNA) | - EdiOverride コンテキスト プロパティ (が true の場合 EdiOverride.OverrideEdiHeader )。- 契約が定義されている場合、[契約のプロパティ] ダイアログ ボックスの一方向アグリーメント プロパティの [文字セットと区切り記号] ページの UNA セグメント定義。 - 契約が定義されていない場合は、[EDIFACT フォールバック設定] ダイアログ ボックスの [文字セットと区切り記号] ページの UNA セグメント定義。 |
インターチェンジ制御ヘッダー (UNB) | - EdiOverride コンテキスト プロパティ (が true の場合 EdiOverride.OverrideEdiHeader )。- 契約が定義されている場合、[契約のプロパティ] ダイアログ ボックスの一方向アグリーメント プロパティの [インターチェンジの設定] セクションにある別のページの UNB セグメント定義。 - 契約が定義されていない場合、[EDIFACT フォールバック設定] ダイアログ ボックスの [インターチェンジの設定] セクションにある別のページの UNB セグメント定義。 |
機能グループ ヘッダー (UNG) | - EdiOverride コンテキスト プロパティ (が true の場合 EdiOverride.OverrideEdiHeader )。- 契約が定義されている場合、[契約のプロパティ] ダイアログ ボックスの一方向アグリーメント プロパティの [エンベロープ] ページ ([トランザクション セットの設定] セクション) の UNG および UNH セグメント定義 - 契約が定義されていない場合は、[EDIFACT フォールバック設定] ダイアログ ボックスの [契約のプロパティ] ダイアログ ボックスの一方向アグリーメント プロパティの [エンベロープ] ページ ([トランザクション セットの設定] セクション) の UNG および UNH セグメント定義 アグリーメントが定義されている場合は、UNG データ要素の値はメッセージの種類 (UNH2.1)、メッセージのリリース番号 (UNH2.3)、割り当てコード (UNH2.5)、バージョン、およびターゲットの名前空間の組み合わせに基づいて決定されます。 メモ: グループが他のグループから一意である場合、これらの値の一部を別のグループの値と同じにすることはできません。 |
トランザクション セット ヘッダーおよびトレーラ セグメントの適用
送信 EDI インターチェンジにシリアル化される XML トランザクション セットには、トランザクション セット ヘッダーとトレーラーが必要です。 ただし、EDI アセンブラーは、トランザクション セット ヘッダーまたはトレーラーがなくても、メッセージを処理します。 XML トランザクション セットでは、X12 および EDIFACT スキーマのトランザクション セット ヘッダーおよびトレーラー セグメントはオプションです。 トランザクションにヘッダーまたはトレーラーがない場合、EDISend または AS2EDISend 送信パイプラインの EDI アセンブラーは、トランザクションにトランザクション セット ヘッダー値およびトレーラー値を追加します。 これらの値は、マッピングまたは計算に基づきます。 EDI アセンブラーは、この処理をインターチェンジ XML (保護されたバッチ)、バッチ トランザクション セット XML、およびトランザクション セット XML に対して行います。
マッピングによって検証エラーが発生した場合、イベント ビューアに無効な長さやデータ型、無効な制御機関コードなどの該当するエラーが表示され、XML トランザクション セットまたはインターチェンジ XML は中断されます。
X12 トランザクション セット ヘッダーおよびトレーラ セグメント
ヘッダーおよびトレーラ セグメントのない X12 エンコード トランザクション セットの場合、EDI アセンブラは、ST および SE セグメントを次の値に設定します。
ヘッダーおよびトレーラ セグメント | 値 |
---|---|
ST01 (トランザクション セット識別コード) | 受信 XML トランザクション セットの RootNode 名の最後の 3 文字にマップされます。 たとえば、"X12_00401_855" の場合は、"855" にマップされます。 TS 識別コードが 837P、837D、または 837I の HIPAA クレームの場合、"837" が使用されます。 |
ST02 (トランザクション セット制御番号) | の値 EdiOverride.ST02 (true の場合EdiOveride.OverrideEdiHeader )、または [契約のプロパティ] ダイアログ ボックスの一方向アグリーメント タブの [ローカル ホスト設定] ページ ([インターチェンジの設定] の下) の [トランザクション セット制御番号 (ST02)] の値にマップされます。[新しい ID の適用] プロパティの設定に関係なく、 新しい コントロール番号またはインクリメントされたコントロール番号が適用されます。 |
ST03 (バージョン識別子) | 受信 XML トランザクション セットの ST03 の値にマップされます。 たとえば、5010 HIPAA 820 ドキュメント (給与控除) の場合は "005010X218" です。 ST03 は、トランザクション セットの検証に使用されるスキーマに対して検証されます。 メモ: ST03 は、835 を除くすべての HIPAA バージョン 5010 トランザクションに必須です。 |
SE01 (含まれているセグメントの数) | ST および SE セグメントを含む、トランザクション セットのセグメントの合計数に設定されます。 |
SE02 (トランザクション セット制御番号) | トランザクション セットの ST02 の値にマップされます。 |
ST03 など、トランザクション セット ヘッダーの他のデータ要素は省略可能であるため、生成されるセグメントでは評価されません。
EDIFACT トランザクション セット ヘッダーおよびトレーラ セグメント
ヘッダーおよびトレーラ セグメントのない EDIFACT エンコード トランザクション セットの場合、EDI アセンブラは、UNH および UNT セグメントを次の値に設定します。
ヘッダーおよびトレーラ セグメント | 値 |
---|---|
UNH01 (メッセージ参照制御番号) | の値 EdiOverride.UNH1 (true の場合EdiOverride.OverrideEdiHeader )、または [契約のプロパティ] ダイアログ ボックスの一方向アグリーメント タブの [ローカル ホストの設定] ページ ([インターチェンジの設定] の下) で参照番号 (UNH1) の値にマップされます。 [新しい ID の適用] プロパティの設定に関係なく、 新しい コントロール番号またはインクリメントされたコントロール番号が適用されます。 |
UNH2.1 (メッセージの種類) | 受信 XML トランザクション セットの RootNode 名の最後の 6 文字にマップされます。 たとえば、"EFACT_D96A_INVOIC" の場合は、"INVOIC" にマップされます。 |
UNH2.2 (メッセージのバージョン番号) | 受信 XML トランザクション セットの RootNode 名の 7 番目の文字にマップされます。 たとえば、"EFACT_D96A_INVOIC" の場合は、"D" にマップされます。 |
UNH2.3 (メッセージのリリース番号) | 受信 XML トランザクション セットの RootNode 名の 8、9、および 10 番目の文字にマップされます。 たとえば、"EFACT_D96A_INVOIC" の場合は、"96A" にマップされます。 |
UNH2.4 (制御機関コード) | 常に文字列 'UN' にマップされます。 |
UNT01 (含まれているセグメントの数) | UNH および UNT セグメントを含む、トランザクション セットのセグメントの合計数に設定されます。 |
UNH02 (メッセージ参照制御番号) | [契約のプロパティ] ダイアログ ボックスの [一方向アグリーメント] タブの [ローカル ホストの設定] ページ ([インターチェンジの設定] の下) で参照番号 (UNH1) の値にマップされます |
UNH3 から UNH6 などのトランザクション セット ヘッダーの他のデータ要素は省略可能であるため、生成されるセグメントでは評価されません。 これらのフィールドが必要な場合は、受信 XML トランザクション セットの値に設定する必要があります。
送信メッセージのエンベロープの追加処理
EDI 送信パイプラインは、送信メッセージのエンベロープで次の処理を実行します。
制御番号
EDI 送信パイプラインは、各送信インターチェンジのエンベロープ セグメントに、インターチェンジ制御番号、グループ制御番号、およびトランザクション セット制御 (または参照) 番号を入力します。 次の表に、これらの番号を示します。
制御番号 | X12 フィールド | EDIFACT フィールド |
---|---|---|
インターチェンジ制御番号 | ISA13 | UNB5 |
グループ制御番号 | GS6 | UNG5 |
トランザクション セット制御番号 (X12) トランザクション セット参照番号 (EDIFACT) |
ST2 | UNH1 |
BizTalk Serverは、[契約のプロパティ] ダイアログ ボックスの [一方向アグリーメント] タブの [ローカル ホストの設定] ページ ([インターチェンジの設定] の下) の [インターチェンジ制御番号 (ISA13)] プロパティに入力した値の範囲に基づいて、送信される次のインターチェンジのインターチェンジ制御番号を設定します。 この番号は、以降のインターチェンジごとに増分されます (最大値に達するまで)。
インターチェンジ制御番号が EdiOverride コンテキスト プロパティを使用して指定されている場合は、その値がこのインターチェンジで使用されるので、アグリーメントで指定されたインターチェンジ制御番号の影響は受けません。
Note
EDIFACT のグループ コントロール番号は、EDIFACT 契約プロパティの [封筒] ページの [UNG セグメントの適用] プロパティが選択されている場合にのみインクリメントされます。 2 番目のフィールド (参照番号) は増分されますが、プレフィクックスおよびサフィックス フィールドは増分されません。 [ 新しい ID の適用 ] プロパティが選択されている場合にのみ、トランザクション セットの制御番号がインクリメントされます。
Note
保護されているバッチ インターチェンジでは、メッセージ強化サンプルを使用して、カスタム インターチェンジ制御番号を作成できます。 詳細については、「Message Enrichment Sample (BizTalk Server Sample)」を参照してください。
アグリーメントが定義されていない場合は、フォールバック アグリーメントの同じページから番号が取得されます。 送信パイプラインは、最後に使用された制御番号を格納し、次のインターチェンジ、グループ、およびトランザクション セットについては増分された番号を入力します。
Note
コントロール番号が指定した範囲の最大値に達した場合、BizTalk Serverはエラーを発生させ、インターチェンジを中断します。 X12 メッセージと EDIFACT メッセージの両方の [契約のプロパティ] ダイアログ ボックスの [ローカル ホストの設定] ページで、コントロール番号を手動でリセットするか、下限に自動的にリセットするようにBizTalk Serverを構成できます。
Note
制御番号は、BizTalk MessageBox データベースの dbo.EdiSequenceNumbers テーブルに保存されています。 必要に応じて、このテーブルの制御番号を削除するかアーカイブすることによって、このデータベースを管理する必要があります。
EDIFACT では、制御番号は英数字で構成されます。 次の形式がサポートされています。
Numbers ("1" など)
PrefixNumbersSuffix ("WA1A" など)
PrefixNumbers ("AA1" など)。
NumbersSuffix ("1AA" など)
これらの書式では、数字には "0" ~ "9"、プレフィックスとサフィックスには数字以外の任意の文字を使用できます。 数字のみが最大値に達するまで増分されます。
セグメント数
インターチェンジのトランザクション セットごとに、EDI 送信パイプラインは、トランザクション セットのセグメント数を検証します。これは、X12 の場合は SE1 データ要素、EDIFACT の場合は UNT01 データ要素で示されます。 該当するデータ要素の値が実際の数と一致しない場合、送信パイプラインは実際のセグメント数を反映するように数を更新します。 数が間違っていても、トランザクション セットは拒否されません。 数の更新は、イベント ビューアの警告に記録されます。 これは、保護されたバッチの処理には適用されません。
EDI インターチェンジのシリアル化の追加手順
EDI 送信パイプラインは、シリアル化中に次の手順も実行します。
リリース インジケータのシリアル化
EDIFACT メッセージのシリアル化中、EDI 送信パイプラインは、必要なリリース インジケータを EDI インターチェンジに挿入します。 送信パイプラインにルーティングされた中間 XML には、エスケープされるデータは含まれないと想定されています。 たとえば、送信パイプラインにルーティングされる XML データにリリース インジケータが存在する場合、送信パイプラインは、既存のリリース インジケータの前に別のリリース インジケータを追加して、既存のリリース インジケータをエスケープします。
リリース インジケータは、EDI 検証には含まれません。 長さ制限が計算されるとき、リリース インジケータは含まれません。
暗黙の小数点以下の桁数要件を満たすために後ろにゼロを追加
EDI アセンブラは、小数点以下の桁数が足りない数字を検出すると、暗黙の桁数要件を満たすために後ろにゼロを追加します。 たとえば、数字の書式が N2 である必要がある場合に、数字が "4.5" であれば、EDI アセンブラは数字を "4.50" に変更します。
ペイロード データ内の区切り記号の置き換え
データ、セグメント、またはコンポーネントの区切り記号としても設定されている文字が送信メッセージのデータに含まれている場合は、その文字を EDI 送信パイプラインによって置き換えることができます。 たとえば、メッセージに "test*data" という値が含まれている場合に、データ要素の区切り記号が "*" と設定されていると、受信側システムでの解析時に問題が発生する可能性があります。
EDI 送信パイプラインは、 ペイロードの区切り記号を プロパティに置き換え、置換 文字を指定することで、この文字を置き換えるように構成できます。 このプロパティは、[契約のプロパティ] ダイアログ ボックスの [一方向アグリーメント] タブの [文字セットと区切り記号] ページにあります。
トリガー フィールドに基づく HIPAA レコードの変換
送信ドキュメントが HIPAA トランザクション セットの場合、EDI アセンブラーは、トリガー フィールドを含む一意の XML レコードを一致する汎用 EDI セグメントに変換します ( 「HIPAA スキーマ トリガー フィールドの注釈」を参照)。 この処理は、具体的には XML レコード名の "_" 文字の後にあるサフィックスを削除するというものです。
たとえば、要素 <N1_PayerIdentification_TS835W1_1000A> と <N1_PayeeIdentification_TS835W1_1000B> の両方が N1 セグメントになります。