概要
には、EDI 文書(X12、EDIFACT など)をカンマ区切り値(CSV)ファイルのようなフラットファイル構造にマッピングできる強力なデータ変換ツールが含まれています。このガイドでは、X12 850 文書(発注書)をCSV 形式にマッピングすることに焦点を当てます。この記事で説明するアプローチは、他のEDI 文書をマッピングする場合にも適用できますが、マッピングされる値の具体的な関係は異なる場合があります。 このガイドではまず、 がEDI マッピングをどのように処理するかの概要を説明し、続いてフローの各ステップを順を追って説明します。このガイドで使用するX12 850 のインプットおよびCSV のアウトプット文書については、サンプル文書を参照してください。ビデオリソース
のデータ変換の概要については、このビデオをご覧ください。におけるEDI マッピング
XML との相互変換
は、データの変換と操作の中間形式としてXML を使用します。ほとんどのマッピングプロジェクトの最初のステップはソースファイル形式(この場合はX12)をXML に変換することであり、最後のステップはXML をデスティネーション形式(この場合はCSV)に変換することです。 XML との相互変換はデータ変換において非常に重要なステップであるため、 にはファイルをXML と相互に変換するための専用コネクタが数多く含まれています。このガイドでは、X12 コネクタとCSV コネクタを使用します。これらのコネクタは、ファイル形式を自動的にXML に変換します。これらのコネクタを使用すると、ソース形式(X12 850 発注書)とデスティネーション形式(必要な列を持つCSV ファイル)をXML としてモデル化できます。XML の変換
ソースおよびデスティネーション形式をXML としてモデル化したら、次のタスクは1つのXML 構造を別のXML 構造に変換することです。これはXML Map コネクタによって実現されます。 XML Map コネクタには、開始時と終了時のXML 構造をそれぞれ表すサンプルのSource およびDestination テンプレートファイルが必要です。これらを指定すると、XML Map コネクタのビジュアルデザイナーに2つのXML 構造が表示されます。 XML Map コネクタのビジュアルデザイナーでは、ソース構造の要素をデスティネーション構造の要素にドラッグアンドドロップして、両者の間にマッピング関係を作成できます。このマッピングステップでは、適切な要素がアウトプットファイルに含まれるよう、ソースファイルのデータを理解しておく必要があります。 XML Map コネクタには、マッピングプロセス中にデータを操作・計算するための値フォーマッタ、条件ロジック、さらにはカスタムスクリプトが含まれています。 マッピング関係を作成すると、XML Map コネクタは、ソースXML 構造に一致するすべてのファイルを、デスティネーションXML 構造のファイルに自動的に変換できます。この例では、X12 850 文書のXML モデルがCSV ファイルのXML モデルに自動的に変換されることを意味します。最後のステップは、CSV コネクタを使用してこのXML モデルを実際のCSV ファイルに変換することです。発注書のフラット化
850 発注書をCSV にマッピングする際の具体的な概念上の課題は、発注書をフラット化する必要があることです。1つの850 文書には複数の注文を含めることができ、各注文には異なる数の明細項目を含めることができます。一方、CSV ファイルにはこのデータを格納する列が静的な数だけ存在します。 CSV の列数は850 内の可変数の注文に合わせて拡張できないため、850 をCSV ファイルの単一のレコード(行)にマッピングすることはできません。同様に、CSV の列数は注文内の可変数の明細項目に合わせて拡張できないため、注文をCSV ファイルの単一の行にマッピングすることはできません。CSV の各行には、注文内の単一の明細項目のデータを格納する必要があります。単一の明細項目は、850 内の明細項目や注文の数に関わらず、静的な値のセットとして表現できるためです。850 のフラット化とは、その多層的で可変な構造を、静的な明細項目のセットへと縮小することです。 XML Map コネクタは、マッピング中に構造をフラット化するためにForeach ループ関係の概念を使用します。この場合、850 内の各明細項目に対して新しいCSV 行がそれぞれ作成されます。XML Map コネクタでこの関係を確立するには、ビジュアルデザイナーを使用して、ある要素(明細項目を表すPO1 要素)を別の要素(CSV レコードを表す要素)にドラッグするだけです。XML Map コネクタで構造をフラット化するのは簡単ですが、適切なForeach 関係を確立できるよう、ソースおよびデスティネーションのXML 構造を理解しておく必要があります。
まとめ
でマッピングを作成するには、次のステップが必要です:- インプット形式に固有のコネクタ(この例ではX12 コネクタ)を使用して、サンプルのインプットファイル(X12 850 文書など)をXML に変換する
- アウトプット形式に固有のコネクタ(この例ではCSV コネクタ)を使用して、サンプルのアウトプットファイル(必要な列を持つCSV ファイルなど)をXML に変換する
- 結果として得られたXML ファイルを、XML Map コネクタのソースおよびデスティネーションファイルとして使用する
- XML Map コネクタのビジュアルデザイナーで要素をドラッグアンドドロップして、ソースとデスティネーションのXML 構造間の関係を確立する
マッピングフローの作成
このセクションでは、 で、サンプルの850 発注書をフラットなCSV ファイルにマッピングするフローを作成するために必要な手順を説明します。ステップ1:X12 コネクタ
このマッピングフローの最初のステップは、サンプルのソース文書(X12 850)をXML に変換することです。 これは、X12 文書をXML に変換し、変換中にX12 インターチェンジヘッダーをオプションで検証できるX12 コネクタによって実現されます。X12 コネクタの前にはトリガーコネクタ(次の例ではAS2)があり、これがX12 850 文書を受信してX12 コネクタに直接渡します。ユースケースによっては、SFTP など別のトリガーコネクタが必要になる場合があります。ユースケースに合うコネクタの種類の詳細については、コネクタのカテゴリを参照してください。 navbar でFlows をクリックし、トリガーコネクタ(この例ではAS2)とX12 コネクタをワークスペースキャンバスに追加します(手順についてはフローの設計を参照してください)。ベストプラクティスは、X12 文書を送信するトレーディングパートナーの名前をConnector Id フィールドに含めることです(次の画像ではAmazon)。AS2 とX12 コネクタを接続します。
X12 コネクタの設定
X12 コネクタの設定タブで、Translation Type をX12-to-XML に設定します。これにより、X12 コネクタはX12 文書をXML 形式に変換する際にX12 インターチェンジヘッダーを検証できます(X12 文書が想定されたパーティに送受信されたことを確認するため)。
デフォルトでは、Dynamically process partners がチェックされています。これは、コネクタがEDI トランザクションからトレーディングパートナー関係を自動的に識別・追跡することを意味します。この場合、コネクタはライセンスの上限内ですべてのパートナーを動的に管理するため、手動でのパートナー設定は不要です。コネクタは、設定された値に基づいてインターチェンジおよびファンクショナルグループの値も入力します。このガイドではデフォルト設定を使用します。これをオフにした場合に必要となる項目については、X12 コネクタの設定を参照してください。
Usage Indicator が
T-Test Data に設定されている場合、検証は実行されません。テストファイルのアップロード
X12 コネクタのTransactions タブに移動し、More > Upload Test File をクリックします。
ステップ2:CSV コネクタ
次のステップは、サンプルのデスティネーション文書(適切な列を持つCSV ファイル)をXML に変換することです。これは、XML とCSV の間でファイルを変換するCSV コネクタを使用して行います。 CSV コネクタのインスタンスをフローに追加します。X12 コネクタには接続しないでください。また、ターミナルコネクタ(この例ではFile)のインスタンスも追加します。これはフローの最後のコネクタとして機能します。CSV とFile コネクタを接続します。
CSV コネクタの設定
CSV コネクタの設定タブを開きます。このマッピングフローに必要なCSV コネクタの設定プロパティはColumn headers present のみです。マッピングフローによって生成されるCSV ファイルの先頭に列ヘッダー名の行を含める必要がある場合は、これを有効にします。サンプルファイルの生成またはアップロード
CSV コネクタのSample Files タブに移動し、Add Sample File をクリックします。適切な列(およびColumn headers present が有効な場合はヘッダー)を含むサンプルCSV ファイルがすでにある場合は、File Upload を選択してファイルを参照します。あるいは、Manually Create を選択して、アプリケーション内で直接CSV ファイルを作成することもできます。Manually Create を選択する場合は、サンプルファイルに名前を付けます。Next をクリックします。

ステップ3:XML Map コネクタ
X12 コネクタとCSV コネクタがソースおよびデスティネーション文書のXML モデルを生成したので、XML Map コネクタを使用して一方のXML 構造をもう一方に変換します。 XML Map コネクタのインスタンスをフローに追加し、X12 コネクタをXML Map コネクタに、XML Map コネクタをCSV コネクタに接続します。
XML Map コネクタの設定
XML Map コネクタのXML Map タブでは、コネクタがSource をX12 コネクタのテストファイルから、Destination をCSV コネクタのサンプルファイルから事前に入力するはずです。
XML 構造の理解
XML Map コネクタで正しいマッピング関係を作成するには、ソースおよびデスティネーション構造がXML でどのように表現されているかを理解する必要があります。 構造内のXML 要素(ノード)には2種類あります。親 ノードとリーフ ノードがXML データの階層構造を定義し、親ノードは関連する要素をグループ化し、リーフノードはマッピングされる実際のデータ値を表します。親ノードの横にある展開・折りたたみボタンを使用して、そのリーフを表示または非表示にします。詳細については、マッピングノードを参照してください。- 850 XML では、各EDI ループ およびセグメント が親ノードです。各個別のEDI 要素 がリーフノードです。
- CSV XML では、ルートのItems 要素の各直接の子はレコード 要素と呼ばれ、CSV 内の個別の行を表します。各レコード 要素は親ノードであり、レコード 要素の子はすべて列 要素です。それぞれがレコードの単一のフィールドまたは列を表します。各列 要素はリーフノードです。
マッピングの作成
ソースおよびデスティネーション構造でXML Map コネクタを設定したら、デザイナーでノードをドラッグアンドドロップしてマッピングを作成します。 マッピングは主に2つのステップで作成します:- 親ノード間のForeach ループ関係を作成する
- 確立されたForeach ループ内のリーフノード間で値をマッピングする
Foreach ループの作成
Foreach 関係とは、ソースに要素が出現するたびに、デスティネーションに新しいXML 構造が作成されるべきであることを意味します。例えば、ソースのElementA がデスティネーションのElementB にマッピングされている場合、インプットファイル内のElementA の出現ごとに、アウトプットファイルにElementB(およびElementB のすべての子)のインスタンスが生成されます。 この場合(発注書のフラット化セクションで説明したとおり)、ソース850 の各明細項目は、デスティネーションCSV の新しいレコードになるはずです。この関係を作成するには、明細項目を表すSource 要素を、CSV レコードを表すDestination 要素にドラッグします。この場合、ソース要素はTX-00401-850、デスティネーション要素はcustomers です:
リーフノードのマッピング
Foreach 関係を確立したら、ループ内のリーフノードから値をマッピングできます。リーフノードのマッピングは、Foreach ループによって作成されたXML 構造を埋める値を決定します。シンプルなリーフノードのマッピング
ソースの値を結果のアウトプットに直接挿入する場合は、ソースのリーフノードをデスティネーションのリーフノードにドラッグするだけで値がマッピングされます。例えば、BEG03 要素はPONumber の値を保持し、これはデスティネーションのPONumber 属性に対応します:
これらの要素のxpath は、Foreach のxpath を基準とした相対パスです。
Lookahead 構文を使用した条件付きマッピング
850 文書には、交換におけるパーティとそのパーティの役割(例えば、出荷先パーティや請求先パーティ)を表す複数のN1Loop1 要素が含まれています。各N1Loop1 について、N1Loop1/N1/N104 要素がパーティを識別する値(パーティ名またはID)を保持するため、これらの値をアウトプットCSV にマッピングする必要があります。しかし、各N104 要素のxpath はパーティの役割に関わらず同じであるため、N104 要素へのxpath だけでは正しい値をマッピングするのに十分ではありません。 パーティの役割はN1Loop1/N1/N101 に保持されているため、マッピングではN104 要素の値をアウトプットCSV にマッピングする前にN101 要素を参照する必要があります。言い換えると、BillToPartyCode は次にマッピングする必要があります:N1Loop1/N1/N104 WHERE N1Loop1/N1/N101 = 'BT'
この条件付きマッピングは、Lookahead 構文で実現できます。
まず、値を含む要素をソースからデスティネーション要素(BillToPartyCode)にドラッグします:


- 現在のxpath の中で、参照する要素の最も近い親である要素(この場合はN1 要素)を見つける
- 角括弧
[ ]の中に、参照する要素へのxpath(この場合は[N101])を指定する - 等号式
=を追加して、この要素を照合する値(この場合はBT)を示す - 角括弧がxpath 式の一部として評価されないよう、バックスラッシュでエスケープする

Node Value エディタによる値の変更と計算
Node Value エディタは、xpath の操作に加えて、マッピング中に値を変更・操作するフォーマッタをサポートしています。ItemTotalCost 要素は明細項目の合計コストにマッピングする必要がありますが、これはソース要素から直接得られるものではなく、項目の数量と項目の価格を掛けることで簡単に計算できます。 開始点として、項目の価格をItemTotalCost 要素にマッピングし、Node Value エディタを開きます。 multiply フォーマッタを使用して、この開始値(項目あたりの価格)に項目数を掛けることができます。フォーマッタ構文は次のように機能します:- シーケンスは角括弧で囲まれます(現在のItemTotalCost 式ですでにそうなっています)
- シーケンスは左から右へ評価されます
- シーケンスは縦のパイプ文字で区切られます(例:
[value | formatter1() | formatter2() | formatter3()])
ソースノードをデスティネーションノードにドラッグした結果生成されるxpath() 構文自体が、特別な種類のフォーマッタです。
