# Subpipelines

{% hint style="info" %}
Para acessar os *subpipelines* e usar as funcionalidades presentes nesse artigo, você precisa ter a permissão PIPELINE:CREATE. Aprenda mais na[ documentação sobre Papéis](/documentation/developer-guide/pt-br/platform-administration/administration/new-access-control/access-control-roles.md).
{% endhint %}

*Subpipelines* são subfluxos do *pipeline* necessariamente vinculados e disparados por um componente do fluxo principal, por exemplo, o [**For Each**](/documentation/connectors-and-triggers/pt-br/connectors/logic/for-each.md).

Vamos imaginar um processo chamado “Validação de Dados de Cliente”. Esse processo obtém os dados dos clientes através do *endpoint* REST e então verifica se cada registro de cliente possui os dados necessários.

Para iterar pela coleção de registros, usaremos o componente **For Each (Processa clientes)**.

<figure><img src="/files/JCHyLDZHXlCZGqVvUZ72" alt=""><figcaption></figcaption></figure>

Toda vez que um componente com capacidade de iterar por coleções é adicionado a um *pipeline*, dois *subpipelines* são criados: **OnProcess** e **OnException**.

### **OnProcess** <a href="#onprocess" id="onprocess"></a>

Este *subpipeline* implementa o subfluxo que processa cada item da coleção. Ele tem seu próprio canvas, que pode ser acessado pelo menu do componente:

<figure><img src="/files/XE0qFdZVgZSmQQDMMlkt" alt=""><figcaption></figcaption></figure>

No caso do processo “Validação de Dados de Cliente”, o *subpipeline* **OnProcess** trata todos os registros da coleção de clientes individualmente e verifica se o atributo “Data de Nascimento” está preenchido em cada um deles:

<figure><img src="/files/DfZQVF0McJtCDkCnO29o" alt=""><figcaption></figcaption></figure>

Ao término de cada execução do *subpipeline* **OnProcess**, um atributo *success* é retornado, indicando se houve sucesso ou falha na execução. Por padrão, esse atributo é retornado com valor `“false”`. Assim, você precisa informar explicitamente quando a execução ocorrer conforme esperado.

No processo “Validação de Dados de Cliente”, a seguinte resposta de sucesso será retornada pelo componente **JSON Generator (Sucesso)** quando o atributo “Data de Nascimento” estiver preenchido:

```
{"success": true}
```

Caso o atributo “Data de Nascimento” esteja vazio, o componente **JSON Generator (Falha)** retorna o atributo com valor `“false”`:

```
{"success": false}
```

Nesse caso, é gerada uma exceção através do componente **Assert (Erro Interno)**:

<figure><img src="/files/hmqtw4N8xKJbeRGhx7TO" alt=""><figcaption></figcaption></figure>

O atributo **Fail On Error** indica que a execução do fluxo do *pipeline* será interrompida e será lançada uma exceção caso a condição do componente *Assert* não for validada.

{% hint style="info" %}
Quando a exceção é gerada por um componente de um *subpipeline*, a execução do *subpipeline* **OnException** é iniciada. Por outro lado, se a exceção decorrer de um componente do fluxo principal, a execução do *pipeline* será interrompida por erro.
{% endhint %}

### **OnException** <a href="#onexception" id="onexception"></a>

Este *subpipeline* implementa o fluxo que trata uma exceção na execução do *subpipeline* **OnProcess**. Ele tem seu próprio canvas, que pode ser acessado pelo menu do componente:

<figure><img src="/files/NP2GwDqxDQauWUljH2Qk" alt=""><figcaption></figcaption></figure>

Quando o **OnException** é executado no processo “Validação de Dados de Cliente”, uma chamada é feita a um *endpoint* REST, registrando o incidente e gerando uma mensagem de erro na página [*Pipeline logs*](/documentation/developer-guide/pt-br/development-cycle/dashboards/pipeline-logs.md).

<figure><img src="/files/d8AOEJAwQzvbo1gPewpA" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
A utilização do **OnException** é opcional, no entanto, é uma prática fortemente recomendada. Diversos componentes da Digibee Integration Platform suportam o atributo **Fail On Error** e permitem que estratégias de tratamento de erro e recuperação sejam implementadas através do **OnException**, tornando o *pipeline* muito mais robusto e resiliente.
{% endhint %}

Para saber mais, leia o artigo [*Pipeline*](/documentation/developer-guide/pt-br/development-cycle/build-overview/pipelines.md).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digibee.com/documentation/developer-guide/pt-br/development-cycle/build-overview/pipelines/subpipelines.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
