运行代码

运行代码操作可执行 JavaScript。您可以将工作流中之前步骤的数据作为输入传递到运行代码操作,并将返回值用于后续步骤。

字段

运行代码操作包含以下字段。

“运行代码”操作中使用的字段。
字段 描述
输入 必填。GraphQL 查询,可使用之前步骤的数据作为运行代码操作的输入。
输出 必填。操作返回的数据的表示形式,以 GraphQL 模式定义语言 (SDL) 进行定义。
代码 必填。运行代码操作将执行的 JavaScript。

输入数据

输入数据可传递自运行代码操作之前的步骤。若要包含此数据,您可以在输入字段中编写 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,
  };
}

您不能在运行代码操作中使用 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 年第 3 季度

反馈

“运行代码”操作是 Shopify Flow 中的一种新步骤。如果您有反馈和疑问,请对此 Flow 社区文章发表评论。

准备好开始使用 Shopify 进行销售了吗?

免费试用