控管工作流程中執行作業的順序

本頁說明如何使用跳轉或 for 迴圈,控管工作流程步驟的執行順序。您可以使用基本跳躍功能,定義工作流程的下一個執行步驟。條件式跳轉是建立在基本跳轉的基礎上,可讓您使用條件式運算式,透過工作流程控管執行順序。舉例來說,只有在其他工作流程步驟中的變數或回應符合特定條件時,才能執行特定步驟。

本頁範例使用可傳回星期幾的 API 範例。

事前準備

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 您應該已經有要變更執行順序的工作流程。如要瞭解如何建立及部署工作流程,請參閱「建立及更新工作流程」。

使用跳躍指令變更執行順序

根據預設,所有工作流程都是有順序的清單,每個步驟都會按照您在工作流程原始碼中定義的順序執行。您可以選擇使用跳躍來覆寫此預設排序。

基本跳躍

您可以使用基本跳躍,指定工作流程中要執行的下一個步驟。

控制台

  1. 在Google Cloud 控制台中開啟「Workflows」頁面:
    前往「Workflows」

  2. 選取要變更現有步驟執行順序的工作流程名稱。

  3. 在「Edit workflow」(編輯工作流程) 頁面中,選取「Next」,前往工作流程編輯器。

  4. 請在步驟結尾新增 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

  5. 選取 [Deploy] (部署)。

gcloud

  1. 在您選擇的文字編輯器中開啟工作流程定義檔。

  2. 請在步驟結尾新增 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

  3. 儲存工作流程檔案。

  4. 如要部署工作流程,請輸入下列指令:

    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_boolreturn_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 個條件。

控制台

  1. 在Google Cloud 控制台中開啟「Workflows」頁面:
    前往「Workflows」

  2. 選取要新增 switch 區塊的工作流程名稱。

  3. 在「Edit workflow」(編輯工作流程) 頁面中,選取「Next」,前往工作流程編輯器。

  4. 在「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_ASTEP_BSTEP_C:預留位置步驟名稱。

  5. 選取 [Deploy] (部署)。

gcloud

  1. 在您選擇的文字編輯器中開啟工作流程定義。

  2. 如要編輯工作流程,讓系統根據條件陳述式執行特定步驟,請新增使用 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_ASTEP_BSTEP_C:預留位置步驟名稱。

  3. 儲存工作流程檔案。

  4. 如要部署工作流程,請輸入下列指令:

    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 迴圈,疊代一連串的數字或資料集合 (例如清單或對照表)。

您可以使用以項目為基礎的疊代作業,逐一檢視清單或地圖中的每個項目。如果您要迭代特定範圍的數值,可以使用範圍式疊代。

如需更多資訊和範例,請參閱「疊代」的語法參考資料。

後續步驟