全部產品
Search
文件中心

CloudFlow:選擇步驟

更新時間:Jul 06, 2024

本文介紹了選擇步驟的基本知識和其相關使用樣本,以及條件運算式的相關內容。

參數說明

選擇(Choice)步驟讓流程根據條件執行不同的步驟,類似於程式設計語言中的switch-case,它包含多個條件選項(Choice)和一個預設選項(Default),每個條件選項帶有一個條件運算式(Condition),若干步驟(Steps)和跳轉指令(Goto)。預設選項只帶有若干步驟和跳轉指令。當流程執行到選擇步驟,系統會按照選項定義的順序依次評估其條件運算式是否返回True

  • 如果返回True則執行選項對應的步驟(如果定義了步驟),然後執行跳轉(如果定義跳轉指令)。

  • 如果沒有任何選項返回True,則執行預設選項對應的步驟和跳轉。

  • 如果沒有定義預設選項,則結束選擇步驟。

選擇步驟包含以下屬性:

  • (必需)type:choice表示該步驟是選擇步驟。

  • (必需)name:步驟名稱。

  • (必需)choices:多個選項,數群組類型,每個元素對應一個選項。

    • (必需)condition:定義條件運算式。條件運算式可以通過JSON Path($.key)引用步驟輸入資料。

    • (可選)steps:定義了選項所對應的多個串列步驟。

    • (可選)goto:指定跳轉目的步驟名稱,該目的步驟只能是和選擇步驟並列的一個步驟。

  • (必需)default:預設選項。

    • (可選)steps:定義了選項所對應的多個串列步驟。

    • (可選)goto:指定跳轉目的步驟名稱,該目的步驟只能是和當前選擇步驟並列的一個步驟。

  • (可選)end:當前步驟結束後是否繼續執行其後定義的步驟。

  • (可選)inputMappings:輸入映射。

  • (可選)outputMappings:輸出映射。本步驟$local為實際執行選擇分支的執行結果。

    說明

    如果未指定輸出映射,本步驟預設將$local作為輸出。

樣本

下面的流程定義了一個選擇步驟。

  • 如果輸入中的status的值是ready,則會執行第一個條件選項的步驟pass1,然後執行pass3final

  • 如果輸入中的status的值是failed,則會執行第二個條件選項的跳轉,結束選擇步驟執行final

  • 如果輸入中的status的值不是readyfailed,則會執行預設選項邏輯,即pass2final

version: v1
type: flow
steps:
  - type: choice
    name: mychoice
    choices:
      - condition: $.status == "ready"
        # choice with steps
        steps:
          - type: pass
            name: pass1
      - condition: $.status == "failed"
        # choice with goto
        goto: final
    default:
      # choice with both steps and goto
      steps:
        - type: pass
          name: pass2
      goto: final
  - type: pass
    name: pass3
  - type: pass
    name: final            

條件運算式

條件運算式由以下操作和變數組成:

  • 比較操作:>>=<<===!=,適用於字串和數字類型。

  • 邏輯操作:||&&

  • 字元常量:以雙引號("")或者反引號(``)開始和結束,例如"foobar"或者`foobar`。

  • 數字常量:112.5

  • 布爾常量:truefalse

  • 首碼:!-

  • 包含:in,用來判斷數組是否包含某個值,或者對象是否包含某個索引值。

以下樣本對於下面的步驟輸入,針對不同的條件運算式,顯示了相應的執行結果。

{
  "a": 1,
  "b": {
    "b1": true,
    "b2": "ready"
  },
  "c": [1, 2, 3],
  "d": 1,
  "e": 1,
  "f": {
    "f1": false,
    "f2": "inprogress"
  }
}           

條件運算式

執行結果

$.a==1

true

$.a==2

false

$.a>0

true

0<$.a

true

$.a>=1

true

$.a!=2

true

$.b.b1

true

$.b.b1==true

true

$.b.b1==false

false

$.b.b2=="ready"

true

$.b.b2==`ready`

true

$.b.b2=="inprogress"

false

$.a==1 && $.b.b1

true

$.a==1 || $.b.b1

true

$.a==2 && $.b.b1

false

$.a==2 || $.b.b1

true

$.c[0]==1

true

$.c[0]==$.a

true