Funkce Dynamický typ otázky umožňuje, aby vstupní widget pole a chování validace bylo určeno za běhu spíše než v době návrhu formuláře. Toto je pokročilé rozšíření rtSurvey používané, když typ dat ke sběru závisí na konfiguraci na straně serveru, odpovědi API nebo hodnotě předchozího pole.

Běžným případem použití je konfigurovatelný kontrolní seznam inspekce, kde server definuje, která pole jsou požadována, jaký typ jsou (text, integer, select atd.) a jaké možnosti jsou dostupné — bez přestavění formuláře pro každou konfiguraci.


Jak to funguje

Pole označené jako dynamický typ otázky používá callapi() pro načtení konfigurace z API. Odpověď API definuje:

  • Typ vstupu k vykreslení (text, integer, select_one atd.)
  • Dostupné volby (pro typy select)
  • Pravidla validace

Pole je interně označeno specialFeature: isDynamicQuestionType, což říká formátovacímu enginu, aby použil odpověď API pro sestavení widgetu spíše než statickou definici formuláře.


Nastavení

Krok 1: Načtěte konfiguraci pole

Použijte pole calculate s callapi() pro načtení dynamické konfigurace:

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: Odkazujte konfiguraci v dynamickém poli

Dynamické pole používá callapi-verify() ve svém appearance nebo constraint pro propojení s načtenou konfigurací:

typenamelabelappearance
textinspection_resultVýsledek inspekcecallapi-verify(dynamicParams)

Formátovací engine přečte field_config a dynamicky určí, zda vykreslit inspection_result jako pole text, integer nebo select_one.


Formát odpovědi API

API by mělo vrátit JSON objekt popisující konfiguraci pole. Typická odpověď:

  {
  "config": {
    "type": "select_one",
    "choices": [
      {"value": "pass", "label": "Vyhovuje"},
      {"value": "fail", "label": "Nevyhovuje"},
      {"value": "na", "label": "N/A"}
    ],
    "required": true,
    "constraint": ". != ''"
  }
}
  

Příklad: Konfigurovatelný inspekční formulář

Inspekční formulář, kde jsou položky kontrolního seznamu a jejich typy odpovědí načteny ze serveru na základě kategorie inspekce:

typenamelabelappearancecalculation
select_one inspection_typeinsp_typeTyp inspekce
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átí správný typ widgetu, popisek, volby a validaci pro každou položku na základě insp_type.


Osvědčené postupy

  1. Používejte dynamické typy otázek pouze tehdy, když se struktura pole skutečně mění za běhu — pro statické formuláře použijte standardní typy otázek.
  2. Zajistěte, aby konfigurační API odpovídalo rychle (pod 2 sekundy) a bylo dostupné v terénní síti.
  3. Vždy definujte rozumné záložní řešení ve formuláři pro případ, že API není dostupné — prosté pole text s poznámkou je lepší než nefungující widget.
  4. Verzujte schéma odpovědi API — změny ve formátu odpovědi ovlivní všechny aktivní formuláře používající tento koncový bod.
  5. Testujte každou kombinaci typů polí, které API může vrátit, před nasazením.

Omezení

  • Dynamické typy otázek vyžadují připojení k síti pro načtení konfigurace.
  • Plný rozsah typů widgetů dostupných dynamicky závisí na verzi klienta rtSurvey — testujte svou cílovou verzi.
  • Toto je pokročilé rozšíření rtSurvey bez ekvivalentu ve standardní specifikaci XLSForm.
  • Chyby ladění je obtížnější trasovat, protože definice pole leží částečně ve formuláři a částečně v odpovědi API.
Byla tato stránka užitečná?