> ## 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.

# ノード値エディタの使用

> CData Arc でノード値エディタを使用して、ArcScript 式でマップされた値をフォーマットし、動的に生成する方法。

export const siteNameShort = "Arc";

**ノード値エディタ**は、ソースから宛先にマップされる値の変更をサポートします。このエディタは、{siteNameShort}Script 言語を使用してコンテンツをフォーマットし、動的に生成します。エディタを開くには、宛先ドキュメント内のノードにマウスを移動し、タブレットと鉛筆 <img src="https://mintcdn.com/cdata-arc/97fbscTC2p-cCdS3/public/images/xmlmap_expressioneditor_icon.png?fit=max&auto=format&n=97fbscTC2p-cCdS3&q=85&s=279e0291b4b0d206c405d81b6bee4ef5" alt="タブレットと鉛筆" noZoom style={{ display: "inline-block", verticalAlign: "middle", height: "0.9em", margin: 0 }} width="28" height="26" data-path="public/images/xmlmap_expressioneditor_icon.png" /> アイコンをクリックします。

<img src="https://mintcdn.com/cdata-arc/6KwLqCromZpN96Gn/public/images/edi_node_value_editor.png?fit=max&auto=format&n=6KwLqCromZpN96Gn&q=85&s=689afe745854d1bce88c523b640e6c2d" width="800" data-path="public/images/edi_node_value_editor.png" />

エディタには、結果をレンダリングするために使用する{siteNameShort}Script 式を含むパネルがあります。ソースXML の要素にすでにマッピングされているノードを編集する場合、式にはこのマッピングを表すXPath が表示されます。ここから式を編集して値を操作したり、ソースXML 内の追加ノードへの参照を含めたりできます。

<Note>エディタは、入力中に式を検証します。**無効な式**というメッセージが表示された場合は、構文に何らかの問題があります。これは通常、角括弧、丸括弧、スラッシュなどの予約文字をエスケープしていないことが原因で起こります。</Note>

## 空をnull として扱う

空の入力値（長さが0の文字列など）をNULL 出力値として扱うには、**空をnull として扱う**にチェックを入れます。デフォルトではチェックが外れているため、空の入力値は空の文字列（""）として扱われます。

この設定をOFF のままにしておくと、マッピングがNULL 値を受け入れない列を含むデータベーステーブルとやり取りする可能性がある状況で役立ちます。このような場合、空の文字列値を使用することで、データベースへの挿入時にエラーを回避できます。また、データベースから取得した空の文字列値をNULL に変換して、データセットをより適切に反映させる必要がある場合もあります。

## データソース

データソースタブには、ソースから動的に生成されたXML 要素のリストが含まれており、必要な要素をスクロールして選択できます。選択した要素の正しいXPath が{siteNameShort}Script に適用され、エディタで追加の変更を行うことができます。

角括弧で囲まれた式は、{siteNameShort}Script 内で変数として評価されます。ほとんどの場合、変数式にはソースドキュメント内の要素の *xpath()* 評価が含まれます。複数の角括弧式を使用して複数の変数を表現でき、連続して配置することも、リテラル文字（角括弧の外側）と混在させることもできます。

例えば、2つの異なるパスにある値を組み合わせるには：

```xml theme={null}
<Customer>
<First>Bruce</First>
<Last>Wayne</Last>
</Customer>
```

1つの式で2つの値を結合できます：

`[xpath('Customer/First')] [xpath('Customer/Last')]`

## メッセージヘッダー

メッセージヘッダーは、{siteNameShort} がフローを通過するデータの進行状況を追跡するのに役立ちます。すべての[追跡されたヘッダー](../getting-started/administration/activity#追跡されたヘッダー)は、マッピングエディタの**メッセージヘッダー**タブに表示され、式で参照できます。ノードを追跡ヘッダーとして追加するには、マッピング内のノードを右クリックまたは省略記号をクリックして、**トラッキングを追加**を選択します。

マッピングエディタの**メッセージヘッダーを追加**フィールドを使用して既存のヘッダー名を指定することで、式に他のメッセージヘッダーを含めることもできます。これらは追跡されたヘッダーである必要はありません。

<img src="https://mintcdn.com/cdata-arc/AKthyJ-LnqphL8js/public/images/message_headers.png?fit=max&auto=format&n=AKthyJ-LnqphL8js&q=85&s=09f97557f18231f1bbd20232034f85be" width="600" data-path="public/images/message_headers.png" />

ヘッダーノードを使用すると、値をマッピングの出力メッセージのヘッダーとしてマッピングできます。これらのヘッダーノードは出力XML には含まれませんが、出力メッセージにメタデータメッセージヘッダーとして追加されます。これらのヘッダーはフロー全体を通じてメッセージに保持され、必要に応じて下流のコネクタで値を参照できるため、アプリケーション内のデータの流れを追跡するのが容易になります。ヘッダーノードは、ノード値エディタの**メッセージヘッダー**タブに自動的に追加されます。ヘッダーノードを追加するには、既存のノードを右クリックまたは省略記号をクリックして、**追加 > ヘッダーを追加**を選択します。

ヘッダーノードは[追跡されたヘッダー](../getting-started/administration/activity#追跡されたヘッダー)には追加されません。ノードの省略記号をクリックして**トラッキングを追加**を選択することで、非ヘッダーの宛先ノードを追跡ヘッダーに追加できます。

## 変数

マッピングのある時点で変数を設定し、その変数をマッピングの後半で再度参照することは有用です。変数のスコープは、マッピングによって処理されるドキュメント全体を網羅します。つまり、変数のあらゆる属性はマッピング全体で保持され、{siteNameShort} がファイルの処理を完了したときにのみクリアされます。

例えば、マッピングで、注文書内の複数の明細項目の総コストを集計する必要がある場合があります（マッピングにいくつかの *LineItemCost* 要素と *TotalCost* 要素が含まれている場合など）。 *LineItemCost* に変数を追加して、各 *LineItemCost* 要素の値を合計することができます。すべての明細項目をループするForeach ループ内の要素にこの変数を含めると、Foreach ループが終了したときにその合計が *TotalCost* になります。

変数を追加するには、マッピングエディタでノードの省略記号をクリックし、**ノードを追加 > 変数を追加**を選択します。これを実行すると、変数が**変数**タブに表示され、式で参照できるようになります。

## Vault

**Vault** タブを使用して、[グローバル設定Vault](../getting-started/administration/settings/global-settings-vault) からアイテムを式に追加します。これは、フロー内のさまざまな場所で再利用する値がある場合に便利です。これらの値をVault で定義し、式の先頭で参照することができます。Vault 内のアイテムの *値* を使用したい場合は、角括弧で囲んで参照する必要があることに注意してください。そうしないと、エディタはアイテムの *名前* をリテラルとして解釈します。

## フォーマッタ

フォーマッタは、異なるXPath で返される値の操作をサポートします。フォーマッタは式の中でパイプ文字（|）で区切られ、左から右に評価されます。次に例を示します：

`[xpath('City') | toupper | substring(0,3)]`

この例では、`City` XPath の値が返される前に、すべての文字列が大文字に変換され、最初の3文字の部分文字列が結果として返されます。例えば、ソースドキュメントに次の値があった場合：

`<City>Durham</City>`

結果の式は以下を返します：

`DUR`

フォーマッタは**フォーマッタ**タブにリストされます。リストからフォーマッタをクリックして、式にフォーマッタを追加します。

### 文字列操作

文字列操作は、エディタでよく使用される機能です。一般的な文字列フォーマッタには以下が含まれます：

* [split](../scripting/value-formatters/transform-string-formatters#split-delimiter-indextoreturn-trimresult-removeempty)
* [toupper](../scripting/value-formatters/capitalization-string-formatters#toupper)
* [tolower](../scripting/value-formatters/capitalization-string-formatters#tolower)
* [substring](../scripting/value-formatters/transform-string-formatters#substring-index-length)
* [regexmatch](../scripting/value-formatters/searching-string-formatters#regexmatch-pattern-index-option)

例えば、入力XML の`CustomerName` 値を、出力XML の2つのフィールドに分割したいとします。これを実現するには、`split` フォーマッタを使用します。`split` のパラメータは、文字列を分割する文字と、返される結果の配列のインデックスです（インデックスは1から始まります）。

`[xpath(CustomerName) | split(' ', 1)]`

文字列フォーマッタの完全なリストは[こちら](../scripting/value-formatters/string-formatters)をご覧ください。

### 日付操作

もう1つの一般的な使用例は、ソースドキュメントの日付を宛先の日付に再フォーマットすることです。これは[todate](../scripting/value-formatters/date-formatters#todate-outputformat-inputformat-strictinputformat) フォーマッタによってサポートされており、以下の3つの引数を指定できます：

* output date format（必須）
* input date format（オプション）：フォーマッタが入力日時形式を自動検出できない場合にこれを使用します。
* strict input format（オプション）：受信した日付値が入力形式と一致するかどうかを確認するために使用します。一致しない場合は、タスクは日付を標準の日付形式に変換する代わりにエラーをスローします。デフォルトでは確認しません。強制的に確認するには、フォーマッタに`true` を追加します。

次の例では、 *12/21/22* 形式の日付を *Friday, 21 December, 2022* の形式の日付に変換し、日付の値が入力形式と一致するかどうかを確認します：

`[xpath(PurchaseDate) | todate(D, "mm/dd/yy", true)]`

日付計算に役立つ追加の関数として、`dateadd` と`compare` があります。これらの関数を使用すると、日付に一定の期間を加算または減算したり、日付を比較したりできます。

日付フォーマッタの完全なリストは[こちら](../scripting/value-formatters/date-formatters)をご覧ください。

### 数値演算

数値演算は、ソースXML の数値に対して計算を行う際に便利です。次の例では、セントをドルに変換し、結果の値が小数点以下2桁になるようにします：

`[xpath(ItemCost) | divide(100) | decimal(2)]`

数値フォーマッタを使用して税金を計算し、その税額を合計に追加することができます。次の例には、ネストされた数値フォーマッタ式が含まれています。各式は左から右に評価され、ネストされた式は外側の式に戻る前に完全に評価されます：

`[xpath(Subtotal) | divide(100) | multiply([xpath(TaxPercent) | divide(100) | add(1)]) | decimal(2)]`

数値フォーマッタの完全なリストは[こちら](../scripting/value-formatters/number-formatters)をご覧ください。

### Lookahead

*xpath()* フォーマッタは、ソースドキュメントからどの値を宛先にマッピングすべきかをさらに指定するための先読み構文をサポートしています。先読み構文を使用すると、繰り返されるXML 要素構造の中で特定の値をターゲットにすることができます。

例えば、入力XML に複数の明細項目があり、そのうちの1つだけに目的の値が含まれている場合があります。各明細項目は同じXPath を持つため、同じXPath にある値から目的の値を取得するには先読み構文が必要です。

次のXML はこの状況を示しています。`LineItem` 要素が一致するXML 構造を持っていることに注意してください：

```xml theme={null}
<LineItem>
  <ItemType>Goods</ItemType>
  <ItemName>Widgets</ItemName>
  <ItemAmount>20.00</ItemAmount>
</LineItem>
<LineItem>
  <ItemType>Tax</ItemType>
  <ItemName>Sales Tax</ItemName>
  <ItemAmount>1.38</ItemAmount>
</LineItem>
```

*Tax* 明細項目の金額（1.38）を宛先ドキュメントにマッピングする必要があるが、 *Goods* 明細項目の金額（20.00）はマッピングする必要がないとします。両方の明細項目は同じXML 構造を持つため、XPath だけでは *Sales Tax* 明細項目の金額を特定できません。例として、次の式は正しいXPath を使用していますが、 *Tax* 項目の金額ではなく *Goods* 項目の金額を取得します（ *Goods* 項目の金額がXPath を満たす最初の値であるため）：

`[xpath(LineItem/ItemAmount)]`

*Tax* 明細項目を指定するには、式は`LineItem` 要素内の`ItemType` 要素を検索し、その行項目が *Tax* 項目であることを確認する必要があります。`LineItem` 要素は先読みの'親' であり、`ItemType` 要素は先読みの'ターゲット' です。

先読み構文は次のとおりです：XPath 式内で、先読みの親要素の直後に角括弧を追加します。角括弧内には、先読みのターゲット要素へのXPath を指定し、`equals` 式を使用してターゲット値を確認します（角括弧はバックスラッシュでエスケープする必要があることに注意してください）：

`[xpath(LineItem\[ItemType='Tax'\]/ItemAmount)]`

これは、`LineItem/ItemType` が *Tax* である`LineItem` 要素の `LineItem/ItemAmount` から値を見つけることを意味します。この式は、値1.38 を返します。

## スクリプトモード

エディタの上部にある**スクリプトモード**トグルを使用すると、条件エディタをデザイナーモードからスクリプトモードに切り替えられます。これは、標準のデザイナーモードを使用する代わりに、条件を{siteNameShort}Script で記述する必要があることを意味します。スクリプトモードでは、出力値を返す必要のないカスタム{siteNameShort}Script を記述できます。ノードでスクリプトモードが有効になっている場合、そのノードの値はスクリプトの名前として表示されます。これは、<img src="https://mintcdn.com/cdata-arc/j59334epfVQRoK96/public/images/script_mode_icon.png?fit=max&auto=format&n=j59334epfVQRoK96&q=85&s=9faf0e8fbdbff89f4eec632e93b780c0" alt="スクリプトモード" noZoom style={{ display: "inline-block", verticalAlign: "middle", height: "0.9em", margin: 0 }} width="26" height="24" data-path="public/images/script_mode_icon.png" /> アイコンで表されます。

<img src="https://mintcdn.com/cdata-arc/6KwLqCromZpN96Gn/public/images/edi_script_node.png?fit=max&auto=format&n=6KwLqCromZpN96Gn&q=85&s=63f80376004fbfc03ac1e623431d7fbe" width="800" data-path="public/images/edi_script_node.png" />
