執行程式碼

執行程式碼動作會執行 JavaScript。您可以將工作流程中先前步驟的資料當作輸入資料傳遞到執行程式碼動作,並傳回後續步驟要用的值。

欄位

執行程式碼動作包含以下欄位。

執行程式碼動作中使用的欄位。
欄位說明
輸入必填。此 GraphQL 查詢會使用先前步驟中的資料作為執行程式碼動作的輸入資料。
輸出必填。動作要傳回的資料表示形式,以 GraphQL 的結構描述定義語言 (SDL) 定義。
代碼必填。執行程式碼動作將執行的 JavaScript。

輸入資料

您可以從執行程式碼 (Run code) 動作之前發生的步驟傳遞輸入資料。若要納入這些資料,可以在「輸入」(Input) 欄位中撰寫 GraphQL 查詢。從查詢傳回的資料可用作具 export default 標記的函數的 input 引數,依慣例會稱為 main

輸入查詢是 Flow 環境資料的查詢,而不是對 Shopify Admin API 的查詢。因此,您無法在輸入資料中插入 Shopify 查詢。此外,Flow 也會處理查詢中的 edgesnodes,因此您不必在查詢中新增這些語法或其他分頁語法。

取得訂單備註和商品項目名稱的輸入範例:

{
  order {
    note
    lineItems {
      title
    }
  }
}

此資料會轉換為可在程式碼中使用的 input 變數:

export default function main(input) {
  // input.order.note
  // input.order.lineItems[0].title
}

輸入資料也可以在函數簽章中解構:

export default function main({order}) {
  // order.note
  // order.lineItems[0].title
}

中繼欄位

如要存取執行程式碼 (Run code) 中的單一中繼欄位值,您必須先將中繼欄位新增至 Flow 的環境資料中。您可以在執行程式碼 (Run code) 以外的任何動作或條件下完成此操作。例如,您可以新增「記錄輸出」(Log output) 動作,然後按照說明新增中繼欄位

將中繼欄位新增至工作流程環境後,您就可以在執行程式碼 (Run code) 中存取該中繼欄位。例如,假設您新增了一個別名為 giftMessage 的「訂單」(Order) 中繼欄位。接著就可以在輸入查詢中存取該中繼欄位:

{
  order {
    giftMessage {
      value
    }
  }
}

輸出資料

執行程式碼」(Run code) 動作可傳回自訂資料。若要定義程式碼將傳回的資料類型,請使用「輸出」(Output) 欄位和 GraphQL 的結構描述定義語言 (SDL)。支援的輸出類型包含 StringIntFloatBooleanID,這些類型符合 SDL 規範中有關指定必填欄位、清單和自訂資料的規定。

例如,若要傳回名為 giftMessage 的字串和名為 totalGifts 的數字:

type Output {
  "The message to include in the gift"
  giftMessage: String!
  "The total number of gifts"
  totalGifts: Int!
}

備註並非必要,但可用於描述 Flow UI 中的資料。若要在 JavaScript 程式碼中輸出此資料,請傳回與類型相符的物件:

export default function main(input) {
  // your code
  return {
    giftMessage: 'Hello',
    totalGifts: 1,
  };
}

您也可以定義自訂類型以傳回更複雜的資料。例如:傳回名為 Gift 的類型,其中包含名為 message 的字串和名為 amount 的數字:

type Output {
  "The gift to send"
  gifts: [Gift!]!
}

type Gift {
  "The message to include in the gift"
  message: String!
  "The total number of gifts"
  amount: Int!
}

若要在此動作之後的步驟中存取此資料,請使用名為 Run code 的變數,該變數將根據您在執行程式碼動作設定中定義的 Output 結構描述鍵入。您可以在條件和動作中同時使用此變數。

Console.log

您可以使用 console.log 將資料輸出到 Flow 工作流程執行記錄,以進行疑難排解。輸出內容會顯示在工作流程的執行記錄中。例如,以下為有效內容:

export default function main(input) {
  console.log('Hello, world!');
  //Hello, world!
  console.log(input);
  // { order: { note: 'Hello', lineItems: [{ title: 'World' }] } }
  console.log(input.order, "is the order");
  // { note: 'Hello', lineItems: [{ title: 'World' }] }
  // is the order

  return {
    giftMessage: 'Hello',
    totalGifts: 1,
  };
}

您無法在「執行程式碼」(Run code) 動作中使用 console.infoconsole.error 或其他函數。

範例

如需執行程式碼動作的範例,請參見 Flow 範例資源庫

限制

執行程式碼動作具有以下限制:

  • 「執行程式碼」(Run code) 動作支援 ECMA2020 JavaScript,但不支援 NodeJS 或 CommonJS API,也不支援匯入模組。
  • 程式碼無法執行 HTTP 呼叫 (fetch)。
  • 無法使用隨機和時鐘型函數。日期資料 (例如 scheduledAtcreatedAt 資料) 可以作為輸入傳入。
  • Console.log 不會記錄到瀏覽器主控台。
  • 您無法直接在執行程式碼動作 (Run code) 中新增中繼欄位別名。請查看中繼欄位區段,瞭解如何完成此操作。

此外,系統會強制執行以下限制:

  • 輸入資料查詢上限為 5000 個字元。
  • 輸出資料結構描述上限為 5000 個字元。
  • 輸出資料酬載和 Console.log 輸出內容的總大小上限為 50 KB。
  • 程式碼不能超過 50000 個字元。
  • 總執行時間上限為 5 秒。
  • 記憶體使用量上限為 10 MB。

藍圖

Flow 團隊計劃逐步為執行程式碼動作新增功能。下表列出規劃的改善項目和預計完成日期。

執行程式碼動作的功能改善藍圖
改善說明預計完成日期
記錄使用「console.log」將資料輸出到執行記錄以進行疑難排解。已完成。
外部 API 呼叫使用 JavaScript 的 fetch 呼叫 API。2025 年第 1 季

意見回饋

執行程式碼動作是 Shopify Flow 新的步驟類型。如有意見回饋和相關疑問,請在這則 Flow 社群貼文留言。

沒有找到您需要的答案嗎?我們很樂意為您提供協助。