概要
には、バックエンドデータベースから対象のデータを取得し、そのデータをX12 やEDIFACT などの送信EDI ドキュメントにマッピングするための強力なツールが含まれています。このガイドでは、MySQL データベースからEDI へのワークフローを作成するプロセスを、X12 810 Invoice ドキュメントの生成に焦点を当てて説明します。サンプルのInvoice は、Amazon が要求する構文を反映しています。 このガイドで説明するアプローチと原則は、他のEDI ドキュメントの生成にも適用できます。ただし、データベースから取得する具体的なデータや、マッピングされる値間の関係には違いがある場合があります。 このガイドは、 でマッピングを実現する方法の概要から始まり、フローの各ステップを順を追って説明します。本記事で使用するデータベース構造、出力ファイル、および結果として得られる810 ドキュメントについては、サンプルデータを参照してください。でのEDI マッピング
MySQL データをXML として取得する
は、データの変換と操作のための共通フォーマットとしてXML を使用します。すべてのEDI マッピングフローでは、ソースデータ(この場合はデータベースのデータ)とデスティネーションデータ(この場合はEDI ファイル)をXML に変換します。 データベース(またはデータベースに類するアプリケーション)からデータを取得する のすべてのコネクタは、自動的に出力データをXML ファイルとしてフォーマットします。そのため、データベースから取得したデータは、すぐにマッピングや変換ができる状態になっています。このガイドでは、MySQL データベースとやり取りするためにMySQL コネクタを使用します。810 Invoice に関連するデータの取得
Invoice は通常、発注書(PO)への応答として取引パートナーに送信されます。製造会社が一連の製造品を要求するPO を受け取ると、製造会社は要求された商品の代金を支払うためのInvoice で応答します。 その結果、Invoice の生成に使用されるデータは通常、以前に受信したPO から得られます。このガイドでは、受信したPO データが自動的にデータベースに挿入されることを前提としているため、PO のデータベーステーブルには810 Invoice に関連するデータが保持されています。このフロー用にMySQL コネクタを設定する際、MySQL コネクタはPO データが保持されているテーブルを対象とします。 PO には複数の明細項目を含めることができ、典型的なデータベース構成では明細項目データをPurchaseOrders テーブルとは別のLineItems テーブルに保存します。LineItems テーブルにはPurchaseOrders テーブルへの外部キーがあるため、どの明細項目がどのPO に関連付けられているかを判別できますが、810 Invoice を生成するために必要なすべての情報を取得するには、両方のテーブルからデータを取得する必要があります。
Select アクションの定義には、(適切な外部キー関係を持つ)PurchaseOrders テーブルとLineItems テーブルから同時にデータを取得するために必要な手順が含まれています。
EDI ドキュメントをXML として表現する
データベースから取得したXML データをEDI ドキュメントにマッピングするには、EDI ドキュメントもXML として表現する必要があります。 には、EDI とXML フォーマット間を変換するさまざまなコネクタが含まれています(X12 とEDIFACT がその2つです)。このガイドではX12 ドキュメントのマッピングに焦点を当てているため、対象の810 ドキュメントのXML 表現を生成するためにX12 コネクタを使用します。 マッピングフローを作成する前に、サンプルの出力ドキュメント(サンプルの810 など)を用意しておくことが重要です。サンプルドキュメントは、マッピングステップ用のXML モデルを作成するために使用されます。独自のサンプルドキュメントをアップロードするか、組み込みテンプレートのリストから選択することができます。XML 構造の変換
ソースとデスティネーションのフォーマットがXML として表現されたら、強力なXML Map コネクタを使用して、一方のXML 構造を他方に変換します。 XML Map コネクタには、それぞれ開始時と終了時のXML 構造を表すサンプルのSource およびDestination テンプレートファイルが必要です。データベースから取得したXML 出力がソースファイルであり、X12 810 ドキュメントのXML 表現(サンプルの810 をX12 コネクタに通すことで生成)がデスティネーションファイルです。 ソースとデスティネーションの構造を指定すると、XML Map コネクタのビジュアルデザイナーに2つの構造が読み込まれます。ソース構造の要素をデスティネーション構造の要素にドラッグアンドドロップして、両者の間にマッピング関係を作成します。このマッピングステップでは、適切な要素が出力ファイルに含まれるよう、EDI 構造を理解しておく必要があります。 XML Map コネクタには、マッピングプロセス中にデータを操作・計算するための値フォーマッタ、条件ロジック、さらにはカスタムスクリプトが含まれています。これらの機能の詳細については、マッピングを参照してください。 マッピング関係を作成すると、XML Map コネクタは、ソースXML 構造に一致する任意のファイルをデスティネーションXML 構造を持つファイルに自動的に変換できます。この例では、データベースから取得したデータが自動的にX12 810 ドキュメントのXML モデルに変換されます。最後のステップは、810 XML ファイルのXML モデルを取得して実際の810 ドキュメントに変換することで、これはX12 コネクタで簡単に実現できます。マッピングフローの作成
このセクションには、 でデータベース出力を取得して810 Invoice にマッピングするフローを作成するための各ステップが含まれています。ステップ1:MySQL コネクタ
マッピングフローの最初のステップは、MySQL データベースから関連データを取得するためにMySQL コネクタを設定することです。接続の確立
ナビゲーションバーのフローをクリックし、ワークスペースのキャンバスにMySQL コネクタのインスタンスを追加します(手順についてはフローの設計を参照してください)。本番のフローでは、MySQL コネクタのインスタンス名に、対象のMySQL データベースと、データベースから取得またはデータベースにプッシュされるデータに関するコンテキスト情報を含めるべきです(例えば、MySQL_Invoice_tradingPartner)。このフローでは、わかりやすさのためにコネクタのインスタンス名をMySQL_Output とします。

Select アクションの定義
接続を確立したら、Select アクションを使用してデータベースから関連データを取得します。810 Invoice に関連するデータの取得で述べたように、データは親のPurchaseOrders テーブルと子のLineItems テーブルから取得されます。
MySQL コネクタの設定タブで、Action をSelect に設定します。Select Configuration セクションでAdd をクリックして、アクションを設定します。これにより、データベース内のテーブルのリストが表示されます。親テーブル(PO データを持つもの)を選択します。子テーブル(明細項目データを持つもの)は後で追加します。この例ではPO テーブルはtest_purchase_orders であり、このテーブルを選択すると設定セクションのColumns 部分が読み込まれます。

Processed があり、レコードが処理されていない場合は値0 を、処理済みの場合は1 を保持します。PO がテーブルに挿入される際には、Processed 列が0 に設定されていることが期待されます。Select Configuration はProcessed 列が0 の場合にのみレコードを取得し、レコードの取得に成功したらこの列を値1 で更新するべきです。
これを実現するには、Processed = 0 のレコードのみを取得するフィルタを適用します。エディタのFilter セクションで、新しいルールを追加します:
- 左側のドロップダウンをチェックする列に設定します。この例では
Processedです - 中央のドロップダウンで論理演算子を選択します。この例では
Equalsです - 右側の入力を、列と比較する値に設定します。この例では
0です

Processed 列でレコードをフィルタリングすることに加えて、レコードが複数回取得されないように列を更新する必要があります。エディタのAdvanced セクションでは、データベースから行が正常に取得された際に更新する列を指定できます。
この場合、Processed 列を値1 で更新するべきです。

test_purchase_orders テーブルから適切なレコードが取得されるようになったので、各PO に関連付けられた明細項目を取得するためにSelect Configuration セクションを設定する必要があります。この例では、明細項目データはtest_po_line_items テーブルに保持されています。
Select Configuration で、Add をクリックして新しい子テーブルを追加します。test_po_line_items テーブルを選択します。エディタは左側のパネルのテーブルツリー構造を自動的に更新します。最初のテーブルと同様に、test_po_line_items から出力する特定の列を選択できます。このガイドではすべての列を含めます。
MySQL コネクタがtest_purchase_orders テーブルからPO レコードを取得する際、test_po_line_items テーブルからもレコードを取得しようとします。現在のPO に関連付けられた明細項目のみを取得するべきなので、子テーブルにWHERE 制約を適用する必要があります。
この例では、test_po_line_items テーブルのPONumber 列がtest_purchase_orders テーブルのPONumber 列に対応しています。明細項目のPONumber がPO のPONumber と一致する場合にのみ、レコードをPO レコードの出力に含めるべきです。
これを実現するには、test_po_line_items の設定のFilter セクションに新しいルールを追加します:
- 左側のドロップダウンを、チェックする子テーブルの列に設定します。この例では
PONumberです - 中央のドロップダウンを
Equalsに設定します - 右側の入力で、ドロップダウンの矢印をクリックして
REFを選択し、親テーブルを参照するように設定します(参照を示す$記号が表示されます) - 最後の入力を、比較する親テーブルの列に設定します。この例では再び
PONumberです

XML としてのSelect アクションの出力
Select アクションが定義されると、MySQL コネクタは出力をXML として表現します。出力のXML モデルを表示するには、</> Code ボタンをクリックします:
test_po_line_items テーブルのXML サブセクションは各明細項目について繰り返されます。
次に、このXML 構造をX12 810 Invoice を表すXML 構造にマッピングする必要があります。その後、結果としてマッピングされたXML を直接EDI ドキュメントに変換できます。
このガイドで使用するマッピングはデータベースのXML 構造にあります。
ステップ2:X12 コネクタ
X12 コネクタは、このマッピングフローで2つの役割を果たします。- 810 Invoice のXML 表現を生成するために使用されます。これは、X12 コネクタのトランザクションタブでサンプルファイルをアップロードするか、X12 コネクタに同梱されている組み込みテンプレートファイルを使用することで行えます。アップロードされたテンプレートファイルと組み込みテンプレートファイルは、X12 コネクタがXML Map コネクタに接続された後、XML Map コネクタのDestination フィールドに(
connector://を接頭辞として)表示されます。 - X12 コネクタは、XML Map コネクタによって生成されたXML をX12 ドキュメントに変換することで、フローの最後のステップを実行します。

テストファイルのアップロード
すでにサンプルの810 Invoice ファイルがある場合、Upload Test File 機能により、対象のEDI ドキュメントのXML モデルを生成するプロセスが簡素化されます。X12 コネクタのトランザクションタブを開き、More > Upload Files をクリックします:
このガイドで使用するサンプルの810 ドキュメントはX12 810にあります。
X12 コネクタの設定
X12 コネクタは、サンプルXML モデルの作成に加えて、XML Map コネクタによってマッピングされたXML を出力EDI ファイルに変換するために使用されます。また、コネクタで設定された設定に従って、ドキュメントにインターチェンジおよびファンクショナルグループのデータを追加します。そのため、送信X12 810 ドキュメントを受信するパートナーに固有の設定でX12 コネクタを設定することが重要です。 X12 コネクタの設定タブで、Translation Type プロパティをXML-to-X12 に設定します。このモードで動作している場合、X12 コネクタへの入力はEDI ドキュメントとして構造化されたXML であるべきです。XML Map コネクタの前のステップでCreate Test Files オプションを使用すると、入力XML がこの特定の構造に一致することが保証されます。
デフォルトでは、Dynamically process partners がチェックされています。これは、コネクタがEDI トランザクションから取引パートナー関係を自動的に識別して追跡することを意味します。この場合、コネクタはライセンスの上限内ですべてのパートナーを動的に管理するため、手動でのパートナー設定は不要です。このガイドではデフォルト設定を使用します。これをオフにした場合に何が必要になるかについては、X12 コネクタの設定を参照してください。
コネクタは、設定された設定に基づいてインターチェンジおよびファンクショナルグループの値も入力します。ただし、810 を正常に受信するために、取引パートナーがさらにインターチェンジ(ISA)およびファンクショナルグループ(GS)の値を要求する場合があります。どのヘッダー要素が必要かを確認するため、取引パートナーと明確にコミュニケーションを取ってください。詳細については、X12 コネクタのドキュメントを参照してください。
ステップ3:XML Map コネクタ
MySQL コネクタとX12 コネクタがそれぞれ入力データと出力データのXML モデルを生成したので、XML Map コネクタを使用して一方のXML 構造を他方に変換します。 XML Map コネクタをフローに追加し、MySQL コネクタをXML Map コネクタに、XML Map コネクタをX12 コネクタに接続します。
XML Map コネクタの設定
XML Map コネクタのXML Map タブで、Source およびDestination テンプレートファイルのフィールドを見つけます。コネクタは、MySQL コネクタのSelect ConfigurationからのXML モデルを利用可能なソーステンプレートファイルとして、X12 コネクタのテストファイルからのXML モデルを利用可能なデスティネーションテンプレートファイルとして検出します。いずれかのオプションが利用できない場合は、テストファイルと設定が適切に保存され、コネクタがキャンバス上で接続されていることを確認してください。 テンプレートファイルを指定すると、XML Map のビジュアルデザイナーにMySQL Select 設定とサンプルのX12 810 ファイルのXML 構造が自動的に読み込まれます。
XML 構造の理解
XML Map コネクタで適切なマッピング関係を作成するには、ソースとデスティネーションの構造がXML でどのように表現されているかを理解する必要があります。 構造には2種類のXML 要素(ノード)があります。Parent(親)およびLeaf(リーフ)ノードはXML データの階層構造を定義し、親ノードは関連する要素をグループ化し、リーフノードはマッピングされる実際のデータ値を表します。親ノードの横にある展開ボタンと折りたたみボタンを使用して、そのリーフを表示または非表示にします。詳細については、ノードのマッピングを参照してください。 MySQL のXML では、各親ノードはデータが取得されるテーブルを表し、各リーフノードはそのテーブルの列を表します。810 のXML では、各EDI のloop とsegment が親ノードであり、個々のEDI のelement がリーフノードです。マッピングの作成
ソースとデスティネーションの構造でXML Map コネクタを設定したら、デザイナーでノードをドラッグアンドドロップしてマッピングを作成します。 マッピングは主に2つのステップで作成されます:- 親ノード間の
Foreachループ関係を作成する - 確立された
Foreachループ内のリーフノード間で値をマッピングする
Foreach ループの作成
Foreach 関係は、ソースに要素が出現するたびに、デスティネーションに新しいXML 構造が作成されることを意味します。例えば、ソースのElementA がデスティネーションのElementB にマッピングされている場合、入力ファイル内のElementA の各出現は、出力ファイル内のElementB(およびElementB のすべての子)のインスタンスをもたらします。
この場合、PO テーブル(test_purchase_orders)から取得した各レコードは、結果として得られるEDI 内の新しいトランザクション(TX)をもたらし、明細項目テーブル(test_po_line_items)から取得した各レコードは新しいIT1Loop をもたらします。次の画像に示すように、test_purchase_orders 要素をTX-00401-810 要素にドラッグします:


Destination 構造を作成するために使用したサンプルのX12 810 ドキュメントには、マッピングデザイナーに表示される複数のIT1Loop1 要素がある場合があります。Foreach 関係によって正しい数のIT1Loop1 要素が生成されることが保証されるため、これらの要素のうち1つを除いてすべて削除できます(ノードを右クリックしてDelete Node を選択します)。
リーフノードのマッピング
Foreach 関係を確立したら、ループ内のリーフノードから値をマッピングできます。リーフノードのマッピングは、Foreach ループによって作成されたXML 構造に入力される値を決定します。
一部のリーフノードのマッピングは単純ですが、他のものはNode Value EditorまたはCode Script Editorの使用が必要です。以下のセクションでは、EDI ドキュメントにおける一般的な各種類のリーフノードのマッピングについて説明します。追加情報については、マッピングを参照してください。
単純なリーフノードのマッピング
ソースの値を結果の出力に直接挿入するべき場合は、ソースのリーフノードをデスティネーションのリーフノードにドラッグするだけで値をマッピングできます。このプロセスでは、EDI のデスティネーションフォーマットと、結果のX12 ドキュメントに含める必要がある値を理解しておく必要があります。 例えば、X12 810 のBIG04 要素は、Invoice が作成されるPO 番号を保持します。これはデータベース出力のPONumber 要素に対応します。PONumber ノードをBIG/BIG04 ノードにドラッグして、この関係を確立します。
PONumber)を示します。リーフノードのxpath は、親ノードのForeach xpath(/Items/test_purchase_orders)からの相対パスです。すべての親ノードのxpath をリーフノードのxpath と連結することで、マッピングされた値のソースXML 内の完全なxpath を見つけることができます:/Items/test_purchase_orders/PONumber。
この例では、他の直接的なリーフノードのマッピング値には次のものが含まれます:
- PODate > BIG/BIG03
- CurrencyCode > CUR/CUR02
- ItemID > IT1Loop1/IT1/IT107
- Quantity > IT1Loop1/IT1/IT102
- PricePerUnit > IT1Loop1/IT1/IT104
- PONumber(再度) > IT1Loop1/IT1/IT111
コンテキストに応じたマッピング
一部のリーフノードのマッピングは、デスティネーション内の他の要素に依存します。例えば、デスティネーションXML 内のN1Loop1 ループは、EDI トランザクションにおける当事者またはエンティティ(請求先、出荷先、発注先など)を表す要素の集合です。N1Loop1/N1/N101 要素は当事者の具体的な役割を示し、当事者の役割によってソースXML からマッピングするべき値が決まります。 このガイドでは、ソースデータに出荷先当事者と送金先当事者の当事者詳細が含まれています。このデータをEDI 出力に含めるには、2つの個別のN1Loop1 構造が必要です。1つはN1Loop1/N1/N101 をST(ShipTo の値)に設定したもの、もう1つはN1Loop1/N1/N101 をRI(RemitTo の値)に設定したものです。次に、ソースからShipToID とRemitToID をドラッグアンドドロップすることで、それぞれのループのN1Loop1/N1/N102 値をマッピングできます:

ST に設定されているN1Loop1 構造のN2、N3、N4 要素にマッピングします。同様に、他の送金先データ(RemitToAddr、RemitToZip など)を、N101 がRI に設定されているN1Loop1 構造の適切な要素にマッピングします。
一部のEDI ループ(このセクションのN1Loop1 ループなど)ではDestination マッピングに複数の個別ノードが必要であり、他のもの(前のセクションのIT1Loop1 ループなど)ではデスティネーションマッピングに単一のノードのみが必要です。この違いは、Foreach 関係が正しい数の出力ノードを自動的に生成するかどうかによって決まります。N1Loop1 ノードにはForeach 関係が関連付けられていないため、デスティネーションマッピングには正しい数のN1Loop1 ノードを明示的に含める必要があります。
単純な計算
一部の値はソースXML から直接取得されず、ソース内の1つ以上の値を使用して計算されます。例えば、各IT1Loop1 ループ(各明細項目)には、その明細項目に適用される税額を表すTXI/TXI02 要素があります。ソースデータには、購入に適用される税を計算するために必要なすべての情報が含まれています:- 単価
- 数量
- 税率

|)を使用してPricePerUnit の値をmultiply フォーマッタに渡し、次にmultiply フォーマッタのパラメータをQuantity ソース要素の値に設定します:

Quantity の
xpath 値は、文字列リテラルではなく動的な値として解釈されるよう、角括弧で囲む必要があります。
前の画像でわかるように、Node Value Editor の使用中に、フォーマッタやソースドキュメント内のデータを簡単に検索できます。
累積計算
出力の810 ドキュメントには、Invoice の合計金額を表すTDS セグメントがあります。各明細項目のコストを合計するには、各明細項目ループ内で更新できる永続的な変数が必要です。 値を変数に保存し、マッピングの後半でこれらの値を取得するには、スクリプトが必要です。Script では、値は属性として保存され、アイテムは複数の属性を持つことができるオブジェクトです。アイテムの属性は次の構文で参照されます:item_name.attribute_name
_map アイテムは、ドキュメントマッピング全体を通じて属性値を保持する特別なアイテムです。言い換えると、ほとんどの属性(変数)は単一のノードマッピングでのみ保持されますが、_map アイテムの属性はマッピング内のすべてのノードを通じて保持されます。
各明細項目のコストを合計するには、明細項目のForeach ループ内(IT1Loop1 ループ内)で_map アイテムの属性を設定します。このスクリプトはIT1Loop1 ループ内の特定の要素に関連付けられていないため、専用のcode script要素をデスティネーションマッピングに追加します。この要素は結果のEDI ドキュメントには表示されませんが、マッピング内の他の用途のためにスクリプトロジックが実行されていることを示します。
まず、IT1Loop1 要素を右クリックしてAdd Node > Add Code Script を選択し、新しいcode script 要素を追加します(この要素はクリックしてドラッグすることで位置を変更できます):

(PricePerUnit * Quantity) + (PricePerUnit * Quantity * TaxPercent * .01)
Script で次の式を表すようにscript 要素を編集します。script 要素に名前を付けて、Add Script をクリックします。
</> アイコンをクリックし、result.text の値を先ほどの属性に設定します:

条件付きマッピング
一部のノードでは、出力に表示されるべきかどうか、およびそれらに設定するべき値を決定するために条件ロジックが必要です。例えば、ITD セグメントにはInvoice の条件に関するデータが含まれており、これは条件が指定されている場合にのみ出力の810 に含める必要があります。 デスティネーションマッピングのITD 要素の横にあるじょうごアイコンを使用して、要素(およびその子)が出力ドキュメントに表示されるかどうかを決定する条件を適用できます。アイコンをクリックして、マッピング条件エディタでルールを追加します。この場合、PO の条件には、Invoice に条件を指定する必要があるかどうかを示す接頭辞があります:
- 02 - Expedited Payment
- 03 - Delayed Payment
- 11 - Alternative Payment Profile
インデックスマッピング
デスティネーションXML の一部の要素は、Foreach 関係内のループ数をカウントする必要があります。例えば、IT1Loop1/IT1/IT101 要素は明細項目番号を保持するため、PO 内の各明細項目についてインクリメントする必要があります。同様に、Meta/ST02 要素はドキュメント内の各PO についてインクリメントする必要があります。_index 属性は、最も局所的なForeach ループ関係のインデックスを保持する特別な変数です(ネストされたForeach ループの場合、_index は最も内側のループを指します)。Foreach 関係が正しく確立されている限り、Meta/ST02 とIT1Loop1/IT1/IT101 の両方を次の値に設定して、PO と明細項目の数を正しくカウントできます:
[_index]
この特別な属性は、より高度なマッピングロジックでForeach ループ内の現在のインデックスが関連する場合、任意のカスタムスクリプト環境でも利用できます。
マッピングでの日付の生成
デスティネーションXML の一部の要素は、ソースデータをまったく参照しません。BIG/BIG01 要素はInvoice の日付を表しますが、これは現在のマッピングステップまで利用できません。 特別なnow 日付フォーマッタを使用して、現在の日時の新しい日付値を生成できます。すべてのフォーマッタと同様に、これは任意のノードマッピングのNode Value Editor で利用できます。 すべてのフォーマッタには、フォーマットする入力属性が必要です。多くの場合、XML マッピング中、入力属性はxpath フォーマッタで取得された値(言い換えると、ソースXML から解析された値)です。この場合、now フォーマッタは常に現在の日時を返すため、どの属性が渡されても問題ありません。そのため、プレースホルダーとしてデフォルトの_ アイテムを渡すことができます:

now フォーマッタに渡されるパラメータは、日付の出力フォーマットを定義します。明細項目と合計コストのカウント
CTT セグメントには、明細項目の合計数をカウントするための要素と、項目の合計コストを表すハッシュ値が含まれます。これらの値を計算するアプローチは、累積計算で説明したものと似ています。 関連する値は、明細項目データが利用可能なマッピングのセクション(IT1Loop1 セクション)で計算し、その後CTT マッピングの後半で参照する必要があります。これには、特別な_map アイテムに値を保存するカスタムスクリプトが必要です。
IT1Loop1 ループ(test_po_line_items レコードに対してForeach 関係でマッピングされている)で、右クリックしてAdd Node > Add Code Script を選択し、新しいノードを追加します。スクリプトはマッピングがループするたびに実行されます。言い換えると、各明細項目について1回実行されます。値を計算するには、行数と合計コストを合計し、_map アイテムの属性に保存する必要があります。
明細項目数は単純なカウンタで計算され、コストは累積計算で使用したのと同じ式で計算できます。
フローの概要
MySQL コネクタはバックエンドシステムのPO データからXML を生成し、このXML はXML Map コネクタによってEDI フォーマットにマッピングされます。次に、EDI XML はX12 コネクタに渡され、インターチェンジヘッダーが追加されてXML がX12 フォーマットに変換されます。 このフローの最も手間のかかるステップは、XML マッピングの作成です。マッピングでは、親ノード間のForeach 関係を確立し、その後、ドラッグアンドドロップ、Node Value Editor の使用、条件の追加、カスタムスクリプトの記述を組み合わせて個々のリーフノードをマッピングする必要があります。