O Block Execution declara um trecho de pipeline para um fim específico. Ele pode ser usado para:

  • separar logicamente trechos de um pipeline extenso de maneira que o seu comportamento se torne mais fácil de entender;
  • permitir que os diferentes caminhos criados por componentes de desvio de fluxo possam se unir ao final do trecho declarado (mais detalhes adiante);
  • declarar um trecho de pipeline para tratamento de erros específicos.

O Block Execution faz parte de um conjunto de componentes que trabalham com subpipelines para executar as suas funções.

Para trabalhar com este tipo de componente, você precisa levar em consideração 2 conceitos importantes:

  • Subpipeline definido no bloco "onProcess": o pipeline definido nesse bloco é o trecho de execução do componente.
  • Subpipeline definido no bloco "onException": o pipeline definido nesse bloco é executado sempre que ocorrer uma falha no bloco “onProcess”. Veja mais detalhes abaixo.

O Block Execution não possui nenhuma configuração específica para o seu funcionamento, bastando apenas construir os subpipelines “onProcess” e “onException”.

Definindo o subpipeline executado como parte do bloco

Para definir o subpipeline a ser executado, basta clicar no ícone “onProcess” do componente:

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.

IMPORTANTE: a entrada desse subpipeline será alimentada com a mensagem imediatamente anterior ao Block Execution.

Utilizando o Block Execution para unir caminhos diferentes de um componente de desvio de fluxo

Quando um componente de desvio de fluxo é utilizado, assim como o Choice, múltiplos caminhos são criados no pipeline para atender ao desvio de fluxo desejado. Por exemplo:

No caso acima, você pode ver 2 desvios de fluxo: path1 e path2, que levam a caminhos completamente diferentes no pipeline. Suponha que seja necessário unir esses caminhos para continuar a execução do pipeline. O componente Block Execution tem a função de realizar esse agrupamento de caminhos diferentes em um bloco de execução separado. Quando um dos caminhos terminar, o controle volta para o Block Execution que, por sua vez, é seguido pelo próximo componente. Veja:

Nesse outro exemplo acima, o Block Execution é seguido pelo JSON Generator. Dentro do subpipeline “onProcess” do Block Execution, foi utilizado um componente Choice com desvios.

Quando os desvios chegam ao final, eles encerram o Block Execution, que retorna ao pipeline principal e executa o componente seguinte - nesse caso, o JSON Generator.

Dessa forma, é possível unir e organizar subpipelines que contenham fluxos com ramificações.

Tratamento de erros

Assim como todos os outros componentes que possuem os subpipelines “onProcess” e “onException”, o Block Execution também faz o tratamento de erros por meio da execução do subpipeline “onException”.

Um erro pode ser ocasionado por outros componentes quando eles identificam situações adversas. Geralmente os componentes possuem uma propriedade de configuração denominada “failOnError”, que controla se você deseja ou não gerar um erro que possa ser tratado em fluxos “onException”.

Assim, quando um componente "lança" um erro e está com a propriedade “failOnError” habilitada, o Block Execution intercepta o erro e o envia para tratamento no subpipeline “onException”.

Estas são as situações especiais que você deve levar em consideração:

  • se um fluxo “onException” não for definido, o Block Execution simplesmente repassa o erro adiante para que outro componente com execução por subpipeline o trate. Por outro lado, se o fluxo principal do pipeline for utilizado, então o pipeline é encerrado com o erro;
  • se um novo erro ocorre durante o subpipeline “onException”, o Block Execution também repassa o erro adiante para que outro componente com execução por subpipeline o trate. Mas se o fluxo principal do pipeline for utilizado, o pipeline é igualmente encerrado com o erro.

Para entender melhor o conceito de subpipelines, clique aqui.

Encontrou sua resposta?