Deze pagina behandelt geavanceerde patronen voor het werken met herhalingsgroepen in rtSurvey. Voor de basis van het instellen van een herhalingsgroep, zie Groepering en herhalingen.


Dynamische herhalingstelling

Standaard beslist de enumerator hoe vaak te herhalen. U kunt het aantal herhalingen fixeren met repeat_count:

typenamelabelrepeat_count
begin_repeathousehold_membersHuishoudlid${num_members}
textmember_nameNaam van lid
integermember_ageLeeftijd
end_repeat

De herhaling wordt precies ${num_members} keer uitgevoerd, waarbij num_members eerder in het formulier is verzameld. De enumerator kan geen instanties toevoegen of verwijderen.


Geïndexeerde toegang: indexed-repeat()

Toegang krijgen tot de veldwaarde van een specifieke herhalingsinstantie van buiten de herhalingsgroep met indexed-repeat(herhaaldVeld, herhalingsgroep, index):

typenamelabelcalculation
calculatefirst_nameindexed-repeat(${member_name}, ${household_members}, 1)
calculatesecond_nameindexed-repeat(${member_name}, ${household_members}, 2)

Dit is nuttig voor het bouwen van samenvattingsvelden of het verwijzen naar de gegevens van het “primaire” lid na de herhaling.


Huidige instantiepositie: index()

Binnen een herhalingsgroep geeft index() de 1-gebaseerde positie van de huidige instantie terug. Gebruik het om elke herhaling te labelen of unieke identificatoren te maken:

typenamelabel
begin_repeatplotsPerceel
noteplot_labelPerceelnummer ${index()}
textplot_idPerceel-ID
end_repeat

Verwijzen naar velden in dezelfde instantie

Gebruik binnen een herhaling ${veldnaam} om te verwijzen naar een ander veld in dezelfde herhalingsinstantie. Er is geen indexed-repeat() nodig binnen dezelfde lus:

typenamelabelrelevant
begin_repeatmembersLid
textmember_nameNaam
integermember_ageLeeftijd
textschool_nameSchoolnaam${member_age} < 18
end_repeat

Verwijzen naar bovenliggende velden van binnenuit een herhaling

Velden buiten (boven) de herhalingsgroep kunnen normaal worden gerefereerd met ${veldnaam}:

typenamelabel
textvillageDorpsnaam
begin_repeatplotsLandbouwperceel
noteplot_contextPercelen in ${village}
end_repeat

Herhalingsgegevens samenvatten

Gebruik herhalingsaggregatiefuncties buiten de herhalingsgroep om samen te vatten:

FunctieVoorbeeldBeschrijving
count(groep)count(${household_members})Aantal instanties
sum(veld)sum(${loan_amount})Som van een numeriek veld
min(veld)min(${member_age})Minimumwaarde
max(veld)max(${member_age})Maximumwaarde
join(sep, veld)join(', ', ${member_name})Met komma’s gescheiden lijst
count-if(groep, expr)count-if(${members}, ${member_age} < 18)Voorwaardelijke telling
sum-if(veld, expr)sum-if(${loan_amount}, ${loan_amount} > 500)Voorwaardelijke som
join-if(sep, veld, expr)join-if(', ', ${name}, ${age} >= 18)Voorwaardelijke samenvoeging

Voorbeeld: Huishoudsamenvatting

typenamelabelcalculation
integernum_membersHoeveel leden?
begin_repeatmembersLid${num_members}
textmember_nameNaam
integermember_ageLeeftijd
end_repeat
calculatetotal_memberscount(${members})
calculatechildren_countcount-if(${members}, ${member_age} < 18)
calculateadult_namesjoin-if(', ', ${member_name}, ${member_age} >= 18)
notesummary${total_members} leden; ${children_count} onder 18. Volwassenen: ${adult_names}

Geneste herhalingen

Een herhalingsgroep kan een andere herhalingsgroep bevatten. Gebruik dit voorzichtig — geneste herhalingen voegen complexiteit toe en kunnen verwarrend zijn voor enumeratoren.

typenamelabel
begin_repeathouseholdsHuishouden
texthh_idHuishoud-ID
begin_repeathh_membersLid
textmember_nameNaam van lid
end_repeat
end_repeat

Om te verwijzen naar een veld in een buitenste herhaling vanuit de binnenste herhaling, gebruikt u ${veldnaam} — het wordt omgezet naar de dichtstbijzijnde overeenkomende voorouder:

Binnen de herhaling hh_members geeft ${hh_id} de ID van het huidige huishouden terug, niet alle huishoudens.


Rang binnen herhalingsgroepen: rank-index()

Wanneer een rank-veld bestaat binnen een herhaling, gebruik dan rank-index(instantienummer, herhaaldVeld) van buiten om de ordinale rang van een specifieke instantie te krijgen:

typenamelabelcalculation
calculatetop_scorerrank-index(1, ${score})

rank-index(1, ${score}) geeft de instantie-index van de hoogste score terug.


Aanbevolen werkwijzen

  1. Gebruik altijd repeat_count wanneer het aantal herhalingen van tevoren bekend is — dit voorkomt dat enumeratoren per ongeluk instanties toevoegen of verwijderen.
  2. Houd herhalingsgroepen gefocust — een herhaling met 20+ vragen per instantie is moeilijk te navigeren.
  3. Benoem herhalingsgroepen duidelijk (bijv. household_members, niet repeat1) — de naam verschijnt in functieaanroepen en geëxporteerde gegevens.
  4. Test met het maximale verwachte aantal instanties om de prestaties te verifiëren.
  5. Gebruik de weergave field-list op de herhalingsgroep om alle velden op één scherm per instantie te tonen (mobiel).

Beperkingen

  • indexed-repeat() vereist een geldige index (1 tot het aantal instanties) — indices buiten bereik retourneren leeg.
  • Geneste herhalingen dieper dan 2 niveaus worden niet aanbevolen en kunnen weergaveproblemen op sommige clients veroorzaken.
  • Aggregatiefuncties (sum, count, etc.) werken op de gehele herhalingsgroep — u kunt geen subset van instanties aggregeren zonder de *-if-varianten.
Was deze pagina nuttig?