ArcScript クイックスタート
CData Arc には、ArcScript と呼ばれるフル機能のスクリプト言語が含まれており、開発者はカスタムロジックの実行を有効にすることでアプリケーションの機能セットを拡張できます。アプリケーションは、ArcScript を実装できる3つのコンテキストを公開します。
- 専用のScript コネクタ:接続されたワークフローの一部として任意のロジックを実行し、オプションとしてファイルベースの入出力を行います。
- イベントスクリプト:ファイルの送受信など、各コネクタによって公開されるイベントコールバックによってスクリプトをトリガーできるようにします。
- データマッピング:スクリプトがXML Map コネクタ内のフォーマット間でデータを変換するプロセスを強化できるようにします。
このページでは、ArcScript の概要と、上記のコンテキスト内でArcScript を使用することで実行できるタスクの具体例を示します。このリソースは、ArcScript の柔軟性を示し、開発者が独自のカスタムスクリプトを作成するのを支援することを目的としています。
コンテンツのテーブル
スクリプティングの概要
このセクションは、スクリプト自体の概念にはすでに精通しているものの、ArcScript の経験が豊富でない開発者向けに、ArcScript の概要を説明します。ArcScript の概念に慣れたら、ドキュメントのスクリプトセクションをArcScript のキーワード、操作、およびフォーマッタのリファレンスとして使用してください。
XML としてのArcScript
ArcScript はXML ベースの言語です。すべてのArcScript ステートメントは、名前に2つの部分が含まれるXML 要素です。
- 要素の名前空間、arc(以前のバージョンでは、rsb またはapi が名前空間として使用されていました。これらは下位互換性のために引き続きサポートされています)。
- set、call、if などのArcScript キーワードである要素名。
例:
<arc:call op="myOperation">
ArcScript ステートメントはXML 属性を使用してパラメータを定義します。たとえば、上記のarc:call ステートメントのop 属性は、呼び出す操作を示します。ArcScript ステートメントにXML 属性を提供する別の例として、次のステートメントではin XML 属性を使用しています。
<arc:call op="myOperation" in="inputItem">
このXML 属性は、入力項目を操作に渡すために使用されます(項目については属性と項目セクションで説明します)。
このセクションの残りの概念は、構文の原則に基づいています。ArcScript では、XML 要素内のキーワードを使用して操作を定義し、その操作内のXML 属性を使用して引数を指定します。
属性と項目
「属性」という用語は、ArcScript について説明するときに2つの異なる方法で使用されます。最初の使用方法については、前のセクションですでに説明しました。ArcScript キーワードはXML 要素で指定され、これらの要素のXML 属性は、キーワードの動作にコンテキストを提供します。「属性」 という用語の2番目の使用方法については、以下のセクションで説明します。
2つの使用法を区別するために、「XML 属性」というフレーズは常に明示的に使用されてXML 属性を参照します。(「XML」 修飾子を除く)「属性」に関するその他の説明は、以下で説明する用法を暗黙的に参照しています。
属性
主にattrs と略される属性は、ArcScript で変数を宣言するために使用されます。これらの変数は、arc:set キーワードを使用して設定します。attr の名前はattr XML 属性を使用して設定され、attr の値はvalue XML 属性を使用して設定されます。
たとえば、設定するArcScript 構文、myVariable = 5 は次のようになります。
<arc:set attr="myVariable" value="5" />
属性値が長い場合は、「value」XML 属性ではなく、arc:set 要素のコンテンツとして値を指定できます。
<arc:set attr="myLongAttr">This attribute needs to be set to multiple lines of text.Here is another line of text.The newline characters in these lines of text will be included in this attribute value.</arc:set>
attr によって保存された値にアクセスするには、attr の名前を次のように角括弧で囲みます:[myVariable]。
たとえば以下のラインは、新しい変数を前の例で設定された変数と同じ値に設定します。<arc:set attr="anotherVariable" value="[myVariable]" />
これらの角括弧で囲まれたattr 名には、次のように文字列リテラルを散在させることができます。
<arc:set attr="myEquation" value="[myVariable] plus [myVariable] equals 10" />
attrs は大まかに型付けされており、数値入力を必要とするキーワードまたはフォーマッタは、attrs を数値として解決しようとします。それ以外の場合、attrs は文字列として扱われます。
ArcScript attrs は、値を設定する前に宣言する必要はありません。arc:set ステートメントは、変数の初期化と設定の両方を行います。
attrs はスコープ内で定義されます。attr がif ステートメント内で初期化された場合、attr はif の外部(つまり、arc:if 要素が閉じられた後)では使用できません。
項目
項目は、attrs のコレクションです。それらは、フィールドを持ち、関数(レコードなど)を持たないオブジェクトと考えることができます。実際には、項目は通常、属性名のプレフィックスのように使用されます。 アイテムに属する属性は、次の構文を使用して参照されます。
itemName.attrName
arc:set キーワードを使用すると、項目内の属性を設定できます。
<arc:set attr="myItem.someVar" value="Hello World" />
項目は、属性名を使用せずに直接設定される場合があります。この場合、attr XML 属性の代わりにitem XML 属性が使用されます。
<arc:set item="myItem" />
この構文は、特定のスコープ内の項目を初期化して、そのスコープ内でスクリプトの後半で項目の内容を使用できるようにする場合に役立ちます。
項目は変数をグループ化するのに便利で、これらのグループ化された変数は操作の入力または出力にセットとして渡すことができます。たとえば、httpPost 操作では、入力としてurl とpostdata が必要です。これらの値を項目のattrs として設定し、その項目を操作への入力として渡すことができます。
<arc:set attr="httpItem.url" value="https://arc.cdata.com/jp/" />
<arc:set attr="httpItem.postdata" value="Greetings from within an ArcScript example" />
<arc:call op="httpPost" in="httpItem" />
操作は出力として項目を生成します。
たとえば、Web コンテンツを出力として返すhttpGet 操作を考えてみましょう。この操作の<arc:call> ステートメントでは、out 属性を使用して出力項目を指定する必要があります。HTTP コンテンツなどのすべての出力データは、この出力項目の属性として返されます。各出力属性の名前は、操作ごとに個別に定義されています(出力属性名の仕様については、ドキュメントのスクリプトセクションを参照してください)。
出力項目のattrs は、操作呼び出し(つまり、arc:call ステートメントを持つXML要素が閉じられるまで)のスコープ内で使用できるため、多くの場合、これらの値は、よりグローバルなスコープを持つ項目に設定する必要があります。
次の例でhttpItem 項目は、2つの機能を提供します。(1)これは、httpGet 操作用に設定されたurl パラメータを持つ入力項目です。(2)グローバルスコープがあるため、httpGet からの応答をこの項目のattr として設定し、操作呼び出しの外部で使用できます。outItem は、httpGet 呼び出しの出力項目として使用されます。出力データにアクセスするには、操作の出力属性が事前にわかっている必要があります。httpGet の場合、Web ページコンテンツの出力属性の名前はhttp:content です。outItem が出力項目、http:content が出力属性であるため、Webページのコンテンツには [outItem.http:content] を参照してアクセスし、このattr からのデータを使用してグローバル項目(httpItem)のattr を設定して、後で使用できるようにします。
<arc:set attr="httpItem.url" value="https://arc.cdata.comjp/" />
<arc:call op="httpGet" in="httpItem" out="outItem">
<arc:set attr="httpItem.response" value="[outItem.http:content]" />
</arc:call>
上記の例では、[outItem.http:content] 構文は、http:content がhttpGet 操作の出力属性として定義されているという事実に基づいています。したがって、出力項目はout パラメータを使用して任意に設定できますが、この項目の属性は操作自体によって決まります。
項目は、スクリプトから出力をプッシュするために使用されます。たとえば、スクリプトコネクタからの出力には、filename(出力されるファイルの名前)とdata(出力ファイルの内容)という2 つの出力属性が必要です。arc:push ステートメントは、これらの2つの属性が定義されている項目をプッシュするために使用されます。例:
<!-- set attributes of an http item for calling httpGet -->
<arc:set attr="httpItem.url" value="https://arc.cdata.com" />
<!-- initialize an item that will eventually be pushed out as an output file -->
<arc:set attr="pushItem.filename" value="myOutputFile.txt" />
<!-- call the http GET and store the response as the push item 'data' (the contents of the output file) -->
<arc:call op="httpGet" in="httpItem" out="outItem">
<arc:set attr="pushItem.data" value="[outItem.http:content]" />
</arc:call>
<!-- push out the output file -->
<arc:push item="pushItem" />
Script コネクタで上記のスクリプトを実行すると、Arc Web サイトホームページのHTML を含むファイルが出力されます。
フォーマッタ
ArcScript での属性は、フォーマッタを使用して操作されます。属性はバーティカルパイプバー「|」を使用してフォーマッタに「パイプイン」され、完全な式は角括弧で囲まれます。フォーマッタは、「|」文字を使用して左から右にチェーンできます。
String フォーマッタ
String フォーマッタは、文字列の値から情報を変換および収集します。フォーマッタに「パイプイン」される属性の値は、フォーマッタへの入力です(つまり、フォーマッタは左側の属性内の値を処理します)。
<arc:set attr="myAttr" value="some basic string" />
<arc:set attr="stringLength" value="[myAttr | getlength()]" />
左から右にチェーンされたフォーマッタの一例:
<arc:set attr="myAttr" value="some basic string" />
<arc:set attr="upperCaseString" value="[myAttr | replace('basic', 'uppercase') | toupper()]" />
その他の一般的なString フォーマッタは次のとおりです。
- substring(startIndex, length)
- base64encode()
- equals(‘target string’)
- split(delimiter, index)
Math フォーマッタ
String フォーマッタに加えて、Math フォーマッタを使用することで、データに対して数学演算を実行できます。
<arc:set attr="inputNum" value="5" />
<arc:set attr="outputNum" value="[rawNum | multiply(2) | add(4)]" />
<arc:set attr="myBool" value="[outputNum | equals(14)]" />
上記の例において、outputNum は14 にリゾルブされ、myBool は「true」にリゾルブされます。ダブルアンパサンド(&&)とダブルバーティカルパイプ(||)はそれぞれ、ブール値の「and」と「or」として使用できます。
<arc:set attr="inputNum" value="5" />
<arc:set attr="makeMeFalse" value="[inputNum | greaterthan(4)] && [inputNum | lessthan(3)]" />
上の例でmakeMeFalse は、実際には「false」にリゾルブされます。
ArcScript フォーマッタの完全なリストについては、フォーマッタドキュメントセクションを参照してください。
条件付きロジック
arc:if キーワードは、ArcScript の条件付きロジックの基本です。このステートメントでは、条件を表すブール式にexp 属性を設定する必要があります。
<arc:set attr="myGreeting" value="Hello World" />
<arc:if exp="[myGreeting | contains('Hello')]">
<arc:set attr="myFarewell" value="[myGreeting | replace('Hello', 'Goodbye')]" />
</arc:if>
arc:else キーワードはしばしば、arc:if と組み合わせて使用されます。重要なのは、else がif ステートメント内で次のように表示されるということです。
<arc:set attr="myString" value="Paddleboarding is fun">
<arc:if exp="[myString | contains('!')]">
<arc:set attr="myExclamation" value="[myString]" />
<arc:else>
<arc:set attr="myExclamation" value="[myString]!!" />
</arc:else>
</arc:if>
ArcScript は、条件付きロジックのarc:select、arc:equals、arc:check、arc:null、およびarc:notnull ステートメントもサポートします。これらの各ステートメントで使用される特定の構文についてのArcScript ドキュメントを参照してください。
操作
ArcScript の操作は、単一のキーワードやフォーマッタよりも高度な機能を提供します。これらは、(入力項目に設定された属性の形式で)入力を要求し、(出力項目に設定された属性の形式で)出力を提供する関数です。一般的な操作は次のとおりです。
- fileRead:ファイルを開き、その内容をスクリプトで使用できるようにします。
- fileMove:ファイルの名前を変更します。
- httpGet、httpPost、httpPut など:HTTP リクエストをリモートWeb サーバーに送信します。
- dbQuery:データベース接続文字列とクエリを指定して、データベースの結果を返します。
- xmlDOMSearch:指定のxpath でXML ドキュメントをループします。
- sysExecute:外部スクリプトまたはプログラムを呼び出します。
サポートされている操作の完全なリストについては、CData Arc オペレーション を参照してください。
操作は常に、arc:call ステートメントを使用して呼び出されます。
<arc:set attr="myFile.file" value="C:\\temp\\somefile.txt" />
<arc:call op="fileRead" in="myFile" out="tempOut">
<arc:set attr="myFile.contents" value="[tempOut.file:data]" />
</arc:call>
操作の入力および出力XML 属性については、この記事の属性と項目セクションで説明しました。
リストと配列
ArcScript の属性は、属性名の末尾にパウンド記号(#)を使用して、リストとして定義できます。
<arc:set attr="students.names#" value="Tom Jones" />
リスト属性の場合、arc:set キーワードを使用しても、属性の現在の値は上書きされず、リストの末尾に新しい値が追加されます。たとえば、以下のスクリプトは、学生のリストに3つの名前を追加します。
<arc:set attr="students.names#" value="Tom Jones" />
<arc:set attr="students.names#" value="Cindy Longo" />
<arc:set attr="students.names#" value="Mabel Spinner" />
リストが設定されると値は、インデックスを使用して直接参照することができます。
<!-- my favorite student is Mabel Spinner -->
<arc:set attr="favoriteStudent" value="[students.names#3]" />
リストは1-indexed であるため、students.names#3 は「Mabel Spinner」にリゾルブされることに注意してください。
arc:enum キーワードは、リストのすべての値を列挙するのに役立ちます。(attr はlist 属性、expand はtrue に設定される)arc:enum 呼び出しの内部では、予約済みの[_value] attr を使用してリスト内の各値を順番に参照できます。現在の値のインデックスは、[_index] を介して利用可能です。たとえば次のスクリプトでは、students.names のすべての名前をインデックスで区切られた行に出力します。
<arc:set attr="outitem.filename" value="names.txt" />
<arc:set attr="outitem.data" value="" />
<arc:enum attr="students.names" expand="true">
<arc:set attr="outitem.data" value="[outitem.data] [_index]) [_value]">
</arc:enum>
outitem.data 属性には、実行の最後に次の文字列が含まれます。
1) Tom Jones 2) Cindy Longo 3) Mabel Spinner
ArcScript のすべての配列はリストとして扱われるため、静的サイズのリストに個別の構文はありません。属性値のすべてのコレクションを列挙するには、同じarc:enum キーワードを使用する必要があります。
XML との連携
Arc は一般的なデータフォーマットとしてXML を使用し、ArcScript はXML ドキュメントとのやり取りによく使用されます。このセクションでは、ArcScript でXML を操作するための以下の概念について説明します。
- xmlDOMSearch 操作は、XML ドキュメントをロードしてループするために使用されます。
- xpath フォーマッタは、XML ドキュメント内(つまり、xmlDOMSearch 呼び出し内)の特定の値にアクセスするために使用されます。
xmlDOMSearch
xmlDOMSearch 操作は、XML ドキュメント(例:XML Document Object Model のパース)をロードし、指定したxpath をループするために使用します。例として、以下の単純なXML を取り上げます。
<Items>
<Name>
<First>Chris</First>
<Last>Bosh</Last>
</Name>
<Name>
<First>Dwyane</First>
<Last>Wade</Last>
</Name>
</Items>
xpath 入力属性を/Items/Name に設定してxmlDOMSearch を呼び出したとします。
<arc:set attr="xmlItem.xpath" value="/Items/Name" />
<arc:call op="xmlDOMSearch" in="xmlItem">
<!-- do something -->
</arc:call>
xmlDOMSearch 呼び出し内(つまり、XML コメントのある場所)のスクリプトは、2 回実行されます。これは、xmlDOMSearch がChris Bosh の「Name」要素をループ処理するときと、Dwyane Wadeの「Name」要素をループ処理するときです。/Items/name にさらにXML 要素が存在する場合、操作はそのような各要素をループし続けます。
初めてxmlDOMSearch をXML ファイルで呼び出す際には、uri 入力属性をロードするXML ファイルに設定する必要があります。多くの場合、この操作は専用のScript コネクタ内で呼び出され、ロードするXML ファイルはコネクタによって処理されている現在のファイルです(たとえば、ターゲットXML ファイルは入力ファイルとしてスクリプトコネクタにアップロードされます)。この場合、[FilePath] 属性は現在のファイルURI にリゾルブされるため、以下のコードを使用してドキュメントをロードできます。
<arc:set attr="xmlItem.uri" value="[FilePath]" />
<arc:set attr="xmlItem.xpath" value="/Items/Name" />
<arc:call op="xmlDOMSearch" in="xmlItem">
<!-- do something -->
</arc:call>
パースするXML ファイルがScript コネクタによって処理されている現在のファイルではない場合には、代わりにURI をターゲットXML ファイルのファイルパスに設定する必要があります。
xpath
xmlDOMSearch 呼び出し内でxpath フォーマッタは、現在のループ内のXML 値にアクセスできます。前のセクションのXML スニペットの例に戻り、Chris Bosh とDwyane Wade の姓と名前を抽出します。
<arc:set attr="xmlItem.uri" value="[FilePath]" />
<arc:set attr="xmlItem.xpath" value="/Items/Name" />
<arc:set item="players" />
<arc:call op="xmlDOMSearch" in="xmlItem">
<arc:set attr="players.name#" value="[xpath('First')] [xpath('Last')]" />
</arc:call>
[xpath(‘First’)]/[xpath(‘Last’)] 構文に注意してください。これらの構文はItems/Names/First およびItems/Names/Last からそれぞれ値を抽出するために使用されます。xpath() フォーマッタに提供されるxpath は、xmlDOMSearch 操作に提供されるxpath に関連していることに注意してください。
Script コネクタ
Script コネクタは、ArcScript でカスタムロジックを記述するための最も柔軟なコンテキストを提供します。Script コネクタは、他のコネクタと同じパターンに従います。入力ファイルは入力/送信フォルダから読み取られ、スクリプトによって生成された出力はすべて出力/受信フォルダにプッシュされます。Script コネクタは、入力ファイルを持っている必要はなく、出力を生成する必要もありません。
このセクションの例では、入力ファイルからの読み取りと出力ファイルの作成の両方を行います。
Script コネクタ入力
Script コネクタがファイルを処理するとき、このファイルへのパスは、予約されたFilePath 入力属性としてアクセス可能です。この値をfileRead やxmlDOMSearch などの操作と組み合わせて使用することで、入力ファイルの内容をロードできます。
たとえば以下のスニペットは、入力ファイルがスクリプトにロードする必要のあるテキストファイルであると想定しています。
<arc:set attr="fileItem.file" value="[FilePath]" />
<arc:call op="fileRead" in="fileItem" out="outItem">
<arc:set attr="fileItem.contents" value="[outItem.file:data]" />
</arc:call>
[FilePath] は、スクリプトコネクタ用に事前定義された入力属性であるため、使用前にこの属性を定義する必要はありません。上記のスクリプトを入力ファイルなしで実行すると(たとえば「アウトプット」タブで受信ボタンをクリックし、入力を行わずにスクリプトを実行した場合)、fileRead 操作中にエラーが発生します。
Script コネクタ出力
arc:push キーワードは、Script コネクタを介して出力ファイルを生成するために使用されます。Script コネクタには、arc:push 呼び出しの前に設定する必要がある2 つの必須出力属性があります。filename(出力ファイルの名前)とdata(出力ファイルの内容)です。これらの2 つの属性を項目に設定し、その項目を以下のようにarc:push ステートメントに含める必要があります。
<arc:set attr="pushItem.filename" value="myOutputFile.txt" />
<arc:set attr="pushItem.data" value="Some contents for my output file" />
<arc:push item="pushItem" />
ヘッダー / メタデータは、定義されたheader: 出力属性を使用して出力ファイルに追加できます。header: で始まる出力項目の各属性は、新しいカスタムヘッダーとして扱われます(結果のヘッダー名に「header:」は含まれません)。たとえば、以下のスニペットは、出力ファイルに2つのヘッダーを追加します。
<arc:set attr="pushItem.filename" value="myOutputFile.txt" />
<arc:set attr="pushItem.data" value="Some contents for my output file" />
<arc:set attr="pushItem.header:myCustomHeader" value="A value for my header" />
<arc:set attr="pushItem.header:Content-Type" value="text/plain" />
<arc:push item="pushItem" />
Event スクリプト
Arc Flow のコネクタには、カスタムスクリプトの実行をトリガーできるイベントがあります。送信前イベントは、コネクタが処理するメッセージの準備を完了した後、処理を実行する前に発生します (この時点ではメッセージの内容を変更できないことに注意してください) 。受信後イベントは、コネクタがファイルをローカルで処理した後(例:EDIFACT コネクタによるローカルEDI ファイルのXML への変換時)、またはリモートパーティからファイルを受信またはダウンロードした後(例:AS4 ファイルの受信時)に発生します。
一般に、メッセージへのヘッダーの追加など、メッセージ / ファイルの内容を変更するスクリプトは、専用のScript コネクタに分離する必要があります。イベント内のスクリプトは、アラートの送信、カスタムロジックに基づくファイルのコピーまたは移動、およびメッセージの内容を操作する必要のないその他の操作に制限する必要があります。
イベントスクリプトでは、専用のScript コネクタスクリプトのようなエラーは発生しません。コネクタがメッセージの送受信に成功した場合、エラーが発生したイベントスクリプトがトリガーされても、トランザクションは成功したとみなされます。このため、エラーの影響を受けやすいスクリプトは、専用のScript コネクタで記述する必要があります。
イベント入力
イベントスクリプトには常に、スクリプト内で変数として使用できる入力属性の定義済みセットがあります。
- [FilePath] - コネクタによって送信 / 処理 / 受信されたファイルのフルパスとファイル名
- [FileName] - コネクタによって送信 / 処理 / 受信されたファイルのファイル名
- [Direction] - イベントが発生したのは「送信中」または「受信中」のどちらか
- [ConnectorId] - イベントが発生したコネクタの名前
- [MessageId] - (ファイル名に関係なく)フロー全体でメッセージを識別する一意のID
イベントスクリプトで入力属性を参照する構文は、ArcScript で定義された属性 / 変数を参照する構文と同じです。以下の例は、受信後にファイルをコピーするため、受信後イベントに配置される場合があります。
<arc:set attr="moveItem.Source" value="[FilePath]" />
<arc:set attr="moveItem.Destination" value="C:\\some\\path\\[FileName]" />
<arc:call op="fileCopy" in="moveItem" />
一部のコネクタには、そのコネクタに関連付けられたプロトコルまたはユースケースに固有の、次のような追加のイベント入力属性があります。
- [AS2MessageId] —(Arc のメッセージの内部追跡ではなく)AS2 プロトコルレベルでのメッセージID 値
- [TemplateName#] — Database コネクタ(およびその他のバックエンドコネクタ)では、入力または出力テンプレートが実行された後にイベントが発生します。これには、テンプレート名が含まれます。
イベント出力
イベントスクリプトは、コネクタによって処理されるメッセージ内容の変更に使用されないようにするため、出力属性を持っていません。メッセージのヘッダーまたは本文と相互作用するスクリプトは、変数出力にアクセスできるよう、専用のスクリプトコネクタで記述する必要があります。
データマッピングスクリプト
ArcScript は高度なマッピングロジックに便利です。すべてのマッピングはXML Map コネクタで行われ、XML Map コネクタに慣れていないユーザーは、このセクションを理解するために専用のコネクタドキュメントを参照してください。XML Map ビジュアルデザイナの各出力ノードには、> アイコンを使用して 「コードスクリプト」 マッピングを挿入するオプションがあります。
基本的なドラッグアンドドロップマッピングとエクスプレッションエディタはデータ変換と操作の大部分をカバーしているため、ほとんどのマッピングの場合はカスタムスクリプトは必要ありません。「コードスクリプト」インターフェースは、マッピングの初期段階で変数値を設定または計算し、その変数をマッピングの後半で出力として参照するなど、カスタムロジックを実装する必要があるマッピングシナリオ用に提供されています。
Result.Text ノードとScript ノード
出力ノードがカスタムスクリプトに設定されている場合、result.text 属性によって、マッピング中に出力ファイルに書き込まれる値が決まります。つまりresult.text は、スクリプトの単一の出力属性です。
一部のスクリプトは、出力属性を必要としません。たとえばスクリプトでは、マッピングの後半で使用される値を、すぐ出力する必要なしに、単純に計算する場合があります。これらのスクリプトは、出力ノードの「Code Script」として記述するのではなく、Script ノードで記述する必要があります。宛先パネルでノードを右クリックして「新しいスクリプト」を選択することによって、Script ノードを宛先マッピングに追加できます。Script ノードにはresult.text がなく、XML 出力には表示されません。
_map
_map 項目は、マッピングの初期段階で値を計算して後に参照する必要があるマッピングで重要です。この項目は他のArcScript 項目と同様に動作しますが、スコープがドキュメントマッピング全体である点が異なります。つまり、この項目の属性は、ドキュメント全体がマッピングされるまでクリアされません。その他の項目では、マッピングが次の出力ノードに移動するたびにクリア / リサイクルされます。
_map 項目を理解しやすくするには、アウトバウンド発注または請求書をマッピングするときにライン項目の数を計算するという一般的なユースケースを考えてみてください。背景として、X12 810(請求書)を生成するには、ライン項目データをループしてIT1Loop1 セグメントを生成する必要があり、その後のマッピングで、CTT セグメントにドキュメント内のライン項目の総数を含める必要があります。ただし、マッピングがCTT セグメントに到達するときすでにIT1Loop1 ループは終了しているため、IT1Loop1 をループするときにライン項目の数を_map 内に「保存」し、CTT セグメントをマッピングするときに参照します。
このユースケースでは、以下のようなスクリプトを使用して、IT1Loop1 構造を生成するForeach ループ内にスクリプトノードを追加する必要があります。
<arc:set attr="_map.lineItemCount" value="[_map.lineItemCount | def(0) | add(1)]" />
この行は、_map 項目のlineItemCount 属性の値をインクリメントし、この属性がまだ存在しない場合は、デフォルト値の0(インクリメント前)に設定します。
マッピングの後半でCTT セグメントを生成する際、CTT 01 ノードを「Code Script」に設定する必要があります。このスクリプトは前に計算された値を返すことができます。
<arc:set attr="result.text">[_map.lineItemCount]</arc:set>
_map 属性を設定して後のスクリプトで参照する方法は、ループのカウントを必要としないユースケースでも同様です。
Ready to get started?
Use CData Arc's free 30-day trial to start building your own custom workflows today: