本頁說明如何使用跳轉或 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.
-
Verify 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.
-
Verify 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] (部署)。
在您選擇的文字編輯器中,開啟工作流程的定義檔。
在步驟結尾新增
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
:必填。工作流程的來源檔案。
在Google Cloud 控制台中開啟「Workflows」頁面:
前往 Workflows選取要新增
switch
區塊的工作流程名稱。在「Edit workflow」(編輯工作流程) 頁面中,選取「Next」(下一步),前往工作流程編輯器。
「定義工作流程」頁面會顯示工作流程的目前定義。如要編輯工作流程,根據條件陳述式執行特定步驟,請新增使用
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
next。如果這個運算式評估結果為 false,工作流程會評估下一個運算式。EXPRESSION_TWO
:要評估的第二個運算式。如果這個運算式求出的值為 true,工作流程會執行STEP_B
next。如果這個運算式評估為 false,工作流程就會執行STEP_C
。STEP_A
、STEP_B
STEP_C
:預留位置步驟名稱。
選取 [Deploy] (部署)。
在您選擇的文字編輯器中開啟工作流程定義。
如要編輯工作流程,根據條件陳述式執行特定步驟,請新增使用
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
next。如果這個運算式評估結果為 false,工作流程會評估下一個運算式。EXPRESSION_TWO
:要評估的第二個運算式。如果這個運算式求出的值為 true,工作流程會執行STEP_B
next。如果這個運算式評估為 false,工作流程就會執行STEP_C
。STEP_A
、STEP_B
STEP_C
:預留位置步驟名稱。
儲存工作流程檔案。
如要部署工作流程,請輸入下列指令:
gcloud workflows deploy WORKFLOW_NAME \ --source=WORKFLOW_FILE.YAML
更改下列內容:
WORKFLOW_NAME
:必填。工作流程名稱。WORKFLOW_FILE.YAML
:必填。工作流程的來源檔案。
使用跳轉指令變更執行順序
根據預設,所有工作流程都是排序清單,每個步驟都會按照您在工作流程原始碼中定義的順序執行。您可以使用跳轉功能,選擇覆寫這項預設排序。
基本跳躍
您可以使用基本跳轉,指定工作流程中要執行的下一個步驟。
控制台
gcloud
範例
舉例來說,下列工作流程的步驟順序有誤:
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 個條件。
控制台
gcloud
範例
舉例來說,這個工作流程使用切換方塊來控管工作流程的執行順序:
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
迴圈疊代一系列數字,或疊代資料集合 (例如清單或對應)。
您可以使用以項目為基礎的疊代方式,逐步處理清單或對映中的每個項目。如果您要疊代特定範圍的數值,可以使用以範圍為基礎的疊代。
如需更多資訊和範例,請參閱疊代的語法參考資料。