ArcScript 入門

Version 23.4.8841


ArcScript 入門


ArcScript is an XML-based language included with CData Arc that can be used to write custom processing logic. ArcScript makes it easy to transform files or messages and integrate with other business processes. Arc includes complete Example Scripts for sending emails, executing batch files, working with files, and more.これらのサンプルを、管理コンソールからお客様のスクリプトおよびイベントに挿入することができます。

ArcScript は、データアクセスおよびプロセッシングのあらゆる側面の管理を可能にするハイレベルなプログラミング言語です。You can use keywords, attributes, items, operations, and feeds to write scripts and use them in events on all connectors, in the dedicated Script connector, and in the custom script option in the XML Map connector.

  • アトリビュート:name-value ペアのname 部分で、attribute=”address”, value=”123 Pleasant Lane” のように使われます。
    • Use the # character to denote an attribute as an array. This means that the array can contain more than one value, where each value can be referenced using 1-based indexing.
    • For example, [myitem.myattribute#2] refers to the second value in the myattribute attribute.
  • アイテム:Attribute-value ペアの関連するグループで、インプットとアウトプットを説明します。例:
      Attribute="name" value="Bob"
      Attribute="address" value="123 Pleasant Lane"
      Attribute="phone" value="123-4567"
    
  • フィード:住所や電話番号を含む顧客リストなどのアイテムのリスト。
  • オペレーション:アイテムをインプットとして受け、フィードをアウトプットとして生成するメソッドの一般名。
  • キーワードarc:set などのArcScript ステートメント。

ArcScript は多様なキーワードを持ち、次のようなことが可能です。

  • スクリプトのインプットとアウトプットを説明する
  • 実行フローを管理するためにIF/ELSE 構文やCASE 構文などのハイレベルなプログラミング構成を使う
  • オペレーションを呼び出し、カスタムオペレーションを定義する
  • オペレーションのインプットとして使用されるアイテム、およびフィード(オペレーションのアウトプット)を作成し変更する
  • オペレーション呼び出しの結果得られるフィードを、アイテムの反復により処理する

サンプルスクリプト

Arc には、E メール送信などの一般的なアクションを自動化するための完全なコードスニペットが含まれています。Script connector Settings tab またはコネクタのイベント タブで、スニペットを挿入 をクリックして、実行するアクションを選択します。必要なコードがカーソルに挿入されています。

The following sections describe how to use and extend these code snippets to write custom processing logic.

イベントインプットの使用

各イベントには、操作のインプットパラメータとして使用できる関連インプットがあります。インプットパラメータは、info セクションのインプット属性によって定義されています。

イベントの定義済みインプットを使用して、送受信されたファイルを処理するか、エラーメッセージを含むE メールを送信します。Other inputs are also available.For example, the available inputs for the After Receive event are:

<arc:info title="After Receive"  desc="このイベントはファイルを受信した後に発生します。">
  <input name="WorkspaceId"      desc="ファイルを受信しているワークスペースのId。" />
  <input name="ConnectorId"      desc="ファイルを受信しているコネクタのId。" />
  <input name="Direction"        desc="トランザクションの方向。" />
  <input name="Filename"         desc="受信されたファイルの名前。" />
  <input name="FilePath"         desc="受信されたファイルのパス。" />
  <input name="Attachment#"      desc="受信された添付ファイルのパス。" />
  <input name="MessageId"        desc="トランザクションのId。" />
  <input name="ErrorMessage"     desc="エラーが発生した場合は、エラーメッセージが表示されます。" />
</arc:info>

オペレーションの使用

Use the included code samples to invoke some of the built-in operations. The following example uses the appSendEmail operation to send an email after a file is received. To use it, simply replace the placeholder values:

<!-- E メールを送信 -->
<arc:set attr="email.To"         value="Recipient(s)"/>
<arc:set attr="email.Subject"    value="Before Send"/>
<arc:set attr="email.Message"    value="File [Filename] was processed."/>
<arc:call op="appSendEmail"/>

Note:The script shown above only works if you have previously configured a mail server in Settings (accessed by clicking the gear icon).Navigate to the Email Settings section of the アラートタブ.The appSendEmail operation uses the same mail server.

サンプルスクリプトの拡張

Use the included code samples to pass in predefined inputs to an operation.You can also pass in inputs that are specific to the operation.For example, the appSendEmail operation accepts several additional inputs, such as the body text and attachments.arc:set キーワードを使用して、これらの値を指定します。

arc:call キーワードを使用して、イベント内の任意の組み込み操作を呼び出したり、API を呼び出したりします。

ほかのキーワードを使用して、実行フローその他を制御します。ArcScript is computationally complete. It also includes enhancements designed to make processing and automation easy. ArcScript の構文とその機能について詳しくは、スクリプティング を参照してください。

ArcScript のアイテム

フィードは、アイテムにより成り立ちますが、ArcScript ではアイテムはフィードの部品という以上の働きをします。アイテムは、オペレーションにインプットを提供するために使われることもあります。

アイテムの宣言

For best readability and ease of later script modification, CData recommends creating explicit input items in ArcScript and passing them into operations on separate lines.アイテムは、arc:set キーワードを通じて作成され、名付けられ、アトリビュート値を与えられます。

<arc:set item="input" attr="mask" value="*.txt" />

上のスニペットは、input という名前のアイテムの、mask アトリビュートに*.txt という値をセットします。この場合、インプットアイテムはArcScript の変数の働きをします。

ただし、input という名前のアイテムは宣言されていません。その代わりに、初回にアトリビュートをセットしようとすると、そのアイテムが生成されます。この例では、インプットアイテムが存在しない場合、アイテムが生成され、それにmask アトリビュートがセットされます。

Tip:You can also use a “shorthand” method to declare items and attributes.次に例を示します。

<arc:set attr="outfile.trackedheader:myHeaderName" value="myValue" />

This snippet creates a colors item with a myfavorite attribute that has a value of green.

Passing Items as Query String Parameters

An alternative to creating explicit input items is to pass input parameters to operations in the form of arc:call query string parameters. For an example of the difference between explicitly declaring items and passing them as parameters, consider the following lines that declare an item called file, and pass this item into an operation to read a line:

<arc:set attr="file.file" value="[filepath]" />

<arc:call op="fileReadLine" in="file">

To accomplish this using query string parameters, you can use this syntax instead:

<arc:call op="fileReadLine?file=[filePath | urlencode]">

Note:Using this format requires that you URL-encode the parameter using the urlencode argument.This ensures that the application correctly parses special or reserved characters in file names without encountering errors.

Selecting Attribute Values

アトリビュートを参照するには、構文item.attribute(例えば、input.mask)を使用します。あるアトリビュート値をクエリするには、括弧([ ])でアトリビュート名を囲います。これは、文字列リテラルとしてではなく、文字列を評価したいということを示します。

例えば、次のコードスニペットを見てください:

<arc:set item="item1" attr="attr1" value="value1"/>
<arc:set item="item1" attr="attr2" value="item1.attr1"/>
<arc:set item="item1" attr="attr3" value="[item1.attr1]"/>

結果は次のとおりです:

  • item1.attr1 は、value1 のリテラル文字列の値を割り振られます。
  • item1.attr2 は、item1.attr1 のリテラル文字列の値を割り振られます。
  • item1.attr3 は、value1 の値を割り振られます。これは、文字列[item1.attr1]item1attr1 アトリビュートとして評価されるからです。

Note:文字列リテラルにおいて、バックスラッシュを使って、括弧からエスケープすることができます。

デフォルトアイテム

ArcScript では、デフォルトアイテムという、アイテムの層の中に黙示的で名付けられていないアイテムがあります。While you can use this item to write full scripts, best practice is to define your own explicit input and output items as needed.This makes scripts easier to read and reduces the risk of overwriting an existing attribute.単純なスクリプトの場合、次の2つのシナリオでデフォルトアイテムを使用すると、スクリプトを少し短く、書きやすくすることができます。

  • オペレーションの呼び出し:デフォルトアイテムは、ほかのアイテムが指定されていない場合に、スクリプトによって呼び出されたオペレーションに渡されるアイテムです。これはつまり、arc:set を使って、デフォルトの名付けられていないアイテムのアトリビュートを書いて、そのアトリビュートがスクリプト内の次のオペレーションのインプットとして渡されることを意味します。これは、オペレーションに必要なパラメータを提供する一つの方法です。
  • オペレーションまたはスクリプトのアウトプット内の現在のアイテムを処理:オペレーションの結果の変数名を指定しなかった場合、オペレーションを起動するarc:call ブロックの内部でデフォルトアイテムはオペレーションで生成された現在のアイテムを参照します。

次のスニペットで示すように、ArcScript のキーワードのアイテムアトリビュートを省略することでデフォルトアイテムを操作します:

<arc:set attr="path" value="." />

ビルトインアイテム

In addition to items declared in a script, several built-in items are available in the scope of a script.ビルトインアイテムは、HTTP リクエスト、レスポンスなどの一部にアクセスするインターフェースを提供します。These items are useful for mapping inputs in HTTP requests to operation inputs.

以下のセクションで、ビルドインアイテムについて説明します。

スクリプトインプット (_input)

スクリプトへのインプットは_input アイテムから参照されます。The _input item contains variables found in the URL query string and the POST data when the script is executed.もし、POST データに同じ名前の変数が存在する場合には、クエリ文字列の値を上書きします。

同様に、デフォルトアイテムに書き込んだアトリビュートは、スクリプトへのインプットとともにオペレーションのパラメータとして渡されます。Only variables defined in the info block or in the script are available in the _input item.

Note_input は、arc:call ブロック内のデフォルトアイテムではありません。アクセスが必要な場合は、名前で参照する必要があります。

スクリプトアウトプット (_out[n])

arc:call キーワードにより生成されたフィード内の現在のアイテムには、デフォルトアイテムもしくはビルトイン_outn アイテムを通じてアクセスできます。narc:call キーワードのネスティングのレベルです。例えば、単一のarc:call キーワードの内部の場合、アイテム名は_out1 です。arc:call キーワードの3つのネストレベルの内部の場合は、_out3です。

HTTP リクエスト (_request)

You can access variables passed into the URL query string, POSTed to the script, and other variables as collections of attributes in the _request item.アトリビュートの指定されたコレクションにアクセスするには、読みたいアトリビュートの接頭辞としてコレクションを使います。For example, [_request.qstring:name] reads the value of the variable “name” in the query string and [_request.form:name] reads the value of the variable “name” in the form data.

q[uery]string:* クエリ文字列パラメータにアクセス。
form:* フォームデータ内の変数の値にアクセス。
server:* サーバー変数の値にアクセス。
body リクエストのraw コンテンツ(ボディ)にアクセス。
bodybase64 リクエストのbase64エンコードされたコンテンツ(ボディ)にアクセス。
auth:* ユーザーの認証情報にアクセス。ユーザーが[_request.auth:isauthenticated] で認証されているかどうかを決定します。
other:* リクエストに関する他の情報にアクセス。[_request.other:applicationpath] でアプリケーションパスを取得します。

HTTP レスポンス (_response)

The _response item allows the script writer to write directly to the HTTP response.次のアトリビュートを設定できます。

cookie:* レスポンスにcookie をセットする。The name of the attribute is the name of the cookie prefixed by cookie: and the value of the attribute is the cookie value.
writefile レスポンスに指定されたパスの内容を書く。
redirect クライアントのブラウザにリダイレクトヘッダーを送る。これはブラウザを別のURL にリダイレクトするために使われます。
statuscode レスポンスのHTTP ステータスコードをセットする。
statusdescription レスポンスのHTTP ステータス説明をセットする。

HTTP ヘッダー (_httpheaders)

The _httpheaders item provides easy access to HTTP headers in scripts and templates.アイテムを読むことで、HTTP リクエストヘッダーを読むことができます。アイテムに書き込むことで、outgoing レスポンスヘッダーに対して書き込むことができます。必要な情報は、以下のようにしてライン付きのコンテンツタイプをセットすることができます。

<arc:set item="_httpheaders" attr="content-type" value="application/xml"/>

HTTP クッキー (_cookies)

Use the _cookies item to retrieve cookies in the request and set cookies in the response.複数のkey/value ペアのcookie はcookie のkey/value ペアに対応するアトリビュートのコレクションとして表されます。cookie 名は、それぞれのコレクションのアトリビュートで接頭されます。

ASP.NET セッション (_session)

ASP.NET セッション変数は、ArcScript では、_session アイテム経由で利用可能です。セッション内に保存されたオブジェクトは、このアイテムのアトリビュートとしてアクセスできます。アトリビュート名は、セッション内でオブジェクトを保存する際のキーとなります。

CData Arc Message (_message)

When a file passes through an Arc flow, the application adds metadata to the file. The resulting combination of the original file and application metadata is called a message.

The _message item provides access to the body and metadata of a message in scripting contexts (and in connector fields that can interpret scripting, such as the Subject field in the Email Send Connector).

メタデータ

The message metadata includes:

  • A unique Id (called a MessageId) that identifies the file regardless of any changes to the filename
  • Information about failures and successes during processing
  • Any custom metadata promoted programmatically in the flow

To access message metadata, use the header:* attribute of the _message item. For example, when an error occurs while processing a file in Arc, the x-trapped-errordescription header is added to the message that represents that file. This header stores information about the error that occurred, including the ConnectorId where the error occurred and debugging information about the error. The following syntax references this header within a scripting context:

[_message.header:x-trapped-errordescription]

ボディ

To access the body of a message, use the body attribute of the _message item, as shown below:

[_message.body]

This returns the body of the message as a string.

追跡されたヘッダーの追加

To add a 追跡されたヘッダー to a message, use the trackedheader attribute of the _message item, as shown below:

<arcset attr="outfile.FilePath" value="[FilePath]" />
<arc:set attr="outfile.trackedheader:myHeaderName" value="myValue" />
<arc:push item="outfile" />

カスタムヘッダーの追加

ファイルにカスタムヘッダーを追加するには、コネクタによってプッシュされるファイル項目のHeader:header_name 属性を設定します。わかりやすくするために、入力ファイルの未変更バージョンを出力としてプッシュするスクリプトから始めます。

<arc:set attr="outfile.FilePath" value="[FilePath]" />
<arc:push item="outfile" />

[FilePath] 変数は入力ファイルのフルパス(およびファイル名)に解決されるため、このスクリプトは出力ファイルを入力ファイルと同じにします。

このスクリプトに次の追加を行うと、ファイルをプッシュする前にカスタムヘッダーがファイルに追加されます。

<arc:set attr="outfile.FilePath" value="[FilePath]" />
<arc:set attr="outfile.Header:myHeaderName" value="myValue" />
<arc:push item="outfile" />
  • 設定 > 高度な設定ページの高度な設定セクションの追跡されたヘッダーフィールドに移動し、ヘッダー名を追加することで、ログでカスタムヘッダーを検索可能にすることができます。

Mapping Context (_map)

The _map item is available in the XML Map connector. Attributes set in the _map item are always available later in the mapping (in other words, these attributes are not cleared and the _map item is never out of scope).

The _map item is useful for storing information that is calculated at one point in the mapping and referenced later in the mapping. For example, a mapping involving an EDI document might need to count the number of Line Items in the document, then include this count value in a CTT segment at the end of the document. The Line Item count can be calculated and stored as an attribute of the _map item, then that attribute can be referenced in the CTT segment mapping.

アプリケーションログ (_log)

The _log item is a hook into the Arc Application Log. Setting the info attribute of this item to a string causes that string to appear in the Application Log. For example:

<arc:set attr="_log.info" value="this string appears in the Application Log when the script executes" />

You can set this attribute multiple times in the same script to log multiple messages to the Application Log. The attribute value does not need to be cleared or appended; setting the attribute value as shown in the previous example causes the specified value to be logged.

CData Arc Connector (_connector)

The _connector item provides access to the fields and properties of the current connector. The available properties are the same as the values stored in the port.cfg file in the connector’s folder, and should be accessed using the following syntax:

[_connector.propertyName]

Note: Using this item requires a scripting context in the connector. This is always available on the connector Events tab, and some connectors can also evaluate ArcScript in special configurable fields.