Quando um workflow precisa aplicar a mesma lógica de processamento a todos os elementos de um array — como validar um lote de pedidos, redimensionar um conjunto de imagens ou enriquecer uma lista de registros — o estado Map executa essa tarefa iterando sobre o array e processando cada elemento por meio de um subfluxo em paralelo. Esse comportamento assemelha-se a um loop foreach com execução concorrente. Por padrão, os estados Map operam no modo inline. Esse modo concentra-se em um único nó e é ideal para cenários em que cada elemento de uma coleção exige processamento individual.
Funcionamento
Extraia um array da entrada usando a expressão
ItemsPath.Inicie um subfluxo independente para cada elemento e execute os estados definidos em
Processor.Execute todos os subfluxos em paralelo, respeitando o limite de
MaxConcuccency.Após a conclusão de todos os subfluxos, combine os resultados em uma saída do tipo
map[string]anysob a chaveItems.
Referência de campos
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
Name |
string |
Sim |
Nome do estado. |
|
Type |
string |
Sim |
Deve ser |
|
ItemsPath |
string |
Sim |
Expressão que extrai o array alvo da entrada. Aceita as variáveis |
|
Processor |
Processor |
Sim |
Definição do subfluxo executado para cada elemento do array. Veja Processor. |
|
InputConstructor |
map[string]any |
Não |
Constrói ou reestrutura a entrada antes da iteração. Consulte Entradas e saídas. |
|
OutputConstructor |
map[string]any |
Não |
Reestrutura a saída combinada após a conclusão de todos os subfluxos. Consulte OutputConstructor do estado. |
|
MaxConcuccency |
int |
Não |
Número máximo de subfluxos paralelos. O limite superior é 40. Consulte MaxConcuccency. |
|
Next |
string |
Não |
Estado para o qual transitar após a conclusão. Desnecessário se |
|
End |
bool |
Não |
Indica que este é o estado terminal do escopo atual. |
|
Retry |
Retry |
Não |
Política de nova tentativa em caso de erro. Consulte Tratamento de erros. |
|
Catch |
Catch |
Não |
Política de captura de erros. Consulte Tratamento de erros. |
|
Description |
string |
Não |
Descrição do estado. |
Campos principais
ItemsPath
Expressão que extrai um array da entrada. Se a expressão retornar um array JSON, o estado Map itera sobre cada elemento e o encaminha independentemente ao Processor.
Aceita as variáveis de expressão $Input e $Context:
$Input.FieldA
O exemplo acima extrai o array FieldA da entrada. Em seguida, cada elemento é processado em um subfluxo paralelo separado.
Processor
Defina o subfluxo executado para cada elemento do array.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
StartAt |
string |
Sim |
Primeiro estado a ser executado no subfluxo. |
|
States |
array |
Sim |
Estados que compõem o subfluxo. |
Exemplo:
Processor:
StartAt: Pass1
States:
- Type: Pass
Name: Pass1
End: true
MaxConcuccency
Número máximo de subfluxos executados simultaneamente. O limite superior é 40.
Exemplo
O fluxo abaixo define um estado Map que itera sobre um array de três elementos. Cada elemento passa por um único estado Pass.
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
Entrada
O campo InputConstructor gera a seguinte entrada:
{
"FieldA": [
{ "a": "b" },
{ "c": "d" },
{ "e": "f" }
]
}
Dados recebidos em cada iteração
A expressão ItemsPath extrai o array FieldA. Cada subfluxo recebe um elemento como entrada. A primeira iteração, por exemplo, recebe:
{
"a": "b"
}
A segunda iteração recebe { "c": "d" } e a terceira recebe { "e": "f" }. Os três subfluxos são executados em paralelo.
Saída
Após a conclusão de todos os subfluxos, o estado Map combina os resultados sob a chave Items:
{
"Items": [
{ "a": "b" },
{ "c": "d" },
{ "e": "f" }
]
}
Para reestruturar essa saída combinada, use o OutputConstructor.