執行程式碼

執行程式碼動作會執行 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
}

輸出資料

執行程式碼動作可以傳回自訂資料。若要定義程式碼將傳回的資料類型,請使用「輸出」欄位和 GraphQL 的結構描述定義語言 (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 範例資源庫

限制

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

  • 程式碼無法匯入模組。
  • 程式碼無法執行 HTTP 呼叫 (fetch)。
  • 無法使用隨機和時鐘型函數。日期資料 (例如 scheduledAtcreatedAt 資料) 可以作為輸入傳入。
  • Console.log 不會記錄到瀏覽器主控台。

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

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

藍圖

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

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

意見回饋

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

準備好開始透過 Shopify 銷售商品了嗎?

免費試用