Pular para o conteúdo principal

ForEach

1. Visão Geral

O componente ForEach (foreach) repete a execução de um conjunto de passos para cada item de uma lista, de forma parecida com um laço de repetição em linguagens de programação. É usado quando o fluxo recebe uma lista (por exemplo, itens de um pedido, linhas de uma planilha, registros de uma API) e precisa executar a mesma sequência de ações para cada um deles.

Use quando precisar processar item por item de uma coleção. Não é indicado para decisões condicionais simples (use o Choice) nem para ler arquivos Excel diretamente (o componente Excel Reader já faz a iteração linha a linha sozinho, sem precisar de um ForEach por fora).

2. Pré-requisitos

Não há credenciais ou acessos externos necessários — é um componente interno da engine.

3. Autenticação e Conexão

Não aplicável.

4. Configuração / Operações Suportadas

O ForEach tem uma única operação: iterar sobre uma lista e executar um sub-fluxo para cada item.

CampoObrigatórioTipoDescriçãoExemplo
itemsSimExpressãoCaminho/expressão que resolve para a lista a ser percorrida. Se o resultado não for uma lista (JSON array), o componente trata o valor como um único item.Uma expressão que aponta para a lista de itens do pedido
stepSimSub-fluxoSequência de componentes executada para cada item da lista.Um passo que envia cada item para um sistema externo
isParallelNãoTexto ("true"/"false")Se true, os itens são processados em paralelo; se false (padrão), um item de cada vez, em ordem."true"
stopOnErrorNãoTexto ("true"/"false")Se true (padrão), um erro em qualquer item interrompe todo o processamento. Se false, o erro daquele item é registrado e o laço continua com os próximos."false"
isAggregatedResultNãoTexto ("true"/"false")Se true, o resultado final traz o corpo de resposta de cada item processado. Se false (padrão), o resultado traz apenas contadores (total, sucesso, erro)."true"

Comportamento em caso de erro: se stopOnError estiver ativado e um item falhar, o processamento inteiro é interrompido com erro. Se estiver desativado, o item com erro é marcado como falho no resultado, mas os demais continuam sendo processados normalmente.

5. Exemplos Práticos

Exemplo simples: um fluxo recebe uma lista de e-mails e usa o ForEach para enviar uma notificação para cada um, um de cada vez (isParallel desligado), parando tudo se um envio falhar (stopOnError ligado, comportamento padrão).

Entrada:

{
"emails": ["ana@exemplo.com", "bruno@exemplo.com", "carla@exemplo.com"]
}

Configuração do componente:

{
"componentName": "foreach",
"configurations": {
"items": "{$.body.emails}",
"step": {
"componentName": "http",
"configurations": { "url": "https://api.exemplo.com/notificar", "method": "POST" }
}
}
}

Resposta (contadores, comportamento padrão de isAggregatedResult):

{
"itemsSize": 3,
"success": 3,
"error": 0
}

Exemplo avançado: o mesmo cenário, mas processando os envios em paralelo (isParallel ligado) para ganhar velocidade, sem parar o processo se algum e-mail específico falhar (stopOnError desligado), e trazendo o resultado detalhado de cada envio no final (isAggregatedResult ligado) para permitir uma auditoria posterior de quais itens tiveram sucesso ou erro.

Configuração do componente:

{
"componentName": "foreach",
"configurations": {
"items": "{$.body.emails}",
"isParallel": "true",
"stopOnError": "false",
"isAggregatedResult": "true",
"step": {
"componentName": "http",
"configurations": { "url": "https://api.exemplo.com/notificar", "method": "POST" }
}
}
}

Resposta (um item, o e-mail do Bruno, falhou mas o processamento continuou):

{
"items": [
{ "body": "{\"status\":\"enviado\"}" },
{ "body": "{\"error\":\"Falha ao conectar com o servidor de e-mail\"}" },
{ "body": "{\"status\":\"enviado\"}" }
]
}

6. Erros Comuns e Troubleshooting

Erro / SintomaCausa provávelComo resolver
Fluxo interrompido no meio do processamento de uma listastopOnError está ativado (padrão) e um dos itens gerou erro.Se o objetivo é continuar mesmo com falhas pontuais, desativar stopOnError.
Resultado final não mostra detalhes dos itens processadosisAggregatedResult está desligado (padrão), trazendo apenas contadores.Ativar isAggregatedResult para receber o corpo de resposta de cada item.
ForEach processa a lista inteira como um único itemA expressão de items não resolveu para uma lista JSON válida.Verificar se a expressão aponta corretamente para um array na mensagem de entrada.