Kjo faqe mbulon modelet e avancuara për të punuar me grupet e përsëritjes në rtSurvey. Për bazat e konfigurimit të grupit të përsëritjes, shikoni Grupimi dhe Përsëritjet.


Numërimi dinamik i përsëritjes

Si parazgjedhje, numëruesi vendos sa herë të përsëritet. Mund të fiksoni numrin e përsëritjeve duke përdorur repeat_count:

typenamelabelrepeat_count
begin_repeathousehold_membersAnëtari i familjes${num_members}
textmember_nameEmri i anëtarit
integermember_ageMosha
end_repeat

Përsëritja ekzekutohet saktësisht ${num_members} herë, ku num_members u mblodh më herët në formular. Numëruesi nuk mund të shtojë ose heqë instanca.


Aksesi me indeks: indexed-repeat()

Aksesoni vlerën e fushës së instancës specifike të përsëritjes nga jashtë grupit të përsëritjes duke përdorur indexed-repeat(repeatedField, repeatGroup, index):

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

Kjo është e dobishme për ndërtimin e fushave përmbledhëse ose referimin e të dhënave të anëtarit “kryesor” pas përsëritjes.


Pozicioni aktual i instancës: index()

Brenda grupit të përsëritjes, index() kthen pozicionin e instancës aktuale bazuar në 1. Përdoreni për të etiketuar çdo përsëritje ose krijuar identifikues unikë:

typenamelabel
begin_repeatplotsParcela
noteplot_labelNumri i parcelës ${index()}
textplot_idID e parcelës
end_repeat

Referimi i fushave në të njëjtën instancë

Brenda përsëritjes, përdorni ${fieldname} për të referuar fushën tjetër në të njëjtën instancë të përsëritjes. Nuk nevojitet indexed-repeat() brenda të njëjtës lak:

typenamelabelrelevant
begin_repeatmembersAnëtari
textmember_nameEmri
integermember_ageMosha
textschool_nameEmri i shkollës${member_age} < 18
end_repeat

Referimi i fushave prind nga brenda përsëritjes

Fushat jashtë (mbi) grupin e përsëritjes mund të referohen normalisht me ${fieldname}:

typenamelabel
textvillageEmri i fshatit
begin_repeatplotsParcelë bujqësore
noteplot_contextParcela në ${village}
end_repeat

Përmbledhja e të dhënave të përsëritjes

Përdorni funksionet e agregatit të përsëritjes jashtë grupit të përsëritjes për të përmbledhur:

FunksioniShembulliPërshkrimi
count(group)count(${household_members})Numri i instancave
sum(field)sum(${loan_amount})Shuma e fushës numerike
min(field)min(${member_age})Vlera minimale
max(field)max(${member_age})Vlera maksimale
join(sep, field)join(', ', ${member_name})Lista e ndarë me presje
count-if(group, expr)count-if(${members}, ${member_age} < 18)Numërim i kushtëzuar
sum-if(field, expr)sum-if(${loan_amount}, ${loan_amount} > 500)Shumë e kushtëzuar
join-if(sep, field, expr)join-if(', ', ${name}, ${age} >= 18)Bashkim i kushtëzuar

Shembull: Përmbledhje familje

typenamelabelcalculation
integernum_membersSa anëtarë?
begin_repeatmembersAnëtari${num_members}
textmember_nameEmri
integermember_ageMosha
end_repeat
calculatetotal_memberscount(${members})
calculatechildren_countcount-if(${members}, ${member_age} < 18)
calculateadult_namesjoin-if(', ', ${member_name}, ${member_age} >= 18)
notesummary${total_members} anëtarë; ${children_count} nën 18. Të rritur: ${adult_names}

Përsëritjet e ndërfutura

Grupi i përsëritjes mund të përmbajë grupin tjetër të përsëritjes. Përdoreni me kujdes — përsëritjet e ndërfutura shtojnë kompleksitet dhe mund të jenë konfuze për numëruesit.

typenamelabel
begin_repeathouseholdsFamilja
texthh_idID e familjes
begin_repeathh_membersAnëtari
textmember_nameEmri i anëtarit
end_repeat
end_repeat

Për të referuar fushën në përsëritjen e jashtme nga përsëritja e brendshme, përdorni ${fieldname} — zgjidhet te paraardhësi më i afërt përputhës:

Brenda përsëritjes hh_members, ${hh_id} kthen ID e familjes aktuale, jo të gjitha familjet.


Rank brenda grupeve të përsëritjes: rank-index()

Kur fusha rank ekziston brenda përsëritjes, përdorni rank-index(instanceNumber, repeatedField) nga jashtë për të marrë rangun ordinal të instancës specifike:

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

rank-index(1, ${score}) kthen indeksin e instancës të rezultatit më të lartë.


Praktikat më të mira

  1. Gjithmonë përdorni repeat_count kur numri i përsëritjeve është i njohur paraprakisht — kjo parandalon numëruesit të shtojnë ose heqin aksidentalisht instanca.
  2. Mbajeni grupet e përsëritjes të fokusuara — përsëritja me 20+ pyetje për instancë është e vështirë për t’u naviguar.
  3. Emërtoni grupet e përsëritjes qartë (p.sh., household_members, jo repeat1) — emri shfaqet në thirrjet e funksioneve dhe të dhënat e eksportuara.
  4. Testoni me numrin maksimal të pritur të instancave për të verifikuar performancën.
  5. Përdorni pamjen field-list në grupin e përsëritjes për të treguar të gjitha fushat në një ekran për instancë (mobile).

Kufizimet

  • indexed-repeat() kërkon indeks të vlefshëm (1 deri te numri i instancave) — indekset jashtë diapazonit kthejnë bosh.
  • Përsëritjet e ndërfutura përtej 2 niveleve nuk rekomandohen dhe mund të shkaktojnë probleme shfaqjeje në disa klientë.
  • Funksionet e agregatit (sum, count, etj.) operojnë në të gjithë grupin e përsëritjes — nuk mund të agregatoni nëngrupet e instancave pa variantet *-if.
A ishte e dobishme kjo faqe?