本文介绍选择状态的基本概念及其相关使用示例,以及条件表达式的相关内容。
基本概念
选择状态让流程根据条件执行不同的状态,类似于编程语言中的switch-case
,它包含多个条件选项(Choice)和一个默认选项(Default),每个条件选项带有一个条件表达式(Condition)和跳转指令(Next)。
系统会按照选项定义的顺序依次评估其条件表达式是否返回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: 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
条件表达式
当前系统支持的条件表达式由以下操作和变量组成,执行后返回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 |