選擇(Choice)
本文介紹選擇狀態(tài)的基本概念及其相關(guān)使用示例,以及條件表達(dá)式的相關(guān)內(nèi)容。
基本概念
選擇狀態(tài)讓流程根據(jù)條件執(zhí)行不同的狀態(tài),類似于編程語言中的switch-case
,它包含多個(gè)條件選項(xiàng)(Choice)和一個(gè)默認(rèn)選項(xiàng)(Default),每個(gè)條件選項(xiàng)帶有一個(gè)條件表達(dá)式(Condition)和跳轉(zhuǎn)指令(Next)。
系統(tǒng)會(huì)按照選項(xiàng)定義的順序依次評(píng)估其條件表達(dá)式是否返回True
。
如果某選項(xiàng)返回
True
,則執(zhí)行選項(xiàng)對(duì)應(yīng)的狀態(tài)(如果定義了狀態(tài)),然后執(zhí)行跳轉(zhuǎn)(如果定義跳轉(zhuǎn)指令)。如果沒有任何選項(xiàng)返回
True
,則執(zhí)行默認(rèn)選項(xiàng)對(duì)應(yīng)的狀態(tài)和跳轉(zhuǎn)。
選擇狀態(tài)包含以下屬性。
字段 | 類型 | 是否必選 | 描述 | 示例值 |
Name | string | 是 | 狀態(tài)名稱。 | my state |
Description | string | 否 | 狀態(tài)描述。 | describe it here |
Type | string | 是 | 狀態(tài)類型。 | Choice |
InputConstructor | map[string]any | 否 | 輸入構(gòu)造器。 | 請(qǐng)參見輸入和輸出 |
Default | string | 是 | 默認(rèn)分支。 | my next task |
Branches | ChoiceBranch | 是 | 分支列表。 | 請(qǐng)參見ChoiceBranch |
ChoiceBranch
字段 | 類型 | 是否必選 | 描述 | 示例值 |
Condition | string | 是 | 條件表達(dá)式。 | $Input.status=="ready" |
Next | string | 是 | 指向節(jié)點(diǎn)名稱。 | my next task |
Choice狀態(tài)不支持End屬性和Next屬性,通過Default屬性表示所有選擇條件都不滿足時(shí)的默認(rèn)指向狀態(tài),作用同Next,但在Branches中支持Next屬性。
使用示例
以下示例定義一個(gè)選擇狀態(tài)。
如果輸入中的
status
的值是ready
,則會(huì)執(zhí)行第一個(gè)條件選項(xiàng)的狀態(tài)Pass2
。如果輸入中的
status
的值不是ready
,則會(huì)執(zhí)行默認(rèn)選項(xiàng)邏輯,即Pass1
。
Type: StateMachine
Name: my-wkfl
SpecVersion: v1
StartAt: Choice1
States:
- Type: Choice
Name: Choice1
Branches:
- Condition:$Input.status=="ready"
Next: Pass2
Default: Pass1
- Type: Pass
Name: Pass1
End: true
- Type: Pass
Name: Pass2
End: true
條件表達(dá)式
當(dāng)前系統(tǒng)支持的條件表達(dá)式由以下操作和變量組成,執(zhí)行后返回Bool值即可達(dá)成條件:
比較操作:
>
、>=
、<
、<=
、==
、!=
,適用于字符串和數(shù)字類型。邏輯操作:
||
、&&
。字符常量:以雙引號(hào)(“”)或者反引號(hào)(``)開始和結(jié)束,例如"foobar"或者`foobar`。
數(shù)字常量:
1
、12.5
。布爾常量:
true
、false
。前綴:
!
、-
。包含:
in
,用來判斷數(shù)組是否包含某個(gè)值,或者對(duì)象是否包含某個(gè)鍵值。
表達(dá)式示例
以下示例對(duì)于下面的狀態(tài)輸入$Input,針對(duì)不同的條件表達(dá)式,顯示了不同的執(zhí)行結(jié)果。Condition可以使用的上下文表達(dá)式變量為$Context
和$Input
。更多信息,請(qǐng)參見數(shù)據(jù)傳遞。
{
"a": 1,
"b": {
"b1": true,
"b2": "ready"
},
"c": [1, 2, 3],
"d": 1,
"e": 1,
"f": {
"f1": false,
"f2": "inprogress"
}
}
條件表達(dá)式 | 執(zhí)行結(jié)果 |
| true |
| false |
| true |
| true |
| true |
| true |
| true |
| true |
| false |
| true |
| false |
| true |
| false |
| true |
| true |