EDI 逆アセンブラーの動作
BizTalk Serverは、EDI 受信パイプライン (Microsoft.BizTalk.DefaultPipelines.EDIReceivePipeline
) で受信した EDI でエンコードされたインターチェンジに対してほとんどの処理を実行します。 このパイプラインには、次の処理を行う EDI 逆アセンブラ パイプライン コンポーネントが含まれています。
1 つのメッセージ内の複数のインターチェンジを別々のインターチェンジに分割します (受信場所の "DetectMID" パイプライン プロパティが True に設定されている場合)。 EDI 逆アセンブラは、インターチェンジ制御トレーラ (IEA または UNZ) が発生した後でも、インターチェンジ制御ヘッダー (ISA、UNA、または UNB) を検索してこの処理を行います。
エンベロープを検証します。
インターチェンジを逆アセンブルする
HIPAA インターチェンジのトリガー フィールドを処理します。
EDI およびパートナー固有のプロパティを必要に応じて検証します。 これには、EDI スキーマ検証、X12 エンコード メッセージ (構成されている場合) のクロスフィールド検証、EDI 構造検証、および拡張スキーマ検証 (非 EDI データ型を持つノードでスキーマがカスタマイズされている場合) が含まれます。 詳細については、「 受信 EDI メッセージの検証」を参照してください。
[契約のプロパティ] ダイアログ ボックスの [双方向アグリーメント] タブの [検証] ページ ([インターチェンジの設定] の下) でチェックが有効になっている場合に、インターチェンジ、グループ、およびトランザクション セットの制御番号が重複しないことを確認します。 インターチェンジ制御番号を、以前に受信したインターチェンジと比較して確認します。 インターチェンジ内の他のグループ制御番号と照らし合わせて、グループ制御番号を確認する。 グループ内の他のトランザクション セット制御番号と照らし合わせて、トランザクション セット制御番号を確認する。 重複が見つかった場合は、重複レコードが存在することが状態レポートに記載されます。
各トランザクション セットの XML ドキュメントを生成する 各 XML ファイルで BTS.MessageType のコンテキスト プロパティを昇格させ、名前空間を持つスキーマ名に設定します。
[受信バッチ処理] オプション プロパティが 2 つの [インターチェンジの保持] 値のいずれかに設定されている場合は、インターチェンジ全体を XML に変換します。 このプロパティは、[契約のプロパティ] ダイアログ ボックスの [双方向アグリーメント] タブの [インターチェンジの設定] の [ローカル ホストの設定] ページから設定できます。 受信パイプラインは、インターチェンジを保存済みとして識別するために、プロパティ ReuseEnvelope を昇格させます。
技術確認または機能確認を生成する (構成されている場合) これには確認のバッチ処理も含まれます (構成されている場合)。 BTS のコンテキスト プロパティを昇格します。MessageType。名前空間内
http://schemas.microsoft.com/EDI/{X12 or EDIFACT}
の制御スキーマと等しく設定します (たとえば、997 受信確認のX12_997_Root)。 また、EDI.DestinationPartyName コンテキスト プロパティを昇格させて、送信時に確認が確実に取得されるようにします。 詳細については、「 EDI 受信確認の送信」を参照してください。必要に応じて、HIPAA 276/277 (バージョン 5010 のみ) 834、835 (バージョン 4010 のみ)、および 837 ドキュメントの分割を実行します。
プロパティをメッセージ コンテキストに昇格させるか、または書き込みます (次のセクションを参照)。
コンテキストへのプロパティの昇格または書き込み
EDI 逆アセンブラが受信メッセージを処理する場合、次のプロパティがメッセージ コンテキストに昇格されるか、または書き込まれます。
X12 でエンコードされたバッチ処理されていないメッセージの場合、封筒から次のプロパティを昇格します: ISA06、ISA08、ISA15。GS01、GS02、GS03、GS08;ST03 と ST01。
Note
着信 HIPAA 837 インターチェンジの場合、BizTalk Serverでは、3 つの HIPAA 837 スキーマ (Claim-Dental_837D、Claim-Institutional_837I、Claim-Professional_837P がサポートされます。 それぞれの ST01 は "837" です。バージョン 5010 の GS08 には、837I の場合は "005010X223A1"、837D の場合は "005010X224A1"、837P の場合は "005010X222" の 3 つのスキーマの値が異なります。 バージョン 4010 の GS08 のスキーマには、837I の場合は "004010X096A1"、837D の場合は "004010X097A1"、837P の場合は "004010X098A1" の値が異なります。
EDIFACT でエンコードされたバッチ処理されていないメッセージの場合、エンベロープから次のプロパティを昇格します。UNB2.1、UNB2.3、UNB3.1、UNB11。UNG1、UNG2.1、UNG3.1;UNH2.1、UNH2.2、UNH2.3。
バッチ処理されたインターチェンジが分割されている場合は、X12 でエンコードされたメッセージのコンテキストに ISA_Segment と GS_Segment が書き込まれ、EDIFACT でエンコードされたメッセージのコンテキストに UNA_Segment、UNB_Segment、および UNG_Segment が書き込まれます。
Note
上記のセグメントはコンテキストに書き込まれます。 コンテキストへの昇格は行われません。 ただし、メッセージ強化サンプルを使用して、これらのセグメントをトランザクション セットに追加することは可能です。 または、サンプルを付加するコードを使用して、カスタム パイプライン コンポーネントに追加することもできます。 詳細については、「Message Enrichment Sample (BizTalk Server Sample)」を参照してください。
Note
昇格された ISA_Segment プロパティには、情報の漏えいにつながる可能性のあるセキュリティ/認証情報 (ISA02 の認証情報と ISA04 のセキュリティ情報) が含まれています。 コンテキスト プロパティの [セキュリティ/承認/パスワード情報のマスク] プロパティ (双方向アグリーメント プロパティのインターチェンジ設定の [ローカル ホスト設定] ページ) を使用して、ISA02 フィールドと ISA04 フィールドの各文字を '#' 文字に置き換えることができます。 これは一方向のプロセスです。'#' 文字を実際の文字に変換することはできません。
X12 でエンコードされたメッセージと EDIFACT でエンコードされたメッセージでは、ReuseEnvelope が昇格されます。これは、バッチ処理されたインターチェンジを分割するか保存するかを示します。
バッチインターチェンジが保持されている場合は、次のプロパティを昇格します。
InboundTransportatLocation
InboundTransportType
ISA05
ISA07
ISA06
ISA08
ISA15
LastInterchangeMessage = {True|False}
MessageType
ReceivePortID
ReceivePortName
ReuseEnvelope
エンベロープの解析
EDI 受信パイプラインは、ヘッダー制御スキーマを使用して、受信した EDI メッセージのエンベロープを解析し、EDI ドキュメント スキーマを使用して、インターチェンジのトランザクション セット/メッセージを解析します。
EDIINT/AS2 でエンコードされたメッセージを HTTP/HTTPS トランスポート経由で受信した場合、EDI 逆アセンブラはコンテキスト プロパティ BTS.MessageDestination を調査します。 このプロパティが SuspendQueue に設定されている、つまり AS2 処理でエラーが発生したときにメッセージが保留にされる場合、EDI 逆アセンブラはパススルー パイプライン コンポーネントとして機能し、メッセージ ボックスへのメッセージを保留にします。
EDIFACT インターチェンジの解析時、EDI 受信パイプラインは文字のエスケープに使用されるリリース インジケータを削除します。 リリース インジケータは EDI 検証には含まれません。 長さの制限を計算するときには、EDI 受信パイプラインにリリース インジケータは含まれません。
文字セット
X12 インターチェンジの場合、パイプライン コンポーネント プロパティによって、インターチェンジの処理時に EDI 逆アセンブラが使用する文字セットが決まります。 [基本]、[拡張]、[UTF8/Unicode] のいずれかを使用できます。 既定値は UTF8 です。EDIFACT インターチェンジの場合、UNB1.1 フィールドによって文字セットが決まります。
動的区切り記号の検出
BizTalk Serverが EDI インターチェンジを受け取る場合、アグリーメント プロパティはインターチェンジ内の区切り記号を示しません。 代わりに、EDI 逆アセンブラが実行時に (X12 または EDIFACT の) 区切り記号を検出します。
X12 メッセージでは、EDI 逆アセンブラはインターチェンジ内の次の文字を使用します。
区切り記号 | 文字 |
---|---|
Data Element Separator | ISA の 4 番目の文字 |
コンポーネント要素区切り記号 | ISA16 |
セグメント区切り記号 | ISA の 106 番目の文字 |
Segment Terminator Suffix | ISA セグメントと GS セグメント間の文字 値: None、CR、LF、または CRLF 注: 区切り記号は上記の値のみを受け取ることができます。 |
繰り返し区切り記号または標準識別子 (双方向アグリーメント タブの [封筒 ] ページの "ISA11 usage" 契約プロパティに応じて) |
ISA11 |
EDIFACT インターチェンジでは、EDI 逆アセンブラはインターチェンジの区切り記号を定義する UNA セグメントを確認します。 インターチェンジに UNA セグメント (省略可能) がない場合、逆アセンブラはパイプライン コンポーネント プロパティで定義された既定値を使用します。
区切り記号 | UNA の文字 |
---|---|
コンポーネント要素区切り記号 | 4 番目 |
Data Element Separator | 5 番目 |
小数点表記 | 6 番目 |
リリース文字 | 7 番目 |
繰り返し文字 | 8 番目 |
セグメント区切り記号 | 9 番目 |
セグメント区切り記号のサフィックス | UNA セグメントと UNB セグメント間の文字 値: None、CR、LF、または CRLF 注: 区切り記号は上記の値のみを受け取ることができます。 |
UNA 文字列は省略可能です。 UNA 文字列がある場合、ファイルのすべての区切り記号が定義されます。 文字列がない場合、EDI 逆アセンブラは EfactDelimiters パイプライン コンポーネント プロパティを使用して区切り文字を決定します。 詳細については、「 EDI パイプラインのプロパティの構成」を参照してください。
エラーの送信
EDI 逆アセンブラで EDI 処理エラーが発生すると、次の 2 つのエラーがイベント ビューアに送信されます (送信が有効になっている場合)。
メッセージの中断中にソース BizTalk Serverによってログに記録されたエラー。 これは BizTalk Server の処理に関連する必須のエラーです。
ソース BizTalk Server EDI によってログに記録されたトランザクション セットの問題を報告するエラー。 このエラーは EDI 固有です。
アグリーメント プロパティの使用
EDI 逆アセンブラーは、契約を識別できる場合は、契約プロパティを使用します ( 「受信 EDI メッセージのアグリーメント解決、スキーマ検出、および承認」を参照してください)。 一致するアグリーメントが見つからず、対応する値がフォールバック アグリーメントでも使用できない場合は、Visual Studio の [ プロパティ ] ウィンドウで設定された EDI 逆アセンブラー プロパティが使用されます。 ただし、このフォールバックは、受信ポートのプロパティで認証が必要な場合は発生しません (認証が失敗した場合はメッセージをドロップするか、認証に失敗した場合はメッセージを保持する) を選択します。 この場合、アグリーメントを構成する必要があります。構成しないと、インターチェンジは中断されます。
EDI 逆アセンブラーがアグリーメント プロパティを使用する場合、次のアグリーメント プロパティが設定されている必要があります。
プロパティ | アグリーメントのプロパティ ページ |
---|---|
繰り返し区切り記号 | [双方向契約] タブの [封筒] ページ ([インターチェンジの設定] の下) |
EDI のデータ型検証の実行 | [双方向アグリーメント] タブの [トランザクション セット設定] の [検証] ページ (X12 契約と EDIFACT 契約の両方) |
拡張された検証 | [双方向アグリーメント] タブの [トランザクション セット設定] の [検証] ページ (X12 契約と EDIFACT 契約の両方) |
[先頭および末尾のゼロおよび空白を許可する] | [双方向アグリーメント] タブの [トランザクション セット設定] の [検証] ページ (X12 契約と EDIFACT 契約の両方) |
末尾の区切り記号が使用できる場合に空の XML タグを作成する | [双方向アグリーメント] タブの [トランザクション セット設定] の [ローカル ホスト設定] ページ (X12 契約と EDIFACT 契約の両方) |
受信バッチ処理オプション | 双方向アグリーメント タブの [ローカル ホスト設定] ページ ([インターチェンジの設定] の下) (X12 と EDIFACT の両方の契約) |
既定の EDIFACT 区切り記号 | - |
セキュリティ/認証/パスワードの情報をマスクする | 双方向アグリーメント タブの [ローカル ホスト設定] ページ ([インターチェンジの設定] の下) (X12 と EDIFACT の両方の契約) |
暗黙的に指定された 10 進形式 Nn を 底 10 の数値に変換する | [双方向アグリーメント] タブの [トランザクション セット設定] の [ローカル ホスト設定] ページ (X12 契約の場合) |
要求 - 応答の受信ポートで送信パイプラインに ACK をルーティングする | [ローカル ホストの設定] ページ ([受信側の設定] セクション) の [双方向アグリーメント] タブの [インターチェンジの設定] (X12 と EDIFACT の両方の契約) |
X12 文字セット | X12 インターチェンジ エンベロープ生成 注: この設定は、契約プロパティに入力された値の検証にのみ使用されます。 実行時処理に使用される X12 文字セットは、パイプライン プロパティで選択されます。 詳細については、「 EDI 文字セット」を参照してください。 |
HIPAA トリガー フィールドの使用
多くの場合、EDI セグメントには、セグメントの意味を変更する修飾子の値が含まれています。 たとえば、N1 セグメントには "請求先名" を示す "BT" の修飾要素が含まれていたり、"出荷先名" を示す "ST" の修飾要素が含まれていることがあります。 通常、これらのフィールドを解釈する方法を決定するビジネス ロジックに任され、逆アセンブラーは N1 セグメントのすべてのインスタンスを同じ XML レコード名に解決します。ただし、BizTalk Serverに付属する HIPAA スキーマには、EDI 逆アセンブラーが修飾値の存在に基づいて一意の XML レコードを作成できるようにする注釈が含まれています (「HIPAA スキーマ トリガー フィールド注釈」を参照)。
HIPAA トランザクション セットの受信時に、トリガー フィールドが入ったセグメントがあると、逆アセンブラーではトリガー情報を使用して、そのセグメントとトリガーの組み合わせに固有の XML レコードを生成します。
次の表に、N101 の値に基づいて N1 セグメントを XML レコードに変換する方法を示します。
N1 セグメント | 生成される XML データ |
---|---|
N1*PR*Contoso*XV*0000000~ | <ns0:TS835W1_1000A_Loop> <N1_PayerIdentification_TS835W1_1000A> <N101__EntityIdentifierCode>PR</N101__EntityIdentifierCode> <N102__PayerName>Contoso</N102__PayerName> <N103__IdentificationCodeQualifier>XV</N103__IdentificationCodeQualifier> <N104__PayerIdentifier>0000000</N104__PayerIdentifier> </N1_PayerIdentification_TS835W1_1000A> |
N1*PE*Fabrikam*FI*9999999~ | <TS835W1_1000B_Loop> <N1_PayeeIdentification_TS835W1_1000B> <N101__EntityIdentifierCode>PE</N101__EntityIdentifierCode> <N102__PayeeName>Fabrikam</N102__PayeeName> <N103__IdentificationCodeQualifier>FI</N103__IdentificationCodeQualifier> <N104__PayeeIdentificationCode>9999999</N104__PayeeIdentificationCode> </N1_PayeeIdentification_TS835W1_1000B> |