> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arc.cdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Advanced

> マッピングエディタを超える複雑な変換のために、XML Map コネクタでカスタムArcScript を使用します。

export const siteNameShort = "Arc";

export const siteName = "CData Arc";

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

## Custom Scripts

[Node Value Editor](../../mapping/mapping-node-value-editor)で提供されるフォーマッタを超える追加の操作にアクセスするには、デスティネーション要素に隣接する山かっこ <img src="https://mintcdn.com/cdata-arc/97fbscTC2p-cCdS3/public/images/xmlmap_anglebrackets.png?fit=max&auto=format&n=97fbscTC2p-cCdS3&q=85&s=861596f91602c4589b7e285e1254fc21" alt="フォーマッタオプション" noZoom style={{ display: "inline-block", verticalAlign: "middle", height: "0.9em", margin: 0 }} width="22" height="20" data-path="public/images/xmlmap_anglebrackets.png" /> をクリックして、その要素のカスタムスクリプトウィンドウを開きます。

カスタムスクリプトエディタは、[スクリプティング](../../scripting/scripting)セクションにある{siteNameShort}Script のすべての機能をサポートします。{siteNameShort} の{siteNameShort}Script の他のセクションと同様に、コードブロックには、スクリプトで利用可能な入力パラメータを定義する`arc:info` セクションが含まれます。また、カスタムスクリプトの結果を返すために設定できる出力要素`result.text` もあります。`result.text` で返される値が、デスティネーション要素に設定される値となります。

例えば、スクリプトを使用して、商品名に基づいて商品のSKU を判別できます。これを実現する簡単な方法は、select/case 文をXPath フォーマッタと組み合わせて、入力XML の`ItemName` 要素をチェックすることです：

<img src="https://mintcdn.com/cdata-arc/97fbscTC2p-cCdS3/public/images/xml-map_custom_script_select.png?fit=max&auto=format&n=97fbscTC2p-cCdS3&q=85&s=03c5981bf2dec7fba42d4f63e582f52c" width="600" data-path="public/images/xml-map_custom_script_select.png" />

<Note>エディタは入力中にスクリプトを検証します。Invalid Script というメッセージが表示された場合は、何らかの構文の問題があります。</Note>

## {siteNameShort}Script Operations

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

## Conditional Logic

{siteNameShort}Script は、マッピングテンプレートでの条件付きロジックの実行もサポートします。[arc:if](../../scripting/keyword-reference/op-arc-if) キーワードは、テンプレートでの条件付きロジックの実行を支援する数多くのキーワードの1つです。次に例を示します：

```xml theme={null}
<arc:set attr="paidInFull" val="true" />
<arc:if exp="[xpath('balance')] > 0">
  <arc:set attr="paidInFull" val="false" />
</arc:if>
<arc:set attr='result.text'>[paidInFull]</arc:set>
```

## Foreach Loop Index

要素のマッピングがForeach ループ内にある場合、現在のループのインデックスは常にカスタムスクリプトで利用できます。`_index` 属性は、現在の要素を含む最も内側のForeach ループの現在のインデックス用に予約されています。

例えば、2つのForeach ループ（ドキュメント内の各注文に対するループと、その最初のループ内の、注文内の各商品に対する別のループ）に存在する`LineItem` 要素のマッピングを想像してみてください。`LineItem` 要素のマッピングで`[_index]` を参照すると、内側のループ（「商品」ループ）がこれまでにループした回数を返します。この値は1始まりです。

## Map Item

マッピングの1か所でスクリプティング変数を設定し、それらの変数をマッピングの他の部分で再度参照すると便利な場合があります。これは、[Node Value Editor](../../mapping/mapping-node-value-editor)で変数を作成することによって、および/または以下で説明する`_map` アイテムを使用することによってサポートされます。

`_map` アイテムは他の{siteNameShort}Script アイテムと同様ですが、そのスコープがXML Map コネクタで処理されるドキュメント全体に及ぶ点が異なります。`_map` アイテムのすべての属性はマッピング全体で保持され、XML Map コネクタがファイルの処理を完了したときにのみクリアされます。

例えば、マッピングプロジェクトで、発注書内の複数の明細項目の合計コストを集計する必要があるとします（マッピングにいくつかの *LineItemCost* 要素と1つの *TotalCost* 要素が含まれている場合があります）。{siteNameShort}Script を使用して、次のように`_map` アイテムの属性を設定することで、累計を追跡できます：

```xml theme={null}
<arc:set attr="_map.sum_cost" value="[_map.sum_cost | def(0) | add([xpath(LineItemCost)])]" />
```

上記の行は、*LineItemCost* 要素の値を`_map.sum_cost` の現在の値に加算します（`_map.sum_cost` がまだ存在しない場合はデフォルト値0）。このコードがすべての明細項目をループするForeach ループ内の要素に含まれている場合、`_map.sum_cost` の値はForeach ループが終了したときの *TotalCost* になります。

`_map` の属性は保持されるため、この同じ`_map.sum_cost` 値を、後で *TotalCost* 要素のマッピングで参照できます。次に例を示します：

```xml theme={null}
<arc:set attr="result.text">[_map.sum_cost]</arc:set>
```
