Veçoria Lloji Dinamik i Pyetjes lejon widget-in e hyrjes dhe sjelljen e validimit të fushës të përcaktohen gjatë ekzekutimit në vend të kohës së dizajnimit të formularit. Kjo është zgjerim i avancuar i rtSurvey i përdorur kur lloji i të dhënave për të mbledhur varet nga konfigurimi nga ana e serverit, përgjigja API, ose vlera e fushës paraprake.

Rasti i zakonshëm i përdorimit është lista e kontrollit konfigurueshme e inspektimit ku serveri përcakton cilat fusha kërkohen, çfarë lloji janë (tekst, integer, zgjedhje, etj.), dhe cilat opsione janë të disponueshme — pa rindërtuar formularin për çdo konfigurim.


Si funksionon

Fusha e shënuar si lloj dinamik pyetjeje përdor callapi() për të marrë konfigurimin e saj nga API. Përgjigja API përcakton:

  • Llojin e hyrjes për të paraqitur (tekst, integer, select_one, etj.)
  • Zgjedhjet e disponueshme (për llojet select)
  • Rregullat e validimit

Fusha shënohet me specialFeature: isDynamicQuestionType brenda, gjë që i tregon motorit të formularit të përdorë përgjigjen API për të ndërtuar widget-in në vend të përkufizimit statik të formularit.


Konfigurimi

Hapi 1: Merrni konfigurimin e fushës

Përdorni fushën calculate me callapi() për të marrë konfigurimin dinamik:

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

Hapi 2: Referoni konfigurimin në fushën dinamike

Fusha dinamike përdor callapi-verify()appearance ose constraint për t’u lidhur me konfigurimin e marrë:

typenamelabelappearance
textinspection_resultRezultati i inspektimitcallapi-verify(dynamicParams)

Motori i formularit lexon field_config dhe përcakton dinamikisht nëse të paraqesë inspection_result si fushë text, integer, ose select_one.


Formati i përgjigjes API

API duhet të kthejë objekt JSON që përshkruan konfigurimin e fushës. Përgjigje tipike:

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

Shembull: Formular i konfigurueshëm inspektimi

Formular inspektimi ku artikujt e listës kontrolluese dhe llojet e tyre të përgjigjes merren nga serveri bazuar në kategorinë e inspektimit:

typenamelabelappearancecalculation
select_one inspection_typeinsp_typeLloji i inspektimit
calculatechecklist_configcallapicallapi('POST', 'https://api.example.com/checklist', 1, 2, 0, '$.items', 10000, 0, '', '', '{"type": "##insp_type##"}')
textitem_1Artikulli 1callapi-verify(dynamicParams)
textitem_2Artikulli 2callapi-verify(dynamicParams)
textitem_3Artikulli 3callapi-verify(dynamicParams)

Serveri kthen llojin e saktë të widget-it, etiketën, zgjedhjet dhe validimin për çdo artikull bazuar në insp_type.


Praktikat më të mira

  1. Përdorni llojet dinamike të pyetjeve vetëm kur struktura e fushës ndryshon vërtetë gjatë ekzekutimit — për formularët statikë, përdorni llojet standarde të pyetjeve.
  2. Sigurohuni që API e konfigurimit të përgjigjet shpejt (nën 2 sekonda) dhe të jetë e disponueshme në rrjetin e terrenit.
  3. Gjithmonë përcaktoni alternativë të arsyeshme në formular për rastin kur API është e paarritshme — fusha e thjeshtë text me shënim është më e mirë se widget i prishur.
  4. Versiononi skemën e përgjigjes API — ndryshimet në formatin e përgjigjes do të prekin të gjithë formularët aktivë që përdorin atë pikë fundore.
  5. Testoni çdo kombinim llojesh fushash që API mund të kthejë para vendosjes.

Kufizimet

  • Llojet dinamike të pyetjeve kërkojnë lidhje rrjeti për të marrë konfigurimin.
  • Gama e plotë e llojeve të widget-it të disponueshme dinamikisht varet nga versioni i klientit rtSurvey — testoni versionin tuaj të synuar.
  • Ky është zgjerim i avancuar i rtSurvey pa ekuivalent në specifikimin standard XLSForm.
  • Gabimet e korrigjimit janë më të vështira për t’u gjurmuar pasi përkufizimi i fushës jeton pjesërisht në formular dhe pjesërisht në përgjigjen API.
A ishte e dobishme kjo faqe?