跳轉到

程式碼

程式碼 (Code) 任務讓你直接在工作流程 (Workflow) 的執行環境中跑一段 Python 程式碼。和 Lambda 任務(呼叫外部 AWS 函式)不同,這個任務會在平台內部即時執行你貼上的程式碼,適合做小型資料轉換、計算衍生欄位或寫一段內建 Action 不好表達的處理邏輯。

這頁能幫你做什麼

  • 用一段 Python 程式碼即時處理、轉換上一步傳來的資料。
  • 計算總計、整理欄位、做條件判斷等小型邏輯,不必另外部署到 AWS。
  • 在正式抽成 Lambda 或自訂工具之前,快速試做原型。

開始前

需要會寫一小段 Python

這個任務要求你提供一個名為 handler 的 Python 函式。它接收一筆資料、處理後回傳結果。若不熟悉 Python、只想原樣傳遞或在傳遞時補欄位,可改用 Pass 任務

操作步驟

  1. 在工作流程編輯器中新增一個程式碼任務(如何新增請見 Action 使用指南)。

    程式碼任務設定面板

  2. 點選節點,右側開啟設定表單,停在「設定」分頁。

  3. 在「名稱」欄位為這個步驟取一個好辨識的名字。
  4. 在「執行環境」選擇要用「安全模式」還是「進階模式」(預設未選,見下方說明)。

    「執行環境」下拉選單的「安全模式」與「進階模式」選項

  5. 選定執行環境後,下方才會出現「程式碼」與「資料」欄位。在「程式碼」編輯器裡撰寫你的 handler 函式;也可點編輯器上的產生程式碼()按鈕,用文字描述讓系統協助產生。

    選定「安全模式」後出現「程式碼」「資料」欄位與產生程式碼鈕的狀態

  6. 視需要在「資料」欄位指定要傳進 handler 的輸入(可用 JSONPath 從上一步取值,路徑寫法見 JSONPath 語法)。

  7. 設定「下一個狀態」。
  8. 可用表單上方的測試按鈕()試跑,確認輸出符合預期。

完整欄位說明

設定分頁

欄位 必填 預設 說明
名稱 這個步驟在工作流程中的識別名稱,須在同一工作流程內唯一。詳見 Action 通用設定
執行環境 空白(未選) 選擇程式碼的執行模式。預設未選任何模式,需先選「安全模式」或「進階模式」,下方的「程式碼」「資料」欄位與產生程式碼鈕才會出現。兩者在功能、效能與安全性上不同,見下方「執行環境選項」。
程式碼 要執行的 Python 程式碼。必須定義一個名為 handler 的函式,由它接收輸入資料並回傳結果。相依欄位:先選定「執行環境」後才會出現。也可用編輯器上的產生程式碼()鈕,以文字描述讓系統協助產生。
資料 這步的輸入 要傳進 handler 處理的資料。可填固定 JSON,也可用 JSONPath 從工作流程輸入動態帶入。不填則使用這步收到的輸入。相依欄位:先選定「執行環境」後才會出現。
下一個狀態 這步完成後要前往的下一個步驟。詳見 Action 通用設定
附註 空白 給這個步驟的備註說明,不影響執行。

執行環境選項

「執行環境」下拉選單預設未選任何模式,有兩個選項可選:

選項 說明
安全模式 在受限制的 Python 沙箱中執行,僅允許基本語法與內建函式,禁止網路請求、系統指令與檔案存取等高風險操作。適合資料清洗、格式轉換等常見處理,執行較安全穩定,但功能受限。
進階模式 在完整的 Python 執行環境中執行,支援安裝與使用外部套件、進行網路請求、檔案系統操作等進階功能。適合需要高度客製化或整合外部資源的情境,但可能帶來安全風險與不穩定,請確認程式碼來源可信。

建議優先用「安全模式」

「進階模式」不會沙箱化你的程式碼。只有在程式碼完全可信、且安全模式缺少所需套件或功能時,才改用進階模式。

執行設定(摺疊區塊)

展開「設定」分頁底部的「執行設定」可看到下列共用欄位,完整說明見 Action 通用設定

欄位 必填 預設 說明
上傳輸出至外部記憶體 關閉 開啟後這步的輸出改存到外部記憶體,適合輸出資料量很大時使用。
在任務開始階段開啟即時輸出串流 關閉 開啟後,任務開始時把任務定義以串流方式即時送到執行頁面顯示。
在任務結束階段開啟即時輸出串流 關閉 開啟後,任務結束時把結果以串流方式即時送到執行頁面顯示。
錯誤時中止 開啟 開啟(預設)代表這步出錯時整個工作流程中止;關閉後改用下方「預設輸出」繼續往下走。
預設輸出 只在關閉「錯誤時中止」時出現,指定出錯時要改用的替代輸出值。

輸入與輸出、錯誤處理

切到「輸入與輸出」、「錯誤處理」分頁可調整資料流與重試/捕捉規則,皆為各 Action 共用設定,完整說明見 Action 通用設定

實際範例

把訂單明細加總,計算小計與品項數量。

  • 執行環境:安全模式
  • 資料$.order
  • 程式碼
def handler(data):
    items = data.get("items", [])
    subtotal = sum(i["price"] * i["quantity"] for i in items)
    return {
        "order_id": data["order_id"],
        "subtotal": subtotal,
        "item_count": sum(i["quantity"] for i in items),
    }

當這步收到:

{
  "order": {
    "order_id": "ord-123",
    "items": [
      {"price": 49.99, "quantity": 2},
      {"price": 19.99, "quantity": 1}
    ]
  }
}

handler 會回傳 order_idsubtotal(119.97)與 item_count(3),交給下一步使用。

下一步