# Tutorial de paginação - parte 2

O fluxo de integração segue o caminho FINISHED se o processo de migração de dados diário já terminou ou se ainda não chegou a hora de iniciá-lo.

Primeiramente, verificamos se o parâmetro *next execution timestamp* é nulo, isto é, não existe. Isso acontece durante a primeira execução do *pipeline*. Se for nulo, atribuímos um valor a ele.

Se o parâmetro *next execution timestamp* existe, o *pipeline* verifica se é hora de iniciar o processo de migração de dados ou se ele deve continuar esperando. Se for a hora de iniciar o processo, atribuímos o valor `EXTRACTING_DATA` à propriedade step, o que faz com que o fluxo siga o caminho EXTRACTING\_DATA na próxima execução.

Para construir o caminho FINISHED, siga esses passos:

<figure><img src="/files/AJJ9ahBu4z1SmR86HIgz" alt=""><figcaption><p><strong>O caminho FINISHED</strong></p></figcaption></figure>

&#x20; 1\. Adicione um componente Log.

Sempre adicione um componente Log após um componente Choice. Isso é considerado uma boa prática.

Como em todos os componentes Log, adicione uma mensagem descritiva no campo mensagem. Você pode aprender mais sobre esse componente [aqui](/documentation/connectors-and-triggers/pt-br/connectors/tools/log.md).

&#x20; 2\. Configure a condição Choice desse caminho como `$.control[?(@.step == 'FINISHED')]`**.**

Aplicando essa condição, o fluxo de integração seguirá esse caminho se o parâmetro *step* assumir valor `FINISHED`.

&#x20; 3\. Adicione um componente Choice.

Esse componente verifica se o parâmetro *next execution timestamp* existe.

Para construir o caminho que o fluxo segue caso esse parâmetro exista, siga esses passos:

&#x20; 1\. Adicione um componente Log.

&#x20; 2\. Configure a condição Choice desse caminho como `$.[?(@.control.nextExecutionTimestamp != null)]`.

&#x20; 3\. Adicione outro componente Choice.

Esse componente verifica se está ou não na hora de começar o processo de migração.

Para construir o caminho que o fluxo segue quando é hora de iniciar a migração, siga esses passos:

&#x20; 1\. Adicione um componente Log.

&#x20; 2\. Configure a condição Choice desse caminho como `$.control.[?(@.startTimestamp>= @.nextExecutionTimestamp)]`.

&#x20; 3\. Atualize os parâmetros de paginação utilizando um componente Object Store

Selecione a operação *Update by Object ID*, ative a opção *Upsert*, use o mesmo nome e ID do Object Store utilizado nos passos iniciais e configure o parâmetro *Document* dessa maneira:

```json
{
    $set:{
        "step": "EXTRACTING_DATA"
    }
}
```

Esse código atribui o valor `EXTRACTING_DATA` à propriedade *step*. Isso faz com que o *pipeline* siga o caminho EXTRACTING\_DATA na próxima execução.

&#x20; 4\. Configure uma mensagem de *output* usando um componente JSON Generator

Configure o parâmetro JSON deste componente desta maneira:

```json
{
    "message": "Migration will start at the next execution."
}
```

Para construir o caminho que o fluxo segue quando ainda não é hora de iniciar a paginação, siga esses passos:

&#x20; 1\. Adicione um componente Log.

&#x20; 2\. Configure a condição Choice desse caminho como `otherwise`.

&#x20; 3\. Configure uma mensagem de *output* usando um componente JSON Generator.

Configure o parâmetro JSON desse componente como:

```json
{
    "message": {{ CONCAT("A migração começará em ",  FORMATDATE( message.control.nextExecutionTimestamp, "timestamp", "dd/MM/yyyy HH:mm:ss")) }}
}
```

Agora, retorne ao componente Choice que verifica se o parâmetro next execution timestamp é nulo ou não.

Para construir o caminho que o fluxo segue quando esse parâmetro é nulo, siga esses passos:

&#x20; 1\. Adicione um componente Log.

&#x20; 2\. Configure a condição Choice desse caminho como `otherwise`.

&#x20; 3\. Configure o *timestamp* da próxima execução utilizando um componente Object Store.

Selecione a operação *Update by Object ID*, ative a opção *Upsert*, use o mesmo nome e ID do Object Store que usamos nos passos iniciais e configure o parâmetro *Document* como:

```json
{
    $set:{
        "nextExecutionTimestamp": {{ FORMATDATE(FORMATDATE(SUMDATE( NOW() , "DAY", 1), "timestamp", "dd/MM/yyyy 01:00:00"), "dd/MM/yyyy HH:mm:ss", "timestamp") }}
    }
}
```

Esse código faz com que o timestamp da próxima execução seja configurado para o próximo dia, às 1 da manhã.


---

# 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/resources/pt-br/best-practices/pagination-tutorial/pagination-tutorial-part-2.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.
