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)
.
JSON Path Expression
Expressão que é aplicada à estrutura JSON recebida pelo componente For Each, filtrando-a. O For Each pode receber um objeto que possua vários elementos e a expressão JSON Path permite obter apenas aqueles que atenderem a uma condição específica. Para aprimorar a utilização do componente For Each, recomendamos que as expressões utilizadas no parâmetro JSON Path Expression sejam validadas utilizando a seguinte referência: https://jsonpath.com/.
$
String
Element Identifier
Elemento único que identifica a linha em processamento (por exemplo, elemento "id").
N/A
String
Parallel Execution
Quando habilitada, a opção faz com que elementos do array recebido pelo For Each sejam processados em paralelo, com um limite de até 10 execuções concorrentes - ou seja, caso o array recebido pelo componente For Each tenha 20 elementos, os 10 primeiros terão seu processamento iniciado imediatamente.
Assim que um desses processamentos terminar, o próximo elemento do array será processado e assim por diante, até que todo o array tenha sido processado. Caso a opção Parallel Execution esteja desabilitada, os elementos do array recebido pelo For Each são processados em série - é preciso que o primeiro tenha sido processado para que o processamento do segundo elemento possa começar.
False
Booleano
Fail On Error
A habilitação desse parâmetro suspende a execução do pipeline apenas quando há uma ocorrência grave na estrutura da iteração, impedindo a sua conclusão por completo. A ativação do parâmetro Fail On Error não tem ligação com erros ocorridos nos componentes utilizados para a construção dos subpipelines (onProcess e onException). Se você quiser que a execução seja interrompida para qualquer tipo de ocorrência de erro, avalie a utilização do componente Do While. Clique aqui para ler sobre esse componente e validar se ele se aplica ao seu cenário.
False
Booleano
Exemplos de Expressões JSON Path
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.
Obtém todo o conteúdo do body da mensagem recebida.
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: 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