Skip to main content

概要

には、バックエンドデータベースから対象のデータを取得し、そのデータを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 とします。 ワークスペースキャンバス上のMySQL コネクタ ドロップダウンリストからConnection を選択するか、Create ボタンをクリックして新しい接続を作成します。次の画像はAdd Connection ページを示しています。各フィールドの詳細については、接続の確立を参照してください。 MySQL の接続追加ページ

Select アクションの定義

接続を確立したら、Select アクションを使用してデータベースから関連データを取得します。810 Invoice に関連するデータの取得で述べたように、データは親のPurchaseOrders テーブルと子のLineItems テーブルから取得されます。 MySQL コネクタの設定タブで、ActionSelect に設定します。Select Configuration セクションでAdd をクリックして、アクションを設定します。これにより、データベース内のテーブルのリストが表示されます。親テーブル(PO データを持つもの)を選択します。子テーブル(明細項目データを持つもの)は後で追加します。この例ではPO テーブルはtest_purchase_orders であり、このテーブルを選択すると設定セクションのColumns 部分が読み込まれます。 test_purchase_orders テーブルを使用したMySQL Select の設定 エディタを使用して、テーブル内のどの列を取得するかを選択します。このガイドでは、出力XML にすべての列を含めます。 テーブルの列の1つにProcessed があり、レコードが処理されていない場合は値0 を、処理済みの場合は1 を保持します。PO がテーブルに挿入される際には、Processed 列が0 に設定されていることが期待されます。Select Configuration はProcessed 列が0 の場合にのみレコードを取得し、レコードの取得に成功したらこの列を値1 で更新するべきです。 これを実現するには、Processed = 0 のレコードのみを取得するフィルタを適用します。エディタのFilter セクションで、新しいルールを追加します:
  • 左側のドロップダウンをチェックする列に設定します。この例ではProcessed です
  • 中央のドロップダウンで論理演算子を選択します。この例ではEquals です
  • 右側の入力を、列と比較する値に設定します。この例では0 です
Processed フィルタを使用したMySQL Select の設定 Processed 列でレコードをフィルタリングすることに加えて、レコードが複数回取得されないように列を更新する必要があります。エディタのAdvanced セクションでは、データベースから行が正常に取得された際に更新する列を指定できます。 この場合、Processed 列を値1 で更新するべきです。 Processed 列の更新値を設定したMySQL Select の設定 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 です
親子関係を完全に設定したMySQL Select の設定 これで設定が完了したので、MySQL コネクタに保存してください。 設定を保存すると、2つの方法でデータベースからデータを取得できます。MySQL コネクタのAutomation タブReceive Automation が有効になっている場合、コネクタは受信間隔に従って未処理のPO(および関連する明細項目)を自動的に取得しようとします。あるいは、トランザクションタブに移動してReceive をクリックすることで、手動でレコードを取得できます。どちらの場合も、コネクタは設定されたテーブルに対してSELECT クエリを実行し、選択されたデータを含む出力メッセージを生成します。

XML としてのSelect アクションの出力

Select アクションが定義されると、MySQL コネクタは出力をXML として表現します。出力のXML モデルを表示するには、</> Code ボタンをクリックします: XML 出力構造を示すMySQL コネクタのコードビュー MySQL コネクタがデータベースからデータを取得する際、取得した値を使用してこの構造を持つXML ドキュメントを生成します。XML ファイル内のサブ構造は繰り返すことができます。例えば、単一のPO に対して複数の明細項目が取得された場合、test_po_line_items テーブルのXML サブセクションは各明細項目について繰り返されます。 次に、このXML 構造をX12 810 Invoice を表すXML 構造にマッピングする必要があります。その後、結果としてマッピングされたXML を直接EDI ドキュメントに変換できます。
このガイドで使用するマッピングはデータベースのXML 構造にあります。

ステップ2:X12 コネクタ

X12 コネクタは、このマッピングフローで2つの役割を果たします。
  1. 810 Invoice のXML 表現を生成するために使用されます。これは、X12 コネクタのトランザクションタブでサンプルファイルをアップロードするか、X12 コネクタに同梱されている組み込みテンプレートファイルを使用することで行えます。アップロードされたテンプレートファイルと組み込みテンプレートファイルは、X12 コネクタがXML Map コネクタに接続された後、XML Map コネクタのDestination フィールドに(connector:// を接頭辞として)表示されます。
  2. X12 コネクタは、XML Map コネクタによって生成されたXML をX12 ドキュメントに変換することで、フローの最後のステップを実行します。
X12 コネクタのインスタンスをキャンバスに追加します。X12 コネクタのインスタンス名には通常、X12 ドキュメントを送信する取引パートナーの名前を含めるべきです。このフローでは、わかりやすさのためにインスタンス名をXML_To_X12 とします。 キャンバスに追加されたX12 コネクタ

テストファイルのアップロード

すでにサンプルの810 Invoice ファイルがある場合、Upload Test File 機能により、対象のEDI ドキュメントのXML モデルを生成するプロセスが簡素化されます。X12 コネクタのトランザクションタブを開き、More > Upload Files をクリックします: X12 コネクタのトランザクションタブのファイルアップロードオプション アップロードするサンプルの810 Invoice を参照します。X12 コネクタはこのドキュメントのXML モデルを内部的に生成し、XML Map コネクタはそれを自動的に検出できます。モデルは内部に保存されるため、コネクタの外観や設定は変わりません。 サンプルの810 ファイルがない場合、XML Map コネクタをX12 コネクタに接続すると、XML Map コネクタの設定タブのDestination File フィールドに、選択可能な組み込みテンプレートファイルのリストが読み込まれます。詳細については、組み込みテンプレートファイルの選択を参照してください。
このガイドで使用するサンプルの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 コネクタに接続します。 MySQL、XML Map、X12 コネクタを含む完全なフロー

XML Map コネクタの設定

XML Map コネクタのXML Map タブで、Source およびDestination テンプレートファイルのフィールドを見つけます。コネクタは、MySQL コネクタのSelect ConfigurationからのXML モデルを利用可能なソーステンプレートファイルとして、X12 コネクタのテストファイルからのXML モデルを利用可能なデスティネーションテンプレートファイルとして検出します。いずれかのオプションが利用できない場合は、テストファイルと設定が適切に保存され、コネクタがキャンバス上で接続されていることを確認してください。 テンプレートファイルを指定すると、XML Map のビジュアルデザイナーにMySQL Select 設定とサンプルのX12 810 ファイルのXML 構造が自動的に読み込まれます。 MySQL とX12 の構造を表示するXML Map コネクタのビジュアルデザイナー
デスティネーション構造のInterchange およびFunctionalGroup 要素にMeta 要素がある場合、安全に削除できます。X12 コネクタは、XML をEDI に変換する際に、関連するメタデータをISA およびGS セグメントに適用します。

XML 構造の理解

XML Map コネクタで適切なマッピング関係を作成するには、ソースとデスティネーションの構造がXML でどのように表現されているかを理解する必要があります。 構造には2種類のXML 要素(ノード)があります。Parent(親)およびLeaf(リーフ)ノードはXML データの階層構造を定義し、親ノードは関連する要素をグループ化し、リーフノードはマッピングされる実際のデータ値を表します。親ノードの横にある展開ボタンと折りたたみボタンを使用して、そのリーフを表示または非表示にします。詳細については、ノードのマッピングを参照してください。 MySQL のXML では、各親ノードはデータが取得されるテーブルを表し、各リーフノードはそのテーブルの列を表します。810 のXML では、各EDI のloopsegment が親ノードであり、個々のEDI のelement がリーフノードです。

マッピングの作成

ソースとデスティネーションの構造でXML Map コネクタを設定したら、デザイナーでノードをドラッグアンドドロップしてマッピングを作成します。 マッピングは主に2つのステップで作成されます:
  1. 親ノード間のForeach ループ関係を作成する
  2. 確立された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 要素にドラッグします: Foreach ループを作成するためにtest_purchase_orders をTX-00401-810 にドラッグ 次に、以下に示すように、test_po_line_itemsIT1Loop1 要素にドラッグします: test_po_line_items をIT1Loop1 にドラッグ
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 ノードにドラッグして、この関係を確立します。 XML Map コネクタでPONumber をBIG04 にマッピング マッピングされたデスティネーションノードの右側にあるxpath は、マッピングされた値のソース(前の画像では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
各ソース値を、変更や条件ロジックなしでデスティネーションのEDI ドキュメントにドラッグアンドドロップできます。

コンテキストに応じたマッピング

一部のリーフノードのマッピングは、デスティネーション内の他の要素に依存します。例えば、デスティネーションXML 内のN1Loop1 ループは、EDI トランザクションにおける当事者またはエンティティ(請求先、出荷先、発注先など)を表す要素の集合です。N1Loop1/N1/N101 要素は当事者の具体的な役割を示し、当事者の役割によってソースXML からマッピングするべき値が決まります。 このガイドでは、ソースデータに出荷先当事者と送金先当事者の当事者詳細が含まれています。このデータをEDI 出力に含めるには、2つの個別のN1Loop1 構造が必要です。1つはN1Loop1/N1/N101ST(ShipTo の値)に設定したもの、もう1つはN1Loop1/N1/N101RI(RemitTo の値)に設定したものです。次に、ソースからShipToIDRemitToID をドラッグアンドドロップすることで、それぞれのループのN1Loop1/N1/N102 値をマッピングできます: ShipToID とRemitToID をN1Loop1 構造にマッピング 他の出荷先データ(ShipToAddrShipToZip など)を、N101ST に設定されているN1Loop1 構造のN2N3N4 要素にマッピングします。同様に、他の送金先データ(RemitToAddrRemitToZip など)を、N101RI に設定されているN1Loop1 構造の適切な要素にマッピングします。
一部のEDI ループ(このセクションのN1Loop1 ループなど)ではDestination マッピングに複数の個別ノードが必要であり、他のもの(前のセクションのIT1Loop1 ループなど)ではデスティネーションマッピングに単一のノードのみが必要です。この違いは、Foreach 関係が正しい数の出力ノードを自動的に生成するかどうかによって決まります。N1Loop1 ノードにはForeach 関係が関連付けられていないため、デスティネーションマッピングには正しい数のN1Loop1 ノードを明示的に含める必要があります。

単純な計算

一部の値はソースXML から直接取得されず、ソース内の1つ以上の値を使用して計算されます。例えば、各IT1Loop1 ループ(各明細項目)には、その明細項目に適用される税額を表すTXI/TXI02 要素があります。ソースデータには、購入に適用される税を計算するために必要なすべての情報が含まれています:
  • 単価
  • 数量
  • 税率
ただし、計算された税の値自体はソースに存在しないため、XML Map コネクタで計算する必要があります。 Node Value Editorには、マッピング中にデータを操作するために使用できるフォーマッタがあります。この場合、ソースデータをデスティネーションの値に変換するためにmultiply フォーマッタを使用する必要があります。 まず、PricePerUnit ソースノードをIT1Loop1/TXI/TXI02 デスティネーションノードにマッピングします。単価は式の入力変数の1つであるため、これは適切な数式を生成するための良い出発点です。次に、デスティネーションノードの右側にあるタブレットと鉛筆の タブレットと鉛筆のアイコン アイコンをクリックして、次の画像に示すNode Value Editor を開きます: 初期の税の式を表示するNode Value Editor 明細項目の合計コストを求めるために、価格パラメータに数量を掛けます。縦のパイプ文字(|)を使用してPricePerUnit の値をmultiply フォーマッタに渡し、次にmultiply フォーマッタのパラメータをQuantity ソース要素の値に設定します: 数量に対するmultiply フォーマッタを使用した税の式
Quantityxpath 値は、文字列リテラルではなく動的な値として解釈されるよう、角括弧で囲む必要があります。
この合計コストの値にTaxPercent を掛け、さらにパーセントからドルに変換するために.01 を掛ける必要があります。完全な式は次の画像に示されています: TaxPercent と.01 の乗数を含む完全な税の式 式を保存すると、マッピングは指定された動的な入力から適切な値を自動的に計算します。
前の画像でわかるように、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 要素を追加します(この要素はクリックしてドラッグすることで位置を変更できます): IT1Loop1 へのcode script 要素の追加 スクリプトは明細項目の全コストを計算する必要があり、これは次の式で求められます: (PricePerUnit * Quantity) + (PricePerUnit * Quantity * TaxPercent * .01) Script で次の式を表すようにscript 要素を編集します。script 要素に名前を付けて、Add Script をクリックします。
このスクリプトが各明細項目ループ中に実行された後、_map.costSum 属性はすべての明細項目の合計コスト(税込み)を保持します。この値をTDS/TDS01 要素で参照するには、TDS01 要素の右側にある</> アイコンをクリックし、result.text の値を先ほどの属性に設定します: _map.costSum 参照を含むTDS01 要素

条件付きマッピング

一部のノードでは、出力に表示されるべきかどうか、およびそれらに設定するべき値を決定するために条件ロジックが必要です。例えば、ITD セグメントにはInvoice の条件に関するデータが含まれており、これは条件が指定されている場合にのみ出力の810 に含める必要があります。 デスティネーションマッピングのITD 要素の横にあるじょうごアイコンを使用して、要素(およびその子)が出力ドキュメントに表示されるかどうかを決定する条件を適用できます。アイコンをクリックして、マッピング条件エディタでルールを追加します。この場合、PO の条件には、Invoice に条件を指定する必要があるかどうかを示す接頭辞があります: ITD 要素のマッピング条件エディタ ITD 要素は特別な条件が指定されている場合にのみ表示されるようになったので、ITD01 要素は条件の適切なコードを保持する必要があります。この例では、関連する条件に次の値を使用するべきです:
  • 02 - Expedited Payment
  • 03 - Delayed Payment
  • 11 - Alternative Payment Profile
入力データのTerms 要素の値は、フォーマッタを使用してITD01 の値に変換できないため、ITD01 マッピングを決定するためのカスタムスクリプトが必要です。ITD01 要素を編集してNode Value Editor を開き、Script Mode トグルを使用してカスタムスクリプトを提供します。次のスクリプトは上記のパターンを実現します:
上記の例ではarc:select キーワードを使用していますが、一連のarc:if およびarc:else ステートメントで同じ結果を得ることができます。

インデックスマッピング

デスティネーションXML の一部の要素は、Foreach 関係内のループ数をカウントする必要があります。例えば、IT1Loop1/IT1/IT101 要素は明細項目番号を保持するため、PO 内の各明細項目についてインクリメントする必要があります。同様に、Meta/ST02 要素はドキュメント内の各PO についてインクリメントする必要があります。 _index 属性は、最も局所的なForeach ループ関係のインデックスを保持する特別な変数です(ネストされたForeach ループの場合、_index は最も内側のループを指します)。Foreach 関係が正しく確立されている限り、Meta/ST02IT1Loop1/IT1/IT101 の両方を次の値に設定して、PO と明細項目の数を正しくカウントできます: [_index] この特別な属性は、より高度なマッピングロジックでForeach ループ内の現在のインデックスが関連する場合、任意のカスタムスクリプト環境でも利用できます。

マッピングでの日付の生成

デスティネーションXML の一部の要素は、ソースデータをまったく参照しません。BIG/BIG01 要素はInvoice の日付を表しますが、これは現在のマッピングステップまで利用できません。 特別なnow 日付フォーマッタを使用して、現在の日時の新しい日付値を生成できます。すべてのフォーマッタと同様に、これは任意のノードマッピングのNode Value Editor で利用できます。 すべてのフォーマッタには、フォーマットする入力属性が必要です。多くの場合、XML マッピング中、入力属性はxpath フォーマッタで取得された値(言い換えると、ソースXML から解析された値)です。この場合、now フォーマッタは常に現在の日時を返すため、どの属性が渡されても問題ありません。そのため、プレースホルダーとしてデフォルトの_ アイテムを渡すことができます: now() 日付フォーマッタを表示するNode Value Editor
now フォーマッタに渡されるパラメータは、日付の出力フォーマットを定義します。

明細項目と合計コストのカウント

CTT セグメントには、明細項目の合計数をカウントするための要素と、項目の合計コストを表すハッシュ値が含まれます。これらの値を計算するアプローチは、累積計算で説明したものと似ています。 関連する値は、明細項目データが利用可能なマッピングのセクション(IT1Loop1 セクション)で計算し、その後CTT マッピングの後半で参照する必要があります。これには、特別な_map アイテムに値を保存するカスタムスクリプトが必要です。 IT1Loop1 ループ(test_po_line_items レコードに対してForeach 関係でマッピングされている)で、右クリックしてAdd Node > Add Code Script を選択し、新しいノードを追加します。スクリプトはマッピングがループするたびに実行されます。言い換えると、各明細項目について1回実行されます。値を計算するには、行数と合計コストを合計し、_map アイテムの属性に保存する必要があります。 明細項目数は単純なカウンタで計算され、コストは累積計算で使用したのと同じ式で計算できます。
CTT01 要素は*_map.lineItemCount* に直接マッピングできます。スクリプトエディタを開いて先ほどの属性を参照します:
CTT02 要素は*_map.totalCost* にマッピングできます。ただし、CTT ハッシュでは小数点を無視する必要があり、これはここではコストに100 を掛けることと同等です:

フローの概要

MySQL コネクタはバックエンドシステムのPO データからXML を生成し、このXML はXML Map コネクタによってEDI フォーマットにマッピングされます。次に、EDI XML はX12 コネクタに渡され、インターチェンジヘッダーが追加されてXML がX12 フォーマットに変換されます。 このフローの最も手間のかかるステップは、XML マッピングの作成です。マッピングでは、親ノード間のForeach 関係を確立し、その後、ドラッグアンドドロップ、Node Value Editor の使用、条件の追加、カスタムスクリプトの記述を組み合わせて個々のリーフノードをマッピングする必要があります。

サンプルデータ

データベースのXML 構造

X12 810