本文介绍了选择步骤的基本知识和其相关使用示例,以及条件表达式的相关内容。
参数说明
选择(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
,然后执行pass3
和final
。如果输入中的
status
的值是failed
,则会执行第二个条件选项的跳转,结束选择步骤执行final
。如果输入中的
status
的值不是ready
和failed
,则会执行默认选项逻辑,即pass2
和final
。
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`。
数字常量:
1
12.5
。布尔常量:
true
false
。前缀:
!
-
。包含:
in
,用来判断数组是否包含某个值,或者对象是否包含某个键值。
以下示例对于下面的步骤输入,针对不同的条件表达式,显示了相应的执行结果。
{
"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 |
| true |
| false |
| true |
| true |
| false |
| true |
| true |
| true |