运行代码
运行代码操作可执行 JavaScript。您可以将工作流中之前步骤的数据作为输入传递到运行代码操作,并将返回值用于后续步骤。
字段
运行代码操作包含以下字段。
字段 | 描述 |
---|---|
输入 | 必填。GraphQL 查询,可使用之前步骤的数据作为运行代码操作的输入。 |
输出 | 必填。操作返回的数据的表示形式,以 GraphQL 模式定义语言 (SDL) 进行定义。 |
代码 | 必填。运行代码操作将执行的 JavaScript。 |
输入数据
输入数据可传递自运行代码操作之前的步骤。若要包含此数据,您可以在输入字段中编写 GraphQL 查询。查询返回的数据将可用作被标记为 export default
的函数 的 input
参数,按约定称为 main
。
输入查询是用于 Flow 环境数据的查询,而不是对 Shopify Admin API 的查询。因此,您不可以在输入数据中插入 Shopify 查询。此外,Flow 还可处理查询中的 edges
和 nodes
,因此您无需向查询中添加这些或其他分页语法。
获取订单备注和订单项目标题的示例输入:
此数据将被转换为可在代码中使用的 input
变量:
还可在函数签名中析构输入:
元字段
若要访问 Run 代码中的单个元字段值,您必须先将元字段添加到 Flow 的环境数据中。此操作可以在 Run 代码外的任何操作或条件中完成。例如,您可以添加日志输出操作,然后按照说明添加元字段。
将元字段添加到工作流环境后,您可以在 Run 代码中访问它。例如,假设您添加了一个订单元字段,别名为 giftMessage
。然后,您可以在输入查询中访问它:
输出数据
运行代码操作可以返回自定义数据。若要定义代码将返回的数据类型,请使用输出字段和 GraphQL 的模式定义语言 (SDL)。受支持的输出类型包括 String
、Int
、Float
Boolean
和 ID
,这些类型遵循如何指定必填字段、列表和自定义数据的 SDL 规范。
例如,若要返回名为 giftMessage
的字符串和名为 totalGifts
数值,请使用:
这些注释是选填的,但将用于描述 Flow UI 中的数据。若要在 JavaScript 代码中输出此数据,请返回与该类型匹配的对象:
您还可以定义自定义类型以返回更复杂的数据。例如,要返回名为 Gift
的类型,并且该类型包含名为 message
的字符串和名为 amount
的数值,请使用:
若要在此操作后的步骤中访问此数据,请使用名为 Run code 的变量,系统将根据在运行代码操作配置中定义的 Output
架构来设置其类型。您可在条件和操作中使用此变量。
console.log
您可以使用 console.log
将数据输出到 Flow 的工作流运行日志,以便进行故障排除。输出将在工作流的“运行日志”中显示。例如,以下内容有效:
您不能在运行代码操作中使用 console.info
、console.error
或其他函数。
示例
可在 Flow 示例储存库中找到运行代码操作的示例。
限制
运行代码操作具有以下限制:
- “运行代码”操作支持 ECMA2020 JavaScript。它不支持 NodeJS 或 CommonJS API,或导入模块。
- 您的代码无法进行 http 调用 (
fetch
)。 - 不能使用随机和基于时钟的函数。日期数据(例如
scheduledAt
或createdAt
)可以作为输入传入。 - console.log 不会登录浏览器控制台。
- 您无法直接在 Run 代码操作中添加元字段别名。请查看元字段部分,了解如何完成此操作。
此外,还存在以下强制限制:
- 输入数据查询限制为 5000 个字符。
- 输出数据架构限制为 5000 个字符。
- 输出数据有效负载和 console.log 输出的合计大小限制为 50 kb。
- 代码不能超过 50000 个字符。
- 总执行时长限制为 5 秒。
- 内存用量限制为 10 MB。
路线图
Flow 团队计划逐步为运行代码操作添加功能。下表概述了计划的改进以及预计交付日期。
改进 | 描述 | 预计送达时间 |
---|---|---|
日志记录 | 使用 `console.log` 将数据输出到“运行”日志以进行故障排除。 | 已交付。 |
外部 API 调用 | 使用 JavaScript 的 fetch 来调用 API。 | 2025 年第 1 季度 |
模板
在新订单中添加免费(100% 折扣)商品
此模板会在新订单中添加免费折扣商品(如有库存)。它检查库存,应用 100% 折扣,并在不通知客户的情况下更新订单。此自动化有助于 (1) 通过在订单中添加免费惊喜商品来提高客户满意度,(2) 通过在订单中添加免费样品来推广新产品或不知名的产品,或者 (3) 通过自动包含免费商品并应用折扣来简化促销。查看模板
取消不活跃退货
自动取消在一定时间内未退款或 未重新入库的退货。查看模板
使用“运行代码”操作将带前缀的标签转换为产品元字段
此工作流会将以“color:”等前缀开头的标签添加到产品元字段列表中。它使用“运行代码”操作解析标签和元字段列表中的现有商品。此工作流在创建产品时运行,但也可以在现有产品上手动运行。查看模板
当客户订购多个产品多属性时发送通知
当客户订购同一产品的多个属性时,接收电子邮件通知。查看模板
在订单包含产品套装时发送通知
创建订单后会启动此工作流,并检查订单中任何产品是否作为产品套装的一部分购买。如果找到,系统会发送包含套装详细信息的内部电子邮件。此外,您还可以使用此工作流作为任何用例的起点,这些用例需要检测订单中是否存在套装。查看模板
使用关联的 UTM 宣传活动标记订单
向包含任何相关 UTM 宣传活动名称的订单添加标签。查看模板