O Do While permite a construção de blocos em loop dentro de um pipeline. Ele faz parte de um conjunto de componentes que trabalham com subpipelines para executar as suas funções.

Para trabalhar com esse tipo de componente, é importante levar em consideração:

Subpipeline definido no bloco "onProcess"

O pipeline definido nesse bloco é executado a cada iteração do loop. Portanto, se o loop tem 10 iterações, o subpipeline é executado 10 vezes.

Subpipeline definido no bloco "onException"

O pipeline definido nesse bloco é executado sempre que uma iteração do loop resultar em uma falha.

Dê uma olhada nos parâmetros de configuração docomponente:

  • Iteration: define o número máximo de vezes que o loop é executado (é possível parar o loop antes desse número ser atingido).

  • Timeout: tempo máximo que o loop deverá executar.

  • Loop Index: se a opção estiver ativada, uma propriedade “loopIndex” será inserida na mensagem apresentada a cada iteração do loop e informará o índice da iteração atual (1, 2, 3, …).

  • Interrupt Loop On Error: se opção for ativada, um erro ocorrido dentro de uma iteração causará a interrupção do loop como um todo. Do contrário, o loop continuará a partir da próxima iteração.

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 Do While:

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.

IMPORTANTE: a entrada desse subpipeline será alimentada com a mensagem imediatamente anterior ao Do While. Isso acontecerá na execução da iteração #1 do loop. Nas demais iterações, a mensagem apresentada será a mensagem final da iteração anterior e assim por diante. Se Loop Index estiver ativo, uma propriedade loopIndex será inserida na mensagem informando a iteração atual.

Interrompendo um loop

Para interromper um loop antes do número máximo de iterações definido, basta informar uma propriedade "loopBreak: true" no final da iteração. Se a propriedade for encontrada, o loop será quebrado.

Uma maneira de informar essa propriedade é usando o componente JSON Generator, que permite a definição de JSONs arbitrários no fluxo do pipeline.

Tratando erros no loop

O comportamento padrão do Do While é interromper o loop 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 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 Do While:

A entrada desse subpipeline será alimentada com uma mensagem de erro, que informará o que ocorreu com a iteração e o índice da iteração (loopIndex) que causou a falha.

{
"timestamp": <timestamp do erro>
"error": <mensagem do erro>
"code": 500
"loopIndex": <índice da iteração onde ocorreu o erro>
}

Cenários de utilização do componente Do While com tratamento de erros

Propriedade "Interrupt loop on error" habilitada e nenhum subpipeline definido em onException

  • o pipeline será interrompido imediatamente

  • um erro será emitido a partir do componente Do While

  • nenhum outro componente será invocado após o Do While

Propriedade "Interrupt loop on error" habilitada e um subpipeline definido em onException

  • o pipeline será interrompido imediatamente

  • o subpipeline definido em onException será executado e a saída dele alimentará o próximo componente após o Do While

  • o componente após o Do While será invocado

Propriedade "Interrupt loop on error" desabilitada e nenhum subpipeline definido em onException

  • a iteração onde ocorreu o erro será interrompida

  • uma mensagem de erro padrão será informada na entrada da próxima iteração e o loop continuará a ser executado normalmente

Propriedade "Interrupt loop on error" desabilitada e um subpipeline definido em onException

  • a iteração onde ocorreu o erro será interrompida

  • o subpipeline definido em onException será executado e a saída dele alimentará a próxima iteração

  • o loop continuará a ser executado normalmente

Erro durante o subpipeline onException

  • o loop será interrompido

  • o erro será lançado para o próximo componente ao qual o componente Do While esteja associado

  • caso o Do While esteja no fluxo principal do pipeline, então o pipeline será interrompido

  • se o Do While estiver dentro de um componente que possui subpipeline, então o subpipeline “onException” será invocado e o erro será informado na entrada desse subpipeline

Encontrou sua resposta?