Map状态默认以内联模式运行,内联模式可以用于批量处理数据,简化数据的转换与处理流程,适用于操作集合内的每个元素,强调单一节点的处理。
基本概念
迭代状态遍历输入中的某个数组类型参数,对于数组中的每个元素,并行执行其处理器(Processor)状态。迭代状态类似于编程语言中的foreach
,不同之处是这里的迭代是并行执行的。
执行并行迭代步骤会并发执行输入参数中的每个元素的处理器状态。当所有分支执行结束后,默认将输出一个包含所有分支结果的map[string]any,然后通过输出构造器将结果进行进一步处理。
内联模式包含以下属性:
字段 | 类型 | 是否必选 | 描述 | 示例值 |
Name | string | 是 | 状态名称。 | my-state-name |
Description | string | 否 | 状态描述。 | describe it here |
Type | string | 是 | 状态类型。 | Map |
InputConstructor | map[string]any | 否 | 输入构造器。 | 请参见输入和输出 |
ItemsPath | string | 是 | 用于提取输入数组的表达式。 | 请参见ItemsPath |
Processor | Processor | 是 | 迭代处理器。 | 请参见Processor |
OutputConstructor | map[string]any | 否 | 输出构造器。 | 请参见状态输出构造器 |
Next | string | 否 | 当前状态的下一状态。当End取值为true时,无需指定。 | my-next-state |
End | bool | 否 | 是否为当前作用域的终结节点。 | true |
Retry | Retry | 否 | 用于定义错误重试策略。 | 请参见错误处理 |
Catch | Catch | 否 | 用于定义错误捕获策略。 | 请参见错误处理 |
MaxConcuccency | int | 否 | 用于配置最大并发数。 | 28 |
内联模式的关键字段
ItemsPath
用于提取输入数组的表达式。该表达式执行后返回JSON Array,则可以进行迭代,将其中每个元素传入ItemProcessor进行处理;可使用表达式变量$Context和$Input,示例如下:
$Input.FieldA
Processor
迭代处理器。包含以下两个字段:
字段 | 类型 | 是否必选 | 描述 | 示例值 |
States | array | 是 | 内部嵌套的状态数组。 |
|
StartAt | string | 是 | 内部嵌套状态数组的执行起点。 | my start task |
MaxConcuccency
MaxConcurrency支持对子工作流执行的并发配置,最大并发数可达到40。
使用示例
以下示例流程定义一个迭代状态,这个迭代步骤处理器包含一个通过状态。
Type: StateMachine
Name: my-wkfl
SpecVersion: v1
StartAt: Map1
States:
- Type: Map
Name: Map1
End: true
InputConstructor:
FieldA:
- a : b
- c : d
- e : f
ItemsPath: $Input.FieldA
Processor:
StartAt: Pass1
States:
- Type: Pass
Name: Pass1
End: true
流程的输入构造结果如下所示。
{
"FieldA": [
{
"a": "b"
},
{
"c": "d"
},
{
"e": "f"
}
]
}
针对Map,系统会对所有迭代Processor的输出结果进行合并,默认以关键字 "Items" 作为Key,合并后的结果作为Value;Map1
的输出结果如下所示, 自动添加此输出也是最后流程执行的输出。
{
"Items": [
{
"a": "b"
},
{
"c": "d"
},
{
"e": "f"
}
]
}