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

本頁說明如何使用跳轉功能或 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 role (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. 您應該已擁有要變更執行順序的現有工作流程。如要瞭解如何建立及部署工作流程,請參閱「建立及更新工作流程」。

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

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

基本跳躍

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

控制台

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

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

  3. 在「編輯工作流程」頁面中,選取「下一步」前往工作流程編輯器。

  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. 在「編輯工作流程」頁面中,選取「下一步」前往工作流程編輯器。

  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 步驟,因為條件式跳轉會略過該步驟;工作流程也不會執行 workWeek 步驟,因為 return 會在 weekend 步驟結束時停止執行工作流程。

使用 for 迴圈進行疊代

您可以使用 for 迴圈疊代一系列數字,或疊代資料集合 (例如清單或對應)。

您可以使用以項目為基礎的疊代,逐步查看清單或地圖中的每個項目。如果您要疊代特定範圍的數值,可以使用以範圍為基礎的疊代。

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

後續步驟