Funkcia Dynamický typ otázky umožňuje určiť vstupný widget a správanie overenia poľa za behu namiesto v čase návrhu formulára. Toto je pokročilé rozšírenie rtSurvey používané, keď typ dát na zber závisí od konfigurácie na strane servera, odpovede API alebo predchádzajúcej hodnoty poľa.

Bežným prípadom použitia je konfigurovateľný kontrolný zoznam inšpekcie, kde server definuje, ktoré polia sú požadované, aký typ sú (text, integer, select atď.) a aké možnosti sú dostupné — bez prestavby formulára pre každú konfiguráciu.


Ako to funguje

Pole označené ako dynamický typ otázky používa callapi() na načítanie svojej konfigurácie z API. Odpoveď API definuje:

  • Typ vstupu na renderovanie (text, integer, select_one atď.)
  • Dostupné voľby (pre typy select)
  • Pravidlá overovania

Pole je interne označené specialFeature: isDynamicQuestionType, čo hovorí formulárovému enginu, aby použil odpoveď API na konštrukciu widgetu namiesto statickej definície formulára.


Nastavenie

Krok 1: Načítanie konfigurácie poľa

Použite pole calculate s callapi() na načítanie dynamickej konfigurácie:

typenamelabelappearancecalculation
calculatefield_configcallapicallapi('POST', 'https://api.example.com/field-config', 1, 2, 0, '$.config', 10000, 0, '', '', '{"form_id": "##form_id##", "field_id": "inspection_result"}')

Krok 2: Odkazovanie konfigurácie v dynamickom poli

Dynamické pole používa callapi-verify() vo svojom appearance alebo constraint na prepojenie s načítanou konfiguráciou:

typenamelabelappearance
textinspection_resultVýsledok inšpekciecallapi-verify(dynamicParams)

Formulárový engine číta field_config a dynamicky určuje, či renderovať inspection_result ako pole text, integer alebo select_one.


Formát odpovede API

API by malo vrátiť JSON objekt opisujúci konfiguráciu poľa. Typická odpoveď:

  {
  "config": {
    "type": "select_one",
    "choices": [
      {"value": "pass", "label": "Vyhovuje"},
      {"value": "fail", "label": "Nevyhovuje"},
      {"value": "na", "label": "Nevzťahuje sa"}
    ],
    "required": true,
    "constraint": ". != ''"
  }
}
  

Príklad: Konfigurovateľný formulár inšpekcie

Formulár inšpekcie, kde sú položky kontrolného zoznamu a ich typy odpovedí načítané zo servera na základe kategórie inšpekcie:

typenamelabelappearancecalculation
select_one inspection_typeinsp_typeTyp inšpekcie
calculatechecklist_configcallapicallapi('POST', 'https://api.example.com/checklist', 1, 2, 0, '$.items', 10000, 0, '', '', '{"type": "##insp_type##"}')
textitem_1Položka 1callapi-verify(dynamicParams)
textitem_2Položka 2callapi-verify(dynamicParams)
textitem_3Položka 3callapi-verify(dynamicParams)

Server vráti správny typ widgetu, popisok, voľby a overenie pre každú položku na základe insp_type.


Najlepšie postupy

  1. Používajte dynamické typy otázok iba keď sa štruktúra poľa skutočne líši za behu — pre statické formuláre používajte štandardné typy otázok.
  2. Uistite sa, že konfiguračné API odpovedá rýchlo (do 2 sekúnd) a je dostupné v terénnej sieti.
  3. Vždy definujte rozumnú zálohu vo formulári pre prípad, keď je API nedostupné — jednoduché pole text s poznámkou je lepšie ako nefunkčný widget.
  4. Verzujte schému odpovede API — zmeny formátu odpovede ovplyvnia všetky aktívne formuláre používajúce daný koncový bod.
  5. Pred nasadením testujte každú kombináciu typov polí, ktoré API môže vrátiť.

Obmedzenia

  • Dynamické typy otázok vyžadujú sieťové pripojenie na načítanie konfigurácie.
  • Plný rozsah typov widgetov dostupných dynamicky závisí od verzie klienta rtSurvey — testujte vašu cieľovú verziu.
  • Toto je pokročilé rozšírenie rtSurvey bez ekvivalentu v štandardnej špecifikácii XLSForm.
  • Chyby ladenia sú ťažšie sledovateľné, pretože definícia poľa čiastočne žije vo formulári a čiastočne v odpovedi API.
Bola táto stránka užitočná?