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

本頁說明如何使用跳轉或 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. Verify 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. Verify that billing is enabled for your Google Cloud project.

  6. 您應該已擁有現有工作流程,並想變更執行順序。如要瞭解如何建立及部署工作流程,請參閱「建立及更新工作流程」。
  7. 使用跳轉指令變更執行順序

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

    基本跳躍

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

    控制台

    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. 「定義工作流程」頁面會顯示工作流程的目前定義。如要編輯工作流程,根據條件陳述式執行特定步驟,請新增使用 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_ASTEP_B STEP_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 next。如果這個運算式評估結果為 false,工作流程會評估下一個運算式。

      • EXPRESSION_TWO:要評估的第二個運算式。如果這個運算式求出的值為 true,工作流程會執行 STEP_B next。如果這個運算式評估為 false,工作流程就會執行 STEP_C

      • STEP_ASTEP_B STEP_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 迴圈疊代一系列數字,或疊代資料集合 (例如清單或對應)。

    您可以使用以項目為基礎的疊代方式,逐步處理清單或對映中的每個項目。如果您要疊代特定範圍的數值,可以使用以範圍為基礎的疊代。

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

    後續步驟