本頁說明如何使用跳轉或 for 迴圈,控管工作流程步驟的執行順序。您可以使用基本跳躍功能,定義工作流程的下一個執行步驟。條件式跳轉是建立在基本跳轉的基礎上,可讓您使用條件式運算式,透過工作流程控管執行順序。舉例來說,只有在其他工作流程步驟中的變數或回應符合特定條件時,才能執行特定步驟。
本頁範例使用可傳回星期幾的 API 範例。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 您應該已經有要變更執行順序的工作流程。如要瞭解如何建立及部署工作流程,請參閱「建立及更新工作流程」。
使用跳躍指令變更執行順序
根據預設,所有工作流程都是有順序的清單,每個步驟都會按照您在工作流程原始碼中定義的順序執行。您可以選擇使用跳躍來覆寫此預設排序。
基本跳躍
您可以使用基本跳躍,指定工作流程中要執行的下一個步驟。
控制台
在Google Cloud 控制台中開啟「Workflows」頁面:
前往「Workflows」選取要變更現有步驟執行順序的工作流程名稱。
在「Edit workflow」(編輯工作流程) 頁面中,選取「Next」,前往工作流程編輯器。
請在步驟結尾新增
next
欄位,告訴工作流程跳至特定步驟:YAML
- step_a: ... next: STEP_NAME_TO_JUMP_TO - step_b: ... - next_step: ...
JSON
[ { "step_a": { ... "next": "STEP_NAME_TO_JUMP_TO" } } { "step_b": { ... } } { "next_step": { ... } } ]
將
STEP_NAME_TO_JUMP_TO
替換為您希望工作流程下一步執行的步驟名稱。例如:next_step
。選取 [Deploy] (部署)。
gcloud
在您選擇的文字編輯器中開啟工作流程定義檔。
請在步驟結尾新增
next
欄位,告訴工作流程跳至特定步驟:YAML
- step_a: ... next: STEP_NAME_TO_JUMP_TO - step_b: ... - next_step: ...
JSON
[ { "step_a": { ... "next": "STEP_NAME_TO_JUMP_TO" } } { "step_b": { ... } } { "next_step": { ... } } ]
將
STEP_NAME_TO_JUMP_TO
替換為您希望工作流程下一個執行的步驟名稱。例如:next_step
。儲存工作流程檔案。
如要部署工作流程,請輸入下列指令:
gcloud workflows deploy WORKFLOW_NAME \ --source=WORKFLOW_FILE.YAML
更改下列內容:
WORKFLOW_NAME
:必要。工作流程名稱。WORKFLOW_FILE.YAML
:必要。工作流程的來源檔案。
範例
舉例來說,下列工作流程的步驟順序不正確:
YAML
- get_time: call: http.get args: url: https://us-central1-workflowsample.cloudfunctions.net/datetime result: currentTime - return_daylight_savings_bool: return: ${daylightSavings} - get_daylight_savings_bool: assign: - daylightSavings: ${currentTime.body.isDayLightSavingsTime}
JSON
[ { "get_time": { "call": "http.get", "args": { "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime" }, "result": "currentTime" } }, { "return_daylight_savings_bool": { "return": "${daylightSavings}" } }, { "get_daylight_savings_bool": { "assign": [ { "daylightSavings": "${currentTime.body.isDayLightSavingsTime}" } ] } } ]
在這個範例中,next
欄位已新增至 get_daylight_savings_bool
和 return_daylight_savings_bool
步驟,以便以正確順序執行步驟:
YAML
- get_time: call: http.get args: url: https://us-central1-workflowsample.cloudfunctions.net/datetime result: currentTime next: get_daylight_savings_bool - return_daylight_savings_bool: return: ${daylightSavings} - get_daylight_savings_bool: assign: - daylightSavings: ${currentTime.body.isDayLightSavingsTime} next: return_daylight_savings_bool
JSON
[ { "get_time": { "call": "http.get", "args": { "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime" }, "result": "currentTime", "next": "get_daylight_savings_bool" } }, { "return_daylight_savings_bool": { "return": "${daylightSavings}" } }, { "get_daylight_savings_bool": { "assign": [ { "daylightSavings": "${currentTime.body.isDayLightSavingsTime}" } ], "next": "return_daylight_savings_bool" } } ]
條件式跳躍
您可以使用條件式跳轉功能,判斷工作流程中要執行的下一個步驟。條件跳躍會使用 switch
區塊,如果符合特定條件,就會跳到指定步驟。每個 switch
區塊最多可包含 50 個條件。
控制台
在Google Cloud 控制台中開啟「Workflows」頁面:
前往「Workflows」選取要新增
switch
區塊的工作流程名稱。在「Edit workflow」(編輯工作流程) 頁面中,選取「Next」,前往工作流程編輯器。
在「Define workflow」頁面上,系統會顯示工作流程目前的定義。如要編輯工作流程,讓系統根據條件陳述式執行特定步驟,請新增使用
switch
區塊的步驟:YAML
- SWITCH_STEP_NAME: switch: - condition: ${EXPRESSION_ONE} next: STEP_A - condition: ${EXPRESSION_TWO} next: STEP_B ... next: STEP_C - STEP_A ... - STEP_B ... - STEP_C ...
JSON
[ { "SWITCH_STEP_NAME": { "switch": [ { "condition": "${EXPRESSION_ONE}", "next": "STEP_A" }, { "condition": "${EXPRESSION_TWO}", "next": "STEP_B" } ], "next": "STEP_C" } "STEP_A": { ... } "STEP_B": { ... } "STEP_C": { ... } } ]
更改下列內容:
SWITCH_STEP_NAME
:包含switch
區塊的步驟名稱。EXPRESSION_ONE
:要評估的第一個運算式。如果這個運算式求值為 true,工作流程會接著執行STEP_A
。如果這個運算式評估為 false,工作流程會評估下一個運算式。EXPRESSION_TWO
:要評估的第二個運算式。如果這個運算式求值為 true,工作流程會接著執行STEP_B
。如果這個運算式評估為 false,工作流程就會執行STEP_C
。STEP_A
、STEP_B
、STEP_C
:預留位置步驟名稱。
選取 [Deploy] (部署)。
gcloud
在您選擇的文字編輯器中開啟工作流程定義。
如要編輯工作流程,讓系統根據條件陳述式執行特定步驟,請新增使用
switch
區塊的步驟:YAML
- SWITCH_STEP_NAME: switch: - condition: ${EXPRESSION_ONE} next: STEP_A - condition: ${EXPRESSION_TWO} next: STEP_B ... next: STEP_C - STEP_A ... - STEP_B ... - STEP_C ...
JSON
[ { "SWITCH_STEP_NAME": { "switch": [ { "condition": "${EXPRESSION_ONE}", "next": "STEP_A" }, { "condition": "${EXPRESSION_TWO}", "next": "STEP_B" } ], "next": "STEP_C" } "STEP_A": { ... } "STEP_B": { ... } "STEP_C": { ... } } ]
更改下列內容:
SWITCH_STEP_NAME
:包含switch
區塊的步驟名稱。EXPRESSION_ONE
:要評估的第一個運算式。如果這個運算式求值為 true,工作流程會接著執行STEP_A
。如果這個運算式評估為 false,工作流程會評估下一個運算式。EXPRESSION_TWO
:要評估的第二個運算式。如果這個運算式求值為 true,工作流程會接著執行STEP_B
。如果這個運算式評估為 false,工作流程就會執行STEP_C
。STEP_A
、STEP_B
、STEP_C
:預留位置步驟名稱。
儲存工作流程檔案。
如要部署工作流程,請輸入下列指令:
gcloud workflows deploy WORKFLOW_NAME \ --source=WORKFLOW_FILE.YAML
更改下列內容:
WORKFLOW_NAME
:必要。工作流程名稱。WORKFLOW_FILE.YAML
:必要。工作流程的來源檔案。
範例
例如,這個工作流程會使用切換方塊來控管工作流程的執行順序:
YAML
- getCurrentTime: call: http.get args: url: https://us-central1-workflowsample.cloudfunctions.net/datetime result: currentTime - conditionalSwitch: switch: - condition: ${currentTime.body.dayOfTheWeek == "Friday"} next: friday - condition: ${currentTime.body.dayOfTheWeek == "Saturday" OR currentTime.body.dayOfTheWeek == "Sunday"} next: weekend next: workWeek - friday: return: "It's Friday! Almost the weekend!" - weekend: return: "It's the weekend!" - workWeek: return: "It's the work week."
JSON
[ { "getCurrentTime": { "call": "http.get", "args": { "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime" }, "result": "currentTime" } }, { "conditionalSwitch": { "switch": [ { "condition": "${currentTime.body.dayOfTheWeek == "Friday"}", "next": "friday" }, { "condition": "${currentTime.body.dayOfTheWeek == "Saturday" OR currentTime.body.dayOfTheWeek == "Sunday"}", "next": "weekend" } ], "next": "workWeek" } }, { "friday": { "return": "It's Friday! Almost the weekend!" } }, { "weekend": { "return": "It's the weekend!" } }, { "workWeek": { "return": "It's the work week." } } ]
在這個範例中,switch
區塊有兩個條件。剖析器會依序評估每個條件,如果條件運算式的結果為 true
,則會呼叫該條件的 next
步驟。如果沒有任何條件符合,工作流程會呼叫 switch
區塊外 next
欄位指定的步驟,在本例中為步驟 workWeek
。
舉例來說,如果星期幾是 "Saturday"
,則工作流程會跳至步驟 weekend
,並傳回訊息 "It's the weekend!"
。由於條件式跳躍會略過該步驟,因此工作流程不會執行 friday
步驟,而且由於 return
會在 weekend
步驟結束時停止執行工作流程,因此工作流程不會執行 workWeek
步驟。
使用 for
迴圈疊代
您可以使用 for
迴圈,疊代一連串的數字或資料集合 (例如清單或對照表)。
您可以使用以項目為基礎的疊代作業,逐一檢視清單或地圖中的每個項目。如果您要迭代特定範圍的數值,可以使用範圍式疊代。
如需更多資訊和範例,請參閱「疊代」的語法參考資料。