Shopify Flow 中的條件
條件會在符合特定規則時繼續執行工作流程,例如 if-then 陳述式的開頭。設定條件時,您要從 GraphQL Admin API 中的欄位選取準則 (例如 product.title)、選取一個 邏輯運算子 (例如 等於),以及要比對的值 (例如 Blue jeans)。工作流程在評估條件時,Flow 會將您在工作流程中定義的值與商店回傳的值比對,並在 工作流程執行 中顯示結果。若要更清楚瞭解可用來定義條件的欄位與值,請參閱如何 預覽商店資料。
深入瞭解 條件的基本概念。
Flow 使用的資料型別
設定條件時,您要從 Admin API 中的可用欄位選取準則,Flow 會依據商店回傳的值進行評估。
Flow 支援下列資料型別:
- 浮點數:浮點數是帶小數點的數字。例如,4.25。
- 整數:整數是不含小數位的整數字。例如,42。
- 日期:日期值是以數字表示的日期。例如,01012021。
- 字串:字串值是文字。使用字串值進行比較時不區分大小寫。
- 布林值:布林值為 true 或 false。
- 列舉:列舉值是一組資料,讓變數可以使用預先定義的一組常數。
邏輯運算子
邏輯運算子用來決定條件的套用方式。條件可檢查簡單的屬性,例如訂單總額是否高於某一金額,或顧客是否接受行銷。邏輯運算子也可用於檢查更複雜的屬性。
運算子可以是 欄位層級運算子,例如 等於 或 不等於;也可以是 清單運算子,例如 至少其中一項 或 不屬於以下任何一項。
欄位層級運算子
欄位層級運算子用於比較兩個值。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。 | 可使用 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,000,且顧客同意接收行銷資訊,則將其加上
Gold標籤。 - 若總價低於 $1,000 但高於 $500,且顧客同意接收行銷資訊,則將其加上
Silver標籤。 - 若總價低於 $500 但高於 $200,且顧客同意接收行銷資訊,則將其加上
Bronze標籤。

在單一條件中組合多項準則
建立條件時,您可以設定多項準則,並選擇如何組合這些準則,以判斷整體條件為真或為假。
若所有準則皆符合
選取 AND 時,只有在您設定的每項準則都為真,才會得到 true 的結果。
例如,您建立一個工作流程,為所在地在加拿大且單筆訂單消費超過 $500 的顧客加上標籤。

只有當顧客位於加拿大,且該筆訂單消費金額超過 500 美元時,工作流程才會標記該顧客。若其中任一條件不成立,則不會標記顧客。
符合任一條件時
選取 OR 時,只要您設定的任一條件為真,結果即為真。
例如,您可建立工作流程,將「風險建議」為 取消 或 調查 的訂單加上標籤。只要其中一個條件成立,就會標記該訂單。

條件中的靜態與動態資料
一般而言,條件中的第二個值是靜態、手動輸入的值 (例如 product.title == "your title")。每次工作流程執行時,此值都維持不變。
如果第二個值的欄位顯示 圖示,您也可以使用動態值。動態值會在每次工作流程執行時,從您的商店資料擷取。若要使用動態值,請按一下
圖示,然後選取您要比對的值。並非所有欄位都支援動態值。
例如,您可以建立一個工作流程,若訂單的帳單地址中的國家/地區與其運送地址中的國家/地區相同,便會標記該訂單。

在此範例中,第一個與第二個值都來自您的商店資料,而不是為第二個值手動指定用來比對的靜態字串。若顧客提供的帳單地址中的國家/地區與其提供的運送地址中的國家/地區相同,條件即為真,並會標記該訂單。
有時您可能需要使用型別不正確的動態資料。例如,您可能需要將以字串儲存的數字與另一個數字比較。此時,您可以使用 Run code 選項,將資料轉換為正確的型別。
範本
在 template library 中的大多數範本都包含條件。
條件範例
檢查清單中是否至少有一個項目符合某條件
此範例示範一個典型條件,用於檢查清單中是否至少有一個項目等於某個值。
在此案例中,條件會檢查訂單中的某個商品是否具有 presale 標籤。若要建立此條件,請選擇 order / lineItems / product / tags。預設情況下,Flow 會將邏輯運算子設為 至少其中一項符合:

「至少其中一項符合」部分屬於 list operators,用於處理跨多個清單項目的比對。「等於」部分則是 field-level operator,用來判斷單一清單項目是否符合。
檢查清單中是否沒有任何項目符合某條件
此範例示範一個典型條件,用於檢查清單中是否沒有任何項目等於某個值。常見的情況是清單可能為空。清單為空時,條件會由清單運算子處理 (此例為 皆不符合)。
此處會檢查是否沒有任何產品標籤等於 foo:

若 (1) 沒有任何產品標籤,或 (2) 沒有任何標籤是 foo,此條件將傳回 true;否則將傳回 false。
檢查清單中的某項是否同時符合多個條件
此範例示範一個典型條件,用於檢查清單中是否至少有一個項目同時符合兩個獨立條件。
此處會檢查訂單中的某個商品是否同時具有 presale 標籤,且其 productType 為 clothing。

若要建置此條件,請:
- 針對第一個條件,選取 order / lineItems / product / tags。
- 在 lineItems 清單中,選取 Add criteria for same item。注意:此處選錯清單項目是常見錯誤。
- 將最上層物件選取為 lineItems_item,接著針對第二個條件選取 product / productType`。注意:此處選錯物件也是常見錯誤。
- 選取 AND,將兩個條件組合起來。
- 在兩個條件中分別輸入
presale與clothing。