For Each

Conheça o componente e saiba como utilizá-lo.

O For Each realiza um loop dentro de uma estrutura JSON, processando cada elemento do array em um subpipeline.

Parâmetros

Dê uma olhada nas opções de configuração do componente. Parâmetros suportados por expressões Double Braces estão marcados com (DB).

Exemplos de Expressões JSON Path

$.[?(@.status == 'EXPIRED')]

A expressão acima mostra como a mensagem recebida pelo componente pode ser filtrada: neste exemplo, o array é a raiz do objeto e somente os elementos cujo atributo status seja EXPIRED serão processados pelo componente For Each.

$.body.*

Obtém todo o conteúdo do body da mensagem recebida.

$.body.products.*

Obtém o conteúdo de um array products que está dentro do body da mensagem recebida.

Definindo o subpipeline que é executado a cada iteração

Para definir o subpipeline que será executado a cada iteração, basta clicar no ícone onProcess do componente For Each.

Ao clicar nesse ícone, um subpipeline será criado (ou exibido, caso já exista). Então basta construir o fluxo desejado conforme a necessidade de execução de cada iteração.

Caso sejam utilizados componentes Session Management para manipular dados de cada elemento do array no subpipeline do For Each e a opção Parallel Execution esteja ativa, é necessário que a opção Scoped do Session Management esteja ativa para que cada execução em paralelo acesse os seus respectivos dados.

Tratando erros no loop

O comportamento padrão do For Each é interromper a execução caso algum erro seja encontrado. Erros são situações atípicas na execução de um pipeline que incorrem em uma parada. Por exemplo, o uso de um componente Assert V2 causa um erro no pipeline quando a condição de asserção não for satisfeita. Outras situações de erro ocorrem quando são utilizados componentes com a configuração Fail On Error habilitada.

Conforme explicado anteriormente, é possível definir um subpipeline para tratamento de erros. A definição desse subpipeline é feita através do ícone onException do componente For Each:

Leia o artigo sobre subpipelines para entender melhor o funcionamento.

Não é possível interromper a execução de todo o loop For Each. A interrupção pode ser feita apenas na iteração atual, através de componentes que possuam o parâmetro Fail On Error ativado dentro dos subpipelines onProcess e onException.

Erro grave de estrutura durante o subpipeline onException

  • o loop será interrompido;

  • o erro será lançado para o próximo componente ao qual o componente For Each esteja associado;

  • caso o For Each esteja no fluxo principal do pipeline, então o pipeline será interrompido;

  • se o For Each estiver dentro de um componente que possui subpipeline, então o subpipeline onException será invocado e o erro será informado na entrada desse subpipeline.

Fluxo de mensagens

Entrada

O For Each aceita qualquer estrutura de JSON que contenha um array. Se o array não for a raiz do objeto, então uma expressão JSON Path deve ser definida para localizar e filtrar o array. Caso o componente For Each não receba um array, nenhum processamento será executado.

Saída

{
    "total": 0,
    "success": 0,
    "failed": 0
}
  • total: número total de elementos processados.

  • success: número total de elementos processados com sucesso.

  • failed: número total de elementos que não puderam ser processados.

Para informar que uma linha foi processada corretamente e iterar o valor do campo "success", cada execução do subpipeline onProcess deve responder com { "success": true } ao seu término. Somente desta forma a mensagem de saída representará corretamente o resultado dos processamentos.

Atualizado