選擇(Choice)狀態用於根據特定的條件或邏輯判斷來決定流程的下一步走向。本文介紹選擇狀態的基本概念及其相關使用樣本,以及條件運算式的相關內容,協助您更好地理解選擇狀態在流程式控制制中的作用。
基本概念
選擇(Choice)狀態是一個特定的流程節點,讓流程根據條件執行不同的狀態。它包含多個條件選項(Choice)和一個預設選項(Default),每個條件選項帶有一個條件運算式(Condition)和跳轉指令(Next)。類似於程式設計語言中的switch-case,通過條件運算式來決定流程的執行路徑。
系統會按照選項定義的順序依次評估其條件運算式是否返回True。
如果某選項返回
True,則執行選項對應的狀態(如果定義了狀態),然後執行跳轉(如果定義跳轉指令)。如果沒有任何選項返回
True,則執行預設選項對應的狀態和跳轉。
選擇狀態包含以下屬性。
欄位 | 類型 | 是否必選 | 描述 | 樣本值 |
Name | string | 是 | 狀態名稱。 | my state |
Description | string | 否 | 狀態原因。 | describe it here |
Type | string | 是 | 狀態類型。 | Choice |
InputConstructor | map[string]any | 否 | 輸入構造器。 | 請參見輸入和輸出 |
Default | string | 是 | 預設分支。 | my next task |
Branches | ChoiceBranch | 是 | 分支列表。 | 請參見ChoiceBranch |
ChoiceBranch
欄位 | 類型 | 是否必選 | 描述 | 樣本值 |
Condition | string | 是 | 條件運算式。如果有不理解,請參見運算式樣本。 | $Input.status=="ready" |
Next | string | 是 | 指向節點名稱。 | my next task |
Choice狀態不支援End屬性和Next屬性,通過Default屬性工作表示所有選擇條件都不滿足時的預設指向狀態,作用同Next,但在Branches中支援Next屬性。
使用樣本
以下樣本定義一個選擇狀態。
如果輸入中的
status的值是ready,則會執行第一個條件選項的狀態Pass2。如果輸入中的
status的值不是ready,則會執行預設選項邏輯,即Pass1。
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: Choice
States:
- Type: Choice
Name: Choice
Branches:
- Condition: $Input.data == "ready"
Next: Pass1
Default: Pass2
- Type: Pass
Name: Pass2
End: true
- Type: Pass
Name: Pass1
End: true條件運算式
當前系統支援的條件運算式由以下操作和變數組成,執行後返回Bool值即可達成條件:
比較操作:
>、>=、<、<=、==、!=,適用於字串和數字類型。邏輯操作:
||、&&。字元常量:以雙引號("")或者反引號(``)開始和結束,例如"foobar"或者`foobar`。
數字常量:
1、12.5。布爾常量:
true、false。首碼:
!、-。包含:
in,用來判斷數組是否包含某個值,或者對象是否包含某個索引值。
運算式樣本
以下樣本對於下面的狀態輸入$Input,針對不同的條件運算式,顯示了不同的執行結果。Condition可以使用的上下文運算式變數為$Context和$Input。更多資訊,請參見資料傳遞。
{
"a": 1,
"b": {
"b1": true,
"b2": "ready"
},
"c": [1, 2, 3],
"d": 1,
"e": 1,
"f": {
"f1": false,
"f2": "inprogress"
}
}條件運算式 | 執行結果 |
| true |
| false |
| true |
| true |
| true |
| true |
| true |
| true |
| false |
| true |
| false |
| true |
| false |
| true |
| true |
| true |
| false |
| true |