Shopify Flow 中的条件
当满足某些规则(例如 if-then 语句的开头)时,条件会让工作流继续运行。设置条件时,您需要从 GraphQL Admin API 的字段中选择标准(例如 product.title)、一个逻辑运算符(例如 equal to)以及一个要检查的值(例如 Blue jeans)。当工作流评估条件时,Flow 会将工作流中定义的值与为您的商店返回的值进行核对,然后在工作流运行中显示结果。若要更好地了解可用于定义条件的字段和值,请学习如何预览商店数据。
详细了解条件的基础知识。
Flow 使用的数据类型
设置条件时,您需要从 Admin API 中可用的字段中选择标准,Flow 会根据为您的商店返回的值进行评估。
Flow 支持以下几种数据:
- 浮点数:浮点数值是带小数的数字。例如 4.25。
- 整数:整数值是不带小数的整数。例如 42。
- 日期:日期值是日期的数字表示形式。例如 01012021。
- 字符串:字符串值为文本。使用字符串值进行比较时不区分大小写。
- 布尔值:布尔值可以是 true 或 false。
- 枚举:枚举值是允许变量成为一组预定义常量的数据集。
逻辑运算符
逻辑运算符定义条件的应用方式。条件可以检查简单的属性,例如订单总额是否高于特定金额,或者客户是否接受营销。逻辑运算符还可以检查更复杂的属性。
运算符可以是字段级运算符(例如等于或不等于),也可以是列表运算符(例如至少一个或无)。
字段级运算符
字段级运算符用于比较 2 个值。Flow 可以使用以下运算符:
| 运算符 | 描述 | 示例 |
|---|---|---|
| 等于 | 比较值以检查它们是否相同。 |
系统将从您的商店数据中检索 order.currentTotalDiscountsSet.shopMoney.amount 的值,并将其与第二个值 (50) 进行比较。如果订单的总折扣金额完全等于 50,则条件为 true。 |
| 不等于 | 比较值以检查它们是否不相同。 |
系统将从您的商店数据中检索 order.currentTotalDiscountsSet.shopMoney.amount 的值,并将其与第二个值 (50) 进行比较。如果订单的总折扣金额不等于 50,则条件为 true。 |
| 大于和大于或等于 | 比较值以检查第一个值是否大于或大于等于第二个值。 |
系统将从您的商店数据中检索 order.currentTotalDiscountsSet.shopMoney.amount 的值,并将其与第二个值 (50) 进行比较。如果订单的总折扣金额为 137,则条件为 true,因为 137 大于 50。 |
| 小于和小于或等于 | 比较值以检查第一个值是否小于或小于等于第二个值。 |
系统将从您的商店数据中检索 order.currentTotalDiscountsSet.shopMoney.amount 的值,并将其与第二个值 (50) 进行比较。如果订单的总折扣金额为 47,则条件为 true,因为 47 小于或等于 50。 |
| 至少一个 | 检查字段是否等于所提供列表中的任何值。必须单独输入值,然后按 Enter 键(类似于标记)。对空数组使用此运算符会导致评估结果为 false。 |
order.lineitem.product.title 的值将与以下项进行比较:pineapple、guava、kiwi。如果订单项目产品标题为 guava,则条件为 true,因为“guava”包含在您提供的列表中。 |
| 均不为 | 检查字段是否不等于所提供列表中的任何值。 |
order.lineitem.product.title 的值将与以下项进行比较:pineapple、guava、kiwi。如果订单项目产品标题为 raspberry,则条件为 true,因为“raspberry”未包含在您提供的列表中。 |
| 包括 | 比较值以检查第一个输入值是否包含第二个输入值中的数据。 |
order.lineitem.product.title 的值将与以下项进行比较:berry。如果订单项目产品标题为 strawberry,则条件为 true,因为“berry”包含在“strawberry”中。 |
| 不包括 | 比较值以检查第一个输入值是否不包含第二个输入值中的数据。 |
order.lineitem.product.title 的值将与以下内容进行比较:berry。如果订单项目产品标题为 apple,则该条件为 true,因为“apple”不包含“berry”。 |
| 开头为 | 比较两个值,以检查第一个值是否以第二个值开头。 |
order.shippingAddress.country 的值将与以下内容进行比较:United。如果订单收货地址所在国家/地区为 United Kingdom,则该条件为 true,因为“United Kingdom”以“United”开头。 |
| 开头不为 | 比较两个值,以检查第一个值是否不以第二个值开头。 |
order.shippingAddress.country 的值将与以下内容进行比较:United。如果订单收货地址所在国家/地区为 Canada,则该条件为 true,因为“United Kingdom”不以“Canada”开头。 |
| 结尾为 | 比较两个值,以检查第一个值是否以第二个值结尾。 |
order.lineitems.product.title 的值将与以下内容进行比较:pie。如果订单项目产品标题为 key lime pie,则该条件为 true,因为“key lime pie”以“pie”结尾。 |
| 结尾不为 | 比较两个值,以检查第一个值是否不以第二个值结尾。 |
order.lineitems.product.title 的值将与以下内容进行比较:pie。如果订单项目产品标题为 chocolate cake,则该条件为 true,因为“chocolate cake”不以“pie”结尾。 |
Null 或空运算符
| 运算符 | 描述 | True/False 条件 |
|---|---|---|
| 为空或不存在 | 检查字段是否为空(没有值)或不存在(为 null)。 |
当字段为空或为 null 时返回 true,如果字段存在则返回 false。
|
| 不为空且存在 | 检查字段是否存在并且不为空或不为 null。 | 当字段不为空且存在时返回 true,当字段为空时返回 false。 |
列表运算符
列表运算符与字段级运算符结合使用,可让您检查列表中包含的数据的条件。
与“至少一项满足”示例一样,您可能希望检查某个订单是否包含带特定产品标签的特定产品(产品位于 order.lineItems 中,而产品标签是 order.lineItems.product.tags 下的一个列表)。在这两种情况下,该示例都使用了至少一项满足列表运算符。
Flow 提供了 3 个用于处理列表的运算符:至少一项满足、没有任何项满足和所有项都满足。
| 运算符 | 描述 | 用法示例 |
|---|---|---|
| 至少一个 | 检查列表中的任何项是否符合指定条件。 如果列表中的任何项符合条件,则返回 true。如果列表为空或没有符合条件的项,则返回 false。 | 使用 至少一项订单项目的产品标签等于 tagname 来检查订单是否包含具有特定产品标签的产品。 |
| 没有任何项满足 | 检查列表中是否没有任何项符合指定条件。 如果没有任何项符合条件,则返回 true。如果列表为空,则返回 true。 | 使用 None of product tags is equal to presale 检查产品是否没有 presale 标签。常见的错误是尝试使用 is not equal to 来否定运算符。使用这种双重否定形式( None of product tags is not equal to presale)会导致条件既难以理解又无效。
|
| 所有项都满足 | 检查列表中的所有项是否都符合指定条件。 如果列表中的每一项都符合条件,则返回 true。 | 使用 所有订单项目的产品厂商都等于 Acme 来检查一个订单中的所有订单项目是否都具有名为 Acme 的特定产品厂商。 |
条件排序
您可以创建具有多个条件的工作流,每个条件都可能导致不同的操作。条件的顺序很重要。系统会从工作流的开头开始依次检查每个条件。当某个条件得到满足时,检查就会停止。
此示例使用多个条件来根据客户在商店中的总消费金额检查其是否有资格参与忠诚计划。系统将按条件的显示顺序检查这些条件:
- 如果总价格大于 1000 美元且客户同意接受营销,则为他们添加
Gold标签。 - 如果总价格小于 1000 美元但大于 500 美元,且客户同意接受营销,则为他们添加
Silver标签。 - 如果总价格小于 500 美元但大于 200 美元,且客户同意接受营销,则为他们添加
Bronze标签。

在单个条件中组合多个标准
在构建条件时,您可以设置多个标准。您可以选择如何组合这些单独的标准,以确定整个条件是 true 还是 false。
如果满足所有标准
仅当您设置的每个标准都为 true 时,选择 AND 才会得到 true 的结果。
例如,您创建了一个工作流,用于为位于加拿大且单笔订单消费超过 500 美元的客户添加标签。

仅当客户位于加拿大且其订单消费金额超过 500 美元时,该工作流才会为客户添加标签。如果任一条件不满足,则不会为该客户添加标签。
如果满足任一条件
选择 OR 时,只要您设置的条件中有一个为 true,结果即为 true。
例如,您创建了一个工作流,用于为风险建议为取消或调查的订单添加标签。只要满足其中一个条件,系统就会为该订单添加标签。

条件中的静态和动态数据
通常,条件中的第二个值是手动输入的静态值(例如 product.title == "your title")。每次工作流运行时,此值都保持不变。
如果第二个值的字段显示图标,您也可以使用动态值。每次工作流运行时,动态值都会从您的商店数据中提取。若要使用动态值,请点击
图标,然后选择要用于对照检查的值。并非所有字段都提供动态值。
例如,您创建了一个工作流,如果订单账单地址中的国家/地区与其收货地址中的国家/地区相匹配,该工作流便会为订单添加标签。

在此示例中,第一个值和第二个值都从您商店的数据中提取,而不是为第二个值手动指定一个静态字符串来进行对照检查。如果客户提供的账单地址中的国家/地区与客户在收货地址中提供的国家/地区相同,那么条件为 true,并且系统会为该订单添加标签。
您可能偶尔需要使用类型错误的动态数据。例如,您可能需要将以字符串形式存储的数字与另一个数字进行比较。在这种情况下,您可以使用 运行代码 选项将数据转换为正确的类型。
模板
模板库中的大多数模板都包含条件。
条件示例
检查列表中的至少一个项目是否满足条件
此示例显示了一个典型条件,用于检查列表中的至少一个项目是否与特定值匹配。
在此示例中,该条件检查订单中的某个产品是否具有 presale 标签。若要构建此条件,您应选择 order / lineItems / product / tags。默认情况下,Flow 会选择至少一个作为逻辑运算符:

至少一个部分是列表运算符,用于处理多个列表项目之间的匹配。等于部分是字段级运算符,用于确定单个列表项目是否匹配。
检查列表中的项目是否均不满足条件
此示例显示了一个典型条件,用于检查列表中的所有项目是否都不与特定值匹配。需要考虑的一个常见问题是列表可能为空。当列表为空时,条件将由列表运算符(在本例中为全都不)处理。
在此示例中,该条件检查是否没有任何产品标签等于 foo:

在以下情况下,该条件将返回 true:(1) 没有任何产品标签;或 (2) 没有任何标签是 foo。否则,它将返回 false。
检查列表中的某个项目是否满足多个条件
此示例显示了一个典型条件,用于检查列表中的至少一个项目是否满足两个单独的条件。
在此示例中,该条件检查订单中的某个产品是否具有 presale 标签,以及其 productType 是否为 clothing。

若要构建此条件,您应执行以下操作:
- 为第一个条件选择 order / lineItems / product / tags。
- 在 lineItems 列表中,选择为同一项目添加条件。备注:在此处选择错误的列表项目是常见错误。
- 选择 lineItems_item 作为顶层对象,然后为第二个条件选择 product / productType。备注:在此处选择错误的对象也是常见错误。
- 选择 AND 以合并这两个条件。
- 为这两个条件输入值
presale和clothing。