Shopify Flow 中的條件

條件會在符合特定規則時繼續執行工作流程,例如 if-then 陳述式的開頭。設定條件時,您要從 GraphQL Admin API 中的欄位選取準則 (例如 product.title)、選取一個 邏輯運算子 (例如 等於),以及要比對的值 (例如 Blue jeans)。工作流程在評估條件時,Flow 會將您在工作流程中定義的值與商店回傳的值比對,並在 工作流程執行 中顯示結果。若要更清楚瞭解可用來定義條件的欄位與值,請參閱如何 預覽商店資料

深入瞭解 條件的基本概念

Flow 使用的資料型別

設定條件時,您要從 Admin API 中的可用欄位選取準則,Flow 會依據商店回傳的值進行評估。

Flow 支援下列資料型別:

  • 浮點數:浮點數是帶小數點的數字。例如,4.25。
  • 整數:整數是不含小數位的整數字。例如,42。
  • 日期:日期值是以數字表示的日期。例如,01012021。
  • 字串:字串值是文字。使用字串值進行比較時不區分大小寫。
  • 布林值:布林值為 true 或 false。
  • 列舉:列舉值是一組資料,讓變數可以使用預先定義的一組常數。

邏輯運算子

邏輯運算子用來決定條件的套用方式。條件可檢查簡單的屬性,例如訂單總額是否高於某一金額,或顧客是否接受行銷。邏輯運算子也可用於檢查更複雜的屬性。

運算子可以是 欄位層級運算子,例如 等於不等於;也可以是 清單運算子,例如 至少其中一項不屬於以下任何一項

欄位層級運算子

欄位層級運算子用於比較兩個值。Flow 可使用下列運算子:

Shopify 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 的值與 pineappleguavakiwi 進行比較。

若商品項目的產品名稱為 guava,此條件即成立 (為 true),因為「guava」包含在您提供的清單中。
不屬於以下任何一項 檢查該欄位是否不等於清單中的任何值。 系統會將 order.lineitem.product.title 的值與 pineappleguavakiwi 進行比較。

若商品項目的產品名稱為 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 或空值運算子

Shopify Flow 條件中的 Null 與空值運算子清單。
運算子說明True/False 條件
為空或不存在檢查欄位是否為空(沒有值)或不存在(為 null)。 若欄位為空或為 null,則傳回 true;若欄位存在,則傳回 false
不為空且存在檢查欄位是否存在,且不是空值,也不是 null 若欄位存在且不為空,則傳回 true;若為空,則傳回 false

清單運算子

清單運算子會與欄位層級運算子搭配使用,可用來檢查清單中資料的條件。

就像「至少一個」範例,您可能想檢查訂單是否包含具有特定標籤的特定商品(位於 order.lineItems,標籤清單位於 order.lineItems.product.tags)。這兩種情況皆使用 至少一個符合 清單運算子。

Flow 提供 3 種清單運算子:至少一個符合皆不符合全部符合

Shopify Flow 條件中的清單運算子一覽表。
運算子說明使用範例
至少其中一項檢查清單中是否有任何品項符合指定的條件。

如果清單中有任何品項符合條件,則傳回 true。如果清單為空或沒有符合條件的品項,則傳回 false
可使用 At least one of order line items.product.tags is equal to 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
使用 All of order line items have a product.vendor equal to Acme 檢查訂單中所有項目的商品廠商是否都為 Acme

條件順序

您可以建立包含多個條件的工作流程,每個條件都可能導致不同的動作。條件的順序很重要。系統會從工作流程的開頭開始檢查條件,依序逐一檢查,遇到符合的條件便會停止。

下列範例使用多個條件,根據顧客在商店的累計消費金額,檢查是否符合忠實顧客計畫資格。系統會依顯示順序檢查條件:

  1. 若總價高於 $1,000,且顧客同意接收行銷資訊,則將其加上 Gold 標籤。
  2. 若總價低於 $1,000 但高於 $500,且顧客同意接收行銷資訊,則將其加上 Silver 標籤。
  3. 若總價低於 $500 但高於 $200,且顧客同意接收行銷資訊,則將其加上 Bronze 標籤。

檢查顧客總消費金額並新增標籤的工作流程範例

在單一條件中組合多項準則

建立條件時,您可以設定多項準則,並選擇如何組合這些準則,以判斷整體條件為真或為假。

若所有準則皆符合

選取 AND 時,只有在您設定的每項準則都為真,才會得到 true 的結果。

例如,您建立一個工作流程,為所在地在加拿大且單筆訂單消費超過 $500 的顧客加上標籤。

使用 AND 條件的工作流程範例

只有當顧客位於加拿大,且該筆訂單消費金額超過 500 美元時,工作流程才會標記該顧客。若其中任一條件不成立,則不會標記顧客。

符合任一條件時

選取 OR 時,只要您設定的任一條件為真,結果即為真。

例如,您可建立工作流程,將「風險建議」為 取消調查 的訂單加上標籤。只要其中一個條件成立,就會標記該訂單。

使用 OR 條件的工作流程範例

條件中的靜態與動態資料

一般而言,條件中的第二個值是靜態、手動輸入的值 (例如 product.title == "your title")。每次工作流程執行時,此值都維持不變。

如果第二個值的欄位顯示 Edit code 圖示,您也可以使用動態值。動態值會在每次工作流程執行時,從您的商店資料擷取。若要使用動態值,請按一下 Edit code 圖示,然後選取您要比對的值。並非所有欄位都支援動態值。

例如,您可以建立一個工作流程,若訂單的帳單地址中的國家/地區與其運送地址中的國家/地區相同,便會標記該訂單。

使用右側資料檢查顧客的帳單與運送國家/地區是否相同,並標記訂單的工作流程範例。

在此範例中,第一個與第二個值都來自您的商店資料,而不是為第二個值手動指定用來比對的靜態字串。若顧客提供的帳單地址中的國家/地區與其提供的運送地址中的國家/地區相同,條件即為真,並會標記該訂單。

有時您可能需要使用型別不正確的動態資料。例如,您可能需要將以字串儲存的數字與另一個數字比較。此時,您可以使用 Run code 選項,將資料轉換為正確的型別。

範本

template library 中的大多數範本都包含條件。

條件範例

檢查清單中是否至少有一個項目符合某條件

此範例示範一個典型條件,用於檢查清單中是否至少有一個項目等於某個值。

在此案例中,條件會檢查訂單中的某個商品是否具有 presale 標籤。若要建立此條件,請選擇 order / lineItems / product / tags。預設情況下,Flow 會將邏輯運算子設為 至少其中一項符合

條件設定面板範例,顯示檢查是否至少有一個產品標籤的設定。

至少其中一項符合」部分屬於 list operators,用於處理跨多個清單項目的比對。「等於」部分則是 field-level operator,用來判斷單一清單項目是否符合。

檢查清單中是否沒有任何項目符合某條件

此範例示範一個典型條件,用於檢查清單中是否沒有任何項目等於某個值。常見的情況是清單可能為空。清單為空時,條件會由清單運算子處理 (此例為 皆不符合)。

此處會檢查是否沒有任何產品標籤等於 foo

條件設定面板範例,顯示檢查產品標籤「皆不符合」的設定。

若 (1) 沒有任何產品標籤,或 (2) 沒有任何標籤是 foo,此條件將傳回 true;否則將傳回 false

檢查清單中的某項是否同時符合多個條件

此範例示範一個典型條件,用於檢查清單中是否至少有一個項目同時符合兩個獨立條件。

此處會檢查訂單中的某個商品是否同時具有 presale 標籤,且其 productType 為 clothing

條件設定面板範例,顯示檢查是否至少具有一個產品標籤與 productType 的設定。

若要建置此條件,請:

  1. 針對第一個條件,選取 order / lineItems / product / tags
  2. lineItems 清單中,選取 Add criteria for same item。注意:此處選錯清單項目是常見錯誤。
  3. 將最上層物件選取為 lineItems_item,接著針對第二個條件選取 product / productType`。注意:此處選錯物件也是常見錯誤。
  4. 選取 AND,將兩個條件組合起來。
  5. 在兩個條件中分別輸入 presaleclothing