ノード値エディタの使用

Version 25.3.9469


ノード値エディタの使用


ノード値エディタは、ソースから宛先にマップされる値の変更をサポートします。このエディタは、ArcScript 言語を使用してコンテンツをフォーマットし、動的に生成します。エディタを開くには、宛先ドキュメント内のノードにマウスを移動し、タブレットと鉛筆tablet and pencilアイコンをクリックします。

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

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

空をnull として扱う

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

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

データソース

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

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

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

<Customer>
<First>Bruce</First>
<Last>Wayne</Last>
</Customer>

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

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

メッセージヘッダー

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

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

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

ヘッダーノードは追跡されたヘッダーには追加されません。ノードの省略記号をクリックしてトラッキングを追加を選択することで、非ヘッダーの宛先ノードを追跡ヘッダーに追加できます。詳しくは、メッセージヘッダーを参照してください。

変数

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

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

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

Vault

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

フォーマッタ

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

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

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

<City>Durham</City>

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

DUR

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

文字列操作

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

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

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

文字列フォーマッタの完全なリストはこちらをご覧ください。

日付操作

もう1つの一般的な使用例は、ソースドキュメントの日付を宛先の日付に再フォーマットすることです。これはtodate フォーマッタによってサポートされており、以下の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)]

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

日付フォーマッタの完全なリストはこちらをご覧ください。

数値演算

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

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

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

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

数値フォーマッタの完全なリストはこちらをご覧ください。

Lookahead

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

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

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

<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/ItemTypeTax であるLineItem 要素の LineItem/ItemAmount から値を見つけることを意味します。この式は、値1.38 を返します。

スクリプトモード

エディタの上部にあるスクリプトモードトグルを使用すると、条件エディタをデザイナーモードからスクリプトモードに切り替えられます。これは、標準のデザイナーモードを使用する代わりに、条件をArcScript で記述する必要があることを意味します。スクリプトモードでは、出力値を返す必要のないカスタムArcScript を記述できます。ノードでスクリプトモードが有効になっている場合、そのノードの値はスクリプトの名前として表示されます。これは、script mode アイコンで表されます。