# Iteratorer

## Hvordan iteratorer fungerer i praksis

Iteratorer kan brukes når du vil vise flere elementer av samme type, for eksempel en liste. Dette er nyttig i tilfeller der du vil hente frem alle linjer i et datasett, som produkter i et tilbud eller punkter i en sjekkliste.

Tidligere så vi at punktum i en variabel brukes til å binde et undertema til et hovedtema, for eksempel {kunde.navn}. Iteratoren bygger videre på dette prinsippet, men i stedet for å koble én verdi, henter den flere elementer i en liste samtidig.

For å bruke iteratorer starter du med en variabel som peker på datasettet du vil iterere over. For å markere selve starten legger du til en hashtag foran variabelen, for eksempel: `{#billing.billingLines}`. Her fungerer hashtaggen som et signal til systemet om at det nå skal gå gjennom hele listen med data, i dette tilfellet tilbudslinjene.&#x20;

Til slutt må iteratoren lukkes med `{/}`, slik at systemet vet hvor listen slutter. Hele iteratoren blir dermed en pakke som starter, henter inn de feltene du har valgt, og avsluttes riktig. Resultatet er at alle elementene i listen vises automatisk i tabellen, uten at du trenger å legge inn hver variabel manuelt.

***

### Eksempel: Bruk av iteratorer i en tilbudsmal

{% stepper %}
{% step %}

### Finn frem til linjer

* Klikk på variabellisten til tilbud

<div align="left"><figure><img src="https://3216209513-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6aWzMnk8Uk6WDJJWUE46%2Fuploads%2FURriAYLOj4fTn9RXBh0P%2Fimage.png?alt=media&#x26;token=29bca89c-aa13-4ae7-83a5-b4865afc8812" alt="" width="375"><figcaption></figcaption></figure></div>

* Klikk deg videre inn på linjer

<div align="left"><figure><img src="https://3216209513-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6aWzMnk8Uk6WDJJWUE46%2Fuploads%2FTYig6QZKWDaR6a2Tv4St%2Fimage.png?alt=media&#x26;token=bea512fa-ccf6-43c9-b18f-517ba9209c80" alt="" width="375"><figcaption></figcaption></figure></div>

&#x20;
{% endstep %}

{% step %}

### Velg riktige linjer

* Velg iteratorer fra listen under "Linjer" (Listen er ikke uttømmende)

<div align="left"><figure><img src="https://3216209513-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6aWzMnk8Uk6WDJJWUE46%2Fuploads%2FBjut4Ok1pvpMXXB46oz3%2Fimage.png?alt=media&#x26;token=fd4229a6-b3ee-446e-8151-95cb71544ee7" alt="" width="357"><figcaption></figcaption></figure></div>

{% endstep %}

{% step %}

### Splitt opp iteratoren

* I en tilbudsmal vil du ofte vise produkter med antall, pris og sum. Dette settes vanligvis inn i en tabell.
* Del opp iteratoren for å vise flere felt i tabellen:&#x20;

<figure><img src="https://3216209513-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6aWzMnk8Uk6WDJJWUE46%2Fuploads%2F6BbLgzItO7dB67ZLZCSZ%2Fimage.png?alt=media&#x26;token=d4eb4b29-dc35-430a-9398-346df8f7990a" alt=""><figcaption></figcaption></figure>

* Husk alltid å lukke iteratoren med `{/}` .

{% endstep %}

{% step %}

### Resultat&#x20;

* Slik kan et resultat se ut når malen benyttes for et tilbud med fire linjer:

<figure><img src="https://3216209513-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6aWzMnk8Uk6WDJJWUE46%2Fuploads%2FTdQuofUJhYuWOr9eZY3d%2Fimage.png?alt=media&#x26;token=4573c7a6-df9e-46b0-b7b6-3a8aeb22d53b" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Tabellen utvides automatisk for å samsvare med antall linjer i tilbudet.
{% endhint %}
{% endstep %}
{% endstepper %}

<details>

<summary>Telle (count)</summary>

Når du vil telle noe i en iterator, bruker du funksjonen **count**. Etter at du har startet iteratoren med `{#submissions}`, legger du til `| count:`. Dette forteller systemet at du vil telle antall elementer i listen. Deretter må du legge inn en betingelse som sier *hva* som skal telles.

For eksempel, hvis du vil telle antall innsendelser hvor typen er "slukker", skriver du: `'type=== "slukker"`

Når man setter sammen hele variabelen, blir den seende slik ut:&#x20;

{submissions | count:'type=== "slukker"'}.&#x20;

For å bryte ned variabelen vil dette si&#x20;

Bruke iterator = {#submissions}&#x20;

```
{submissions | count:'type==="slukker"'}
```

</details>

<details>

<summary>Filtrere (where)</summary>

Når du vil filtrere i en iterator, bruker du funksjonen **where**. Her følger du samme prinsipp som når du skal telle, men med kodeord **"where"**. For eksempel om du ønsker å kun vise innsendelser som har en signatur, da kan du gjøre slik:

\
{#submissions | where:'signatur'}{/}

```
{#submissions | where:'signatur'}{/}

```

Eller hvis du ønsker å iterere over alle som er av en viss type, kan du gjøre slik:

```
{#submissions | where:'type==="slukker"'}{/}
```

Du må alltid avslutte en variabel med `{/}` for å "lukke" den. Dette markerer slutten og gjør at systemet forstår betingelsen riktig.&#x20;

</details>
