跳至主要内容
跑一段自訂腳本,把回傳值接進流程。

Execute Script

Execute Script 是用於執行自定義 JavaScript 程式碼的 processor。

基本用法​

執行 Execute Script 時,會在指定的 JavaScript 執行環境中執行設定的腳本程式碼。

配置參數​

節點的屬性面板:

Execute Script 的屬性面板:Engine 與 Script 兩個必填欄位

Name​

顯示在畫布上的名稱,用於在工作流程中識別此 processor。

Description​

用於補充此 processor 的用途,提升工作流程的可讀性。

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 資料,這些變更會傳遞到後續的 processor:

// 修改現有資料
payload.user.name = "Bob"

// 新增資料
payload.processedAt = new Date().toISOString()
payload.status = "completed"

存取內建變數

您可以透過 payload 存取 Asgard 的內建變數:

// 取得使用者的最後一則訊息
const lastMessage = payload.prevMessage

// 取得前一個 processor 的 payload
const previousData = payload.prevPayload

// 存取巢狀資料
const specificValue = payload.prevPayload.someProperty

使用限制

在 Execute Script 中,您無法直接使用 Asgard 的內建函數(如 history()、vecToStr() 等)。如需使用這些功能,請考慮使用其他 processor 類型。

在 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 變數儲存錯誤資訊。

一個實際的例子​

把前一步查到的陣列整理成一句話。

欄位值
EngineECMA5
Script下面那段
var names = [];
for (var i = 0; i < low_stock.length; i++) {
names.push(low_stock[i].sku_name);
}
return names.join('、');

寫成 var 和 for 而不是 const 和 map,是因為引擎是 ECMA5。

注意事項​

  • Engine 目前只有一個有效值 ECMA5,底層跑的是 goja。填其他值會得到 Unknown script engine。
  • 因為是 ECMA5,ES6 之後的語法(箭頭函式、let/const、樣板字串)不能用。