跳至主要内容

REFERENCE

開發者參考

認證、API、SDK、Flow Agent 處理節點與參數取值的完整參考。

Execute Script

跑一段自訂腳本,把回傳值接進流程。

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

  1. 基本用法​

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

  2. 配置參數​

    節點的屬性面板:

    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 類型。

  3. 在 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("、");
    })()
  4. 連接關係​

    Success​

    當腳本成功執行完成時,工作流程會從此連接點繼續執行。腳本執行的結果無法預測。

    Failure​

    當腳本執行發生錯誤時,工作流程會從此連接點繼續執行,並產生 prevError 變數儲存錯誤資訊。

  5. 一個實際的例子​

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

    欄位值
    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。

  6. 注意事項​

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

準備好開始了嗎?

想知道 Asgard 怎麼用在你的團隊?跟我們聊聊。

聯絡我們