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

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

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

事前準備

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

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

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

    基本跳躍

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

    控制台

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

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

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

    後續步驟