Dynamisch vraagtype
Het dynamische vraagtype stelt de widget en het vraagtype van een veld in staat om bij uitvoering te worden bepaald op basis van een API-respons of berekende waarde.
De functie Dynamisch vraagtype stelt de invoerwidget en het validatiegedrag van een veld in staat om bij uitvoering te worden bepaald in plaats van bij het ontwerpen van het formulier. Dit is een geavanceerde rtSurvey-uitbreiding die wordt gebruikt wanneer het type te verzamelen gegevens afhankelijk is van een serverconfiguratie, API-respons of de waarde van een voorafgaand veld.
Een veelgebruikte toepassing is een configureerbare inspectiechecklist waarbij de server definieert welke velden vereist zijn, van welk type ze zijn (text, integer, select, etc.) en welke opties beschikbaar zijn — zonder het formulier opnieuw te bouwen voor elke configuratie.
Hoe het werkt
Een veld dat is gemarkeerd als een dynamisch vraagtype gebruikt callapi() om de configuratie op te halen uit een API. De API-respons definieert:
- Het te renderen invoertype (text, integer, select_one, etc.)
- De beschikbare keuzes (voor selectietypen)
- Validatieregels
Het veld is intern gemarkeerd met specialFeature: isDynamicQuestionType, wat de formuliermotor instrueert de API-respons te gebruiken om de widget te construeren in plaats van de statische formulierformulering.
Installatie
Stap 1: Haal de veldconfiguratie op
Gebruik een calculate-veld met callapi() om de dynamische configuratie op te halen:
| 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"}') |
Stap 2: Verwijs naar de configuratie in het dynamische veld
Het dynamische veld gebruikt callapi-verify() in zijn appearance of constraint om te koppelen aan de opgehaalde configuratie:
| type | name | label | appearance |
|---|---|---|---|
| text | inspection_result | Inspectieresultaat | callapi-verify(dynamicParams) |
De formuliermotor leest field_config en bepaalt dynamisch of inspection_result moet worden weergegeven als een text-, integer- of select_one-veld.
API-responsformaat
De API moet een JSON-object retourneren dat de veldconfiguratie beschrijft. Een typische respons:
{
"config": {
"type": "select_one",
"choices": [
{"value": "pass", "label": "Geslaagd"},
{"value": "fail", "label": "Niet geslaagd"},
{"value": "na", "label": "N.v.t."}
],
"required": true,
"constraint": ". != ''"
}
}
Voorbeeld: Configureerbaar inspectieschema
Een inspectieschema waarbij de checklistitems en hun antwoordtypen worden opgehaald van een server op basis van de inspectiecategorie:
| type | name | label | appearance | calculation |
|---|---|---|---|---|
| select_one inspection_type | insp_type | Type inspectie | ||
| calculate | checklist_config | callapi | callapi('POST', 'https://api.example.com/checklist', 1, 2, 0, '$.items', 10000, 0, '', '', '{"type": "##insp_type##"}') | |
| text | item_1 | Item 1 | callapi-verify(dynamicParams) | |
| text | item_2 | Item 2 | callapi-verify(dynamicParams) | |
| text | item_3 | Item 3 | callapi-verify(dynamicParams) |
De server geeft het juiste widgettype, label, keuzes en validatie terug voor elk item op basis van insp_type.
Aanbevolen werkwijzen
- Gebruik dynamische vraagtypen alleen wanneer de veldstructuur daadwerkelijk varieert bij uitvoering — gebruik voor statische formulieren standaard vraagtypen.
- Zorg ervoor dat de configuratie-API snel reageert (binnen 2 seconden) en beschikbaar is op het veldnetwerk.
- Definieer altijd een zinvolle terugval in het formulier voor het geval de API niet bereikbaar is — een eenvoudig
text-veld met een notitie is beter dan een gebroken widget. - Versie uw API-responsschema — wijzigingen in het responsformaat zijn van invloed op alle actieve formulieren die dat endpoint gebruiken.
- Test elke combinatie van veldtypen die de API kan retourneren voor implementatie.
Beperkingen
- Dynamische vraagtypen vereisen netwerkconnectiviteit om de configuratie op te halen.
- Het volledige bereik van widgettypen dat dynamisch beschikbaar is, is afhankelijk van de rtSurvey-clientversie — test uw doelversie.
- Dit is een geavanceerde rtSurvey-uitbreiding zonder equivalent in de standaard XLSForm-specificatie.
- Debugfouten zijn moeilijker te traceren omdat de velddefinitie deels in het formulier en deels in de API-respons staat.