> ## Documentation Index
> Fetch the complete documentation index at: https://docs.twenty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Utilizați Iterator

> Parcurgeți array-uri de înregistrări pentru a executa acțiuni asupra fiecărui element.

Iterator vă permite să parcurgeți un array de înregistrări și să efectuați acțiuni pe fiecare în parte. Este esențial pentru fluxuri de lucru care trebuie să proceseze mai multe înregistrări returnate de Search Records sau primite prin webhook-uri.

## Când să folosiți Iterator

| Scenariu                              | Exemplu                                                |
| ------------------------------------- | ------------------------------------------------------ |
| **Procesați rezultatele căutării**    | Trimiteți e-mail fiecărei persoane găsite              |
| **Gestionați array-urile de webhook** | Creați înregistrări pentru fiecare element, în ordine  |
| **Actualizări în masă**               | Actualizați mai multe înregistrări cu valori calculate |
| **Notificări**                        | Alertați mai multe persoane despre un eveniment        |

## Înțelegerea Iteratorului

Iterator așteaptă un **array** ca intrare. Apoi:

1. Preia primul element din array
2. Rulează toate acțiunile din interiorul Iteratorului cu acel element
3. Trece la următorul element
4. Repetă până când toate elementele sunt procesate

### Selectarea tabloului peste care să se itereze

Majoritatea surselor de tablouri (Search Records, un câmp de tablou dintr-un webhook, un declanșator manual Bulk) pot fi selectate direct în selectorul de variabile.

Când un pas de tip **Code** sau **Logic Function** returnează un *tablou de nivel superior*, rezultatul său apare în selectorul de variabile ca intrări indexate (`0`, `1`, `2`, …). Pentru a itera peste întregul tablou, selectează opțiunea **Whole list** pentru acel pas — Iteratorul deduce apoi automat structura fiecărui element din listă.

## Configurare de bază

### Exemplu: Trimiteți e-mail tuturor din rezultatele căutării

**Obiectiv**: Găsiți toate contactele dintr-o companie specifică și trimiteți fiecăruia un e-mail personalizat.

### Pasul 1: Căutați înregistrări

1. Adăugați acțiunea **Search Records**
2. Obiect: **Persoane**
3. Filtru: Compania este egală cu "Acme Inc"
4. Aceasta returnează un array de persoane

### Pasul 2: Verificați dacă există rezultate

1. Adăugați acțiunea **Filter**
2. Condiție: `{{searchRecords.length}}` este mai mare decât 0
3. Aceasta previne erorile Iteratorului când rezultatele sunt goale

### Pasul 3: Adăugați un Iterator

1. Adăugați acțiunea **Iterator**
2. Intrare pentru array: selectați `{{searchRecords}}`
3. Aceasta creează o buclă

### Pasul 4: Adăugați acțiuni în interiorul Iteratorului

Acțiunile plasate după Iterator rulează pentru fiecare element:

1. Adăugați acțiunea **Send Email** (în interiorul Iteratorului)
2. Către: `{{iterator.currentItem.email}}`
3. Subiect: Salut `{{iterator.currentItem.firstName}}`!
4. Conținut: Mesaj personalizat folosind câmpurile elementului curent

### Rezultat

Dacă Search Records returnează 5 persoane, Iteratorul:

* Trimite e-mail persoanei 1
* Trimite e-mail persoanei 2
* ... continuă pentru toate cele 5

## Accesarea datelor elementului curent

În interiorul Iteratorului, folosiți `{{iterator.currentItem}}` pentru a accesa înregistrarea curentă:

| Variabilă                               | Descriere                                   |
| --------------------------------------- | ------------------------------------------- |
| `{{iterator.currentItem}}`              | Întregul obiect al înregistrării curente    |
| `{{iterator.currentItem.id}}`           | ID-ul înregistrării                         |
| `{{iterator.currentItem.email}}`        | Câmp de e-mail                              |
| `{{iterator.currentItem.company.name}}` | Numele companiei asociate                   |
| `{{iterator.index}}`                    | Poziția curentă în array (indexare de la 0) |

În selectorul de variabile, poți fie să intri într-un câmp specific al elementului curent, fie să alegi **Use the whole item** pentru a face referire la întregul element curent (`{{iterator.currentItem}}`). Selectarea întregului element este utilă atunci când vrei să transmiți o înregistrare completă direct într-un pas ulterior, în loc să o reconstruiești câmp cu câmp.

## Tipare comune

### Actualizați mai multe înregistrări

**Obiectiv**: Marcați toate sarcinile întârziate ca "Late"

```
1. Search Records (Tasks, Due Date < Today, Status ≠ Completed)
2. Filter (length > 0)
3. Iterator (searchRecords)
   └── Update Record
       - Object: Tasks
       - Record: {{iterator.currentItem.id}}
       - Status: Late
```

### Creați înregistrări dintr-un array

**Obiectiv**: Webhook-ul primește o comandă cu mai multe articole, creați o înregistrare pentru fiecare

```
1. Webhook Trigger (receives items array)
2. Filter (items.length > 0)
3. Iterator (trigger.body.items)
   └── Create Record
       - Object: Order Items
       - Name: {{iterator.currentItem.name}}
       - Quantity: {{iterator.currentItem.qty}}
       - Related Order: {{trigger.body.orderId}}
```

### Procesare condițională în interiorul buclei

**Obiectiv**: Trimiteți e-mail doar contactelor cu adrese valide

```
1. Search Records (People)
2. Iterator (searchRecords)
   └── Filter (currentItem.email is not empty)
       └── Send Email
           - To: {{iterator.currentItem.email}}
```

## Depanare

### "Iterator expects an array"

**Cauză**: Ați transmis o singură înregistrare în loc de un array.

**Remediere**: Asigurați-vă că transmiteți rezultatul acțiunii Search Records sau un câmp de tip array, nu o singură înregistrare.

```
✅ Correct: {{searchRecords}}
❌ Wrong: {{searchRecords[0]}}
```

### Iteratorul nu rulează

**Cauză**: Array-ul este gol.

**Remediere**: Adăugați un Filter înainte de Iterator pentru a verifica lungimea array-ului:

```
Filter: {{searchRecords.length}} > 0
```

### Acțiunile rulează de prea multe ori

**Cauză**: Search Records a returnat mai multe înregistrări decât era de așteptat.

**Remediere**:

* Adăugați filtre mai specifice în Search Records
* Setați o limită în Search Records (maxim 200)
* Adăugați un Filter în interiorul Iteratorului pentru condiții suplimentare

## Considerații de performanță

* **Utilizarea creditelor**: Fiecare iterație consumă credite pentru acțiunile sale
* **Timp**: Array-urile mari necesită mai mult timp pentru a fi procesate
* **Limite**: Luați în considerare procesarea în loturi a operațiunilor foarte mari
* **Limite de rată**: Apelurile către API-uri externe pot atinge limitele de rată la multe iterații

## Cele mai bune practici

1. **Verificați întotdeauna lungimea array-ului** înainte de Iterator pentru a evita erorile
2. **Adăugați filtre în interiorul buclelor** când nu toate elementele trebuie procesate
3. **Redenumiți pasul Iterator** pentru a descrie prin ce iterează
4. **Testați cu array-uri mici** înainte de a procesa seturi mari de date
5. **Monitorizați rulările fluxurilor de lucru** pentru a vă asigura că iterațiile se finalizează conform așteptărilor

## Conexe

* [Acțiuni ale fluxurilor de lucru](/l/ro/user-guide/workflows/capabilities/workflow-actions)
* [Cum să utilizați ramurile](/l/ro/user-guide/workflows/capabilities/use-branches-in-workflows)
* [Întrebări frecvente despre fluxurile de lucru](/l/ro/user-guide/workflows/how-tos/need-more-help/workflows-faq)
