Lloji dinamik i pyetjes
Lloji dinamik i pyetjes lejon llojin e widget-it dhe sjelljen e validimit të fushës të përcaktohen gjatë ekzekutimit bazuar në përgjigjen e API ose vlerën e llogaritur.
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:
| type | name | label | appearance | calculation |
|---|---|---|---|---|
| calculate | field_config | callapi | callapi('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() në appearance ose constraint për t’u lidhur me konfigurimin e marrë:
| type | name | label | appearance |
|---|---|---|---|
| text | inspection_result | Rezultati i inspektimit | callapi-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:
| type | name | label | appearance | calculation |
|---|---|---|---|---|
| select_one inspection_type | insp_type | Lloji i inspektimit | ||
| calculate | checklist_config | callapi | callapi('POST', 'https://api.example.com/checklist', 1, 2, 0, '$.items', 10000, 0, '', '', '{"type": "##insp_type##"}') | |
| text | item_1 | Artikulli 1 | callapi-verify(dynamicParams) | |
| text | item_2 | Artikulli 2 | callapi-verify(dynamicParams) | |
| text | item_3 | Artikulli 3 | callapi-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
- 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.
- Sigurohuni që API e konfigurimit të përgjigjet shpejt (nën 2 sekonda) dhe të jetë e disponueshme në rrjetin e terrenit.
- Gjithmonë përcaktoni alternativë të arsyeshme në formular për rastin kur API është e paarritshme — fusha e thjeshtë
textme shënim është më e mirë se widget i prishur. - 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.
- 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.