メインコンテンツまでスキップ
カスタムスクリプトを実行し、戻り値をフローに取り込みます。

Execute Script

Execute Script は独自の JavaScript を実行するプロセッサーです。

基本的な使い方​

Execute Script は、指定した JavaScript 実行環境で設定されたスクリプトを実行します。

設定項目​

ノードのプロパティパネルです。

Execute Script のプロパティパネル。Engine と Script の 2 つが必須

Name​

キャンバス上に表示される名前です。ワークフロー内でこのプロセッサーを識別するために使います。

Description​

このプロセッサーの用途を補足し、ワークフローの読みやすさを高めます。

Properties​

Engine(必須)​

JavaScript の実行エンジンです。現在は ECMA5 のみ対応しています。

Script(必須)​

実行する JavaScript です。

データへのアクセス

Execute Script は payload という名前のグローバルオブジェクトを提供し、ワークフロー内のすべてのデータにアクセスできます。

  • 現在のワークフローの payload データ
  • prevMessage、prevPayload などの組み込み変数

データの読み取り

ワークフローに次のデータがあるとします。

{
"user": {
"name": "Alice",
"email": "zhang@example.com"
}
}

スクリプトからはこう読みます。

// "Alice"
const userName = payload.user.name

// "zhang@example.com"
const userEmail = payload.user.email

データの変更

payload を変更することもでき、その変更は後続のプロセッサーへ引き継がれます。

// 既存のデータを変更する
payload.user.name = "Bob"

// データを追加する
payload.processedAt = new Date().toISOString()
payload.status = "completed"

組み込み変数へのアクセス

Asgard の組み込み変数は payload を通して参照できます。

// ユーザーの最後のメッセージ
const lastMessage = payload.prevMessage

// 直前のプロセッサーの payload
const previousData = payload.prevPayload

// 入れ子になったデータ
const specificValue = payload.prevPayload.someProperty

制限事項

Execute Script の中では Asgard の組み込み関数(history()、vecToStr() など)を直接使えません。必要な場合は他のプロセッサーを利用してください。

Workflow CRD での設定​

- name: proc-transform
type: execute-script
labels:
display_name: 検索結果の整形
configs:
- name: engine
value: javascript
- name: script
expression: |-
(() => {
return rows.map(r => r.name).join("、");
})()

接続関係​

Success​

スクリプトが完了すると、この接続点から次へ進みます。スクリプトの実行結果は事前には予測できません。

Failure​

スクリプトでエラーが起きた場合、この接続点から続き、prevError 変数にエラー情報が入ります。

実際の例​

前のステップで取得した配列を 1 文にまとめます。

項目値
EngineECMA5
Script下記
var names = [];
for (var i = 0; i < low_stock.length; i++) {
names.push(low_stock[i].sku_name);
}
return names.join('、');

const や map ではなく var と for を使っているのは、エンジンが ECMA5 だからです。

注意事項​

  • Engine の有効な値は ECMA5 の 1 つだけで、実体は goja です。ほかを入れると Unknown script engine になります。
  • ECMA5 なので ES6 以降の構文は使えません(アロー関数、let/const、テンプレートリテラル)。