> For the complete documentation index, see [llms.txt](https://help.hyperflow.global/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.hyperflow.global/docs/builder-hyperflow/gerenciamento-de-aplicativos/fluxos/controle-de-fluxo/foreach.md).

# ForEach

O módulo **ForEach** executa uma sequência de módulos uma vez para **cada item de uma lista** (por exemplo, uma lista de contatos ou o resultado de uma consulta). É útil sempre que você precisa repetir a mesma ação várias vezes, uma para cada item, sem duplicar módulos manualmente no fluxo.

Diferente dos demais módulos, o ForEach é um **contêiner**: ele aparece no diagrama como uma área que pode ser redimensionada, e você posiciona os módulos que devem se repetir **dentro** dele.

***

### 🧭 Como acessar

1. No menu lateral, clique em **Gerenciamento de aplicativos**.
2. Em seguida, clique em **Fluxos**.
3. Abra ou crie um fluxo e acesse a área de trabalho do fluxo.
4. No painel de módulos, localize a categoria **Controle de fluxo** (identificada pela cor ciano).
5. Arraste o módulo **ForEach** para a área de trabalho do fluxo.
6. Arraste os módulos que devem se repetir para **dentro** da área do ForEach.

<figure><img src="https://3829578295-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRWteFkm020DS5IbXoSgj%2Fuploads%2Fa1bXd9ige0x7rr72m2K6%2Fimage.png?alt=media&amp;token=0f2f89bd-5f7a-4085-a71d-80bd7f0420ce" alt=""><figcaption><p>Imagem 1 - Painel de módulos com a categoria Controle de fluxo expandida e o módulo ForEach visível no Hyperflow Integrações.</p></figcaption></figure>

***

### 🔍 Conhecendo o módulo

Ao clicar no módulo (fora da área dos módulos internos), um painel de configuração é aberto na lateral da tela.

<figure><img src="https://3829578295-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRWteFkm020DS5IbXoSgj%2Fuploads%2F0pQPiTl5ETtSZajxCyoB%2F02-painel-config-aberto.png?alt=media&amp;token=42feaf71-14db-45d8-9550-6183b15a970e" alt=""><figcaption><p>Imagem 2 - Painel de configuração do módulo ForEach aberto.</p></figcaption></figure>

***

#### 📋 Fonte de dados

No campo **Fonte de dados**, informe a variável do fluxo que contém a lista de itens a processar (ex.: `{{input.contatos}}`). O valor precisa ser uma lista — se a variável não for uma lista, o ForEach não consegue processar e segue pela saída de erro.

<figure><img src="https://3829578295-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRWteFkm020DS5IbXoSgj%2Fuploads%2FPTAXGUTZBTb9veyI8q2Q%2F03-fonte-dados-lista.png?alt=media&amp;token=66b12771-a759-488f-9588-daba8868cd9c" alt=""><figcaption><p>Imagem 3 - Campo Fonte de dados preenchido com uma variável de lista.</p></figcaption></figure>

***

#### 🔢 Limite de iterações (opcional)

Defina o número máximo de itens que serão processados. Se deixar em branco, o módulo processa **até 1.000 itens** da lista.

***

#### ⚙️ Modo de execução

* **Sequencial** — processa um item de cada vez, na ordem da lista.
* **Paralelo** — processa vários itens ao mesmo tempo.

Quando o modo **Paralelo** é escolhido, aparece o campo **Tamanho do lote**, para definir quantos itens processar simultaneamente.

{% hint style="info" %}
Atualmente, mesmo informando um valor no campo **Tamanho do lote**, o processamento paralelo agrupa os itens em lotes de até 10 por vez.
{% endhint %}

<figure><img src="https://3829578295-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRWteFkm020DS5IbXoSgj%2Fuploads%2FDU7Sdfflplh3tqhwrfKm%2F04-modo-paralelo-lote.png?alt=media&amp;token=d63ac1a2-674f-4b49-8165-d0cd79022029" alt=""><figcaption><p>Imagem 4 - Campo Modo de execução com o modo Paralelo selecionado, mostrando o campo Tamanho do lote.</p></figcaption></figure>

***

#### ⚠️ Tratamento de erro

* **Parar** — se algum item falhar durante o processamento, o ForEach interrompe e segue pela saída de erro do módulo.
* **Continuar** — o ForEach processa todos os itens possíveis, mesmo que alguns falhem, e segue pela saída de sucesso com o resultado de cada item (indicando quais tiveram sucesso e quais falharam).

***

#### 🔀 Portas do módulo

O ForEach tem portas de dois tipos:

* **Início** — conecta ao primeiro módulo dentro do contêiner; é por onde cada iteração começa.
* **Sucesso da iteração** / **Erro da iteração** — dentro do contêiner, você precisa conectar a saída do último módulo daquela sequência interna de volta a uma dessas duas entradas do ForEach, para indicar que aquela iteração terminou.
* **Sucesso** / **Erro** (fora do contêiner) — disparam apenas depois que **todos** os itens da lista já foram processados.

{% hint style="warning" %}
Apenas o **primeiro módulo** conectado à porta Início recebe diretamente os dados do item atual (`{{input.item}}`) e sua posição na lista (`{{input.index}}`). Se você tiver mais de um módulo em sequência dentro do ForEach, os módulos seguintes só recebem o que o módulo anterior repassar.
{% endhint %}

<figure><img src="https://3829578295-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRWteFkm020DS5IbXoSgj%2Fuploads%2FARYazFqJszNHhBpC0lk4%2Fimage.png?alt=media&amp;token=4fc1d4a5-3f48-41d8-b72c-b6ea13e3bd8d" alt=""><figcaption><p>Imagem 5 - Módulo ForEach com módulos internos conectados até a porta "Sucesso da iteração".</p></figcaption></figure>

***

### 💡 Caso de uso

**Cenário:** uma empresa tem uma lista de contatos que precisa receber uma mensagem personalizada de aniversário, gerada a partir de uma consulta a um banco de dados.

**Configuração:**

1. Adicione um módulo de consulta ao banco de dados, que retorna uma lista de contatos aniversariantes.
2. Adicione o módulo **ForEach** logo em seguida, com **Fonte de dados** apontando para essa lista.
3. Dentro do ForEach, adicione um módulo de envio de mensagem, usando `{{input.item.nome}}` e `{{input.item.telefone}}`.
4. Conecte a saída desse módulo de envio à porta **Sucesso da iteração** do ForEach.
5. Conecte a saída **Sucesso** (externa) do ForEach à continuação do fluxo.

**Resultado:** cada contato da lista recebe automaticamente sua própria mensagem de aniversário personalizada.

***

### 📌 Dicas úteis

* Use o modo **Sequencial** quando a ordem de processamento importa; use **Paralelo** para acelerar o processamento de listas grandes quando a ordem não é importante.
* Sempre conecte a saída interna do último módulo à porta **Sucesso da iteração** (ou **Erro da iteração**), para que o ForEach saiba quando cada item terminou.
* Se precisar processar mais de 1.000 itens, será necessário dividir a lista em partes antes de usar o ForEach.
* Use **Continuar** no tratamento de erro quando quiser processar o máximo de itens possível, mesmo que alguns falhem.

***

### 📝 Resumo

* O módulo **ForEach** repete uma sequência de módulos para cada item de uma lista.
* É um contêiner: os módulos que devem se repetir ficam posicionados dentro dele no diagrama.
* Processa até 1.000 itens por padrão, nos modos Sequencial ou Paralelo.
* Só o primeiro módulo dentro do ForEach recebe diretamente os dados do item (`{{input.item}}`) e sua posição (`{{input.index}}`).
* As saídas **Sucesso** e **Erro** externas só disparam depois que todos os itens forem processados.
