Skip to main content
XML Map コネクタは、マッピングエディタを通じて可能な限り多くのマッピングを実行できるように設計されています。ただし、カスタムのユースケースに対応するためにスクリプトが必要となる状況もあり得ます。

Custom Scripts

Node Value Editorで提供されるフォーマッタを超える追加の操作にアクセスするには、デスティネーション要素に隣接する山かっこ フォーマッタオプション をクリックして、その要素のカスタムスクリプトウィンドウを開きます。 カスタムスクリプトエディタは、スクリプティングセクションにあるScript のすべての機能をサポートします。Script の他のセクションと同様に、コードブロックには、スクリプトで利用可能な入力パラメータを定義するarc:info セクションが含まれます。また、カスタムスクリプトの結果を返すために設定できる出力要素result.text もあります。result.text で返される値が、デスティネーション要素に設定される値となります。 例えば、スクリプトを使用して、商品名に基づいて商品のSKU を判別できます。これを実現する簡単な方法は、select/case 文をXPath フォーマッタと組み合わせて、入力XML のItemName 要素をチェックすることです:
エディタは入力中にスクリプトを検証します。Invalid Script というメッセージが表示された場合は、何らかの構文の問題があります。

Script Operations

すべてのオペレーションを含むScript は、コードビューで完全に利用できます。例えば、ソースXML に商品ID が含まれており、その商品のSKU をデータベースから取得する必要がある場合、dbQuery オペレーションを使用してID に対応するSKU を検索できます。

Conditional Logic

Script は、マッピングテンプレートでの条件付きロジックの実行もサポートします。arc:if キーワードは、テンプレートでの条件付きロジックの実行を支援する数多くのキーワードの1つです。次に例を示します:

Foreach Loop Index

要素のマッピングがForeach ループ内にある場合、現在のループのインデックスは常にカスタムスクリプトで利用できます。_index 属性は、現在の要素を含む最も内側のForeach ループの現在のインデックス用に予約されています。 例えば、2つのForeach ループ(ドキュメント内の各注文に対するループと、その最初のループ内の、注文内の各商品に対する別のループ)に存在するLineItem 要素のマッピングを想像してみてください。LineItem 要素のマッピングで[_index] を参照すると、内側のループ(「商品」ループ)がこれまでにループした回数を返します。この値は1始まりです。

Map Item

マッピングの1か所でスクリプティング変数を設定し、それらの変数をマッピングの他の部分で再度参照すると便利な場合があります。これは、Node Value Editorで変数を作成することによって、および/または以下で説明する_map アイテムを使用することによってサポートされます。 _map アイテムは他のScript アイテムと同様ですが、そのスコープがXML Map コネクタで処理されるドキュメント全体に及ぶ点が異なります。_map アイテムのすべての属性はマッピング全体で保持され、XML Map コネクタがファイルの処理を完了したときにのみクリアされます。 例えば、マッピングプロジェクトで、発注書内の複数の明細項目の合計コストを集計する必要があるとします(マッピングにいくつかの LineItemCost 要素と1つの TotalCost 要素が含まれている場合があります)。Script を使用して、次のように_map アイテムの属性を設定することで、累計を追跡できます:
上記の行は、LineItemCost 要素の値を_map.sum_cost の現在の値に加算します(_map.sum_cost がまだ存在しない場合はデフォルト値0)。このコードがすべての明細項目をループするForeach ループ内の要素に含まれている場合、_map.sum_cost の値はForeach ループが終了したときの TotalCost になります。 _map の属性は保持されるため、この同じ_map.sum_cost 値を、後で TotalCost 要素のマッピングで参照できます。次に例を示します: