Wat is een formulier?
Concept
Een formulier is een manier om gestructureerde gegevens vast te leggen. De invoer kan komen van een menselijke gebruiker die het formulier handmatig invult, of van een service die het formulier automatisch invult. Formulieren zijn afgeleid van formulierdefinities die je kan aanmaken en bewerken binnen een dossiertype. Via formulieren geef je flexibel gestalte aan de datastructuur van elk dossier.
Formulierdefinitie structuur
In Studio kun je formulierdefinities configureren aan de hand van elementtypes (formuliervelden) zoals tekst, ja/nee (booleaan), getal, e-mail, secties en/of groepen. Onderstaand schema geeft een voorbeeld van hoe een formulierdefinitie gestructureerd kan zijn.
Elk element of veld heeft een aantal element eigenschappen die het gedrag binnen het formulier bepalen.
Formulieren aanmaken en beheren
De beste manier om formulierdefinities aan te maken en te beheren, is via Skryv Studio. Klik hier voor meer praktische informatie.
Formulier editor
Een formulierdefinitie wordt gebouwd in de formulier editor. Sleep de elementtypes (velden of veldtypes) van het elementen panel naar het werkgebied om de formulierstructuur op te bouwen.

Formulier editor
Formuliervelden instellen
De formuliervelden die je aanmaakt in de editor zijn via een aantal eigenschappen te configureren. Zo kan je een veld ‘alleen lezen’ ('read-only') of ‘verplicht’ ('required') maken. Of je kan het veld automatisch laten invullen op basis van gekende informatie ('computedDefault') of dynamisch (d.w.z. live) op basis van andere formuliervelden ('computedWith'). Klik hier voor een overzicht van alle configureerbare instellingen.
Flexibiliteit binnen formulierdefinities
Aan een formulierdefinitie kan je via logica ( ook wel aangeduid als expressies, computed expressies of formuliervariabelen) een bepaalde flexibiliteit toevoegen. Op die manier past het formulier zich aan naargelang het scenario dat zich voordoet. Zo kan een formulier dynamisch wijzigen naargelang een door de gebruiker geselecteerde optie. Of het formulier kan er anders uitzien op basis van de taak vanwaaruit de gebruiker deze opent.
In het onderstaand voorbeeld is in elk dossier een andere versie van het formulier zichtbaar, enerzijds afhankelijk van het type aanvraag, anderzijds afhankelijk van de taak vanwaaruit het formulier aangesproken wordt.
Dossier 1: het door de gebruiker geselecteerde type ‘verlofaanvraag’ zorgt ervoor dat de velden ‘Startdatum’ en ‘Einddatum’ dynamisch zichtbaar worden; het feit dat het formulier geopend wordt vanuit de ‘aanvraagtaak’ zorgt ervoor dat alleen formuliervelden die bedoeld zijn voor de aanvrager worden getoond.
Dossier 2: het door de gebruiker geselecteerde type ‘aanvraag terugbetaling’ zorgt ervoor dat de velden ‘Bedrag’ en ‘Reden’ dynamisch zichtbaar worden; het feit dat het formulier geopend wordt vanuit de ‘aanvraagtaak’ zorgt ervoor dat alleen formuliervelden die bedoeld zijn voor de aanvrager worden getoond.
Dossier 3: het verzoek is al door de aanvrager doorgestuurd, nu is het de reviewer die het formulier opent; de reviewer ziet de informatie die de aanvrager heeft ingediend; het feit dat het formulier geopend wordt vanuit de ‘reviewtaak’ zorgt ervoor dat het veld ‘Goedkeuring’ wordt getoond; de reviewer kan de aanvraag nu goedkeuren of afkeuren met ja of nee (boolean).
Formaat
Elke formulierdefinitie wordt opgeslagen als een JSON-bestand met naamextensie .doc. Een voorbeeld van een dergelijk JSON-bestand vind je hieronder terug.
Het is mogelijk om binnen Studio het formulier als JSON-te bekijken en bewerken. Klik hier voor meer info. Let wel, hiervoor is een grondige kennis van de syntax nodig.
Alle syntax info kan je terugvinden onder de sectie Formulier element eigenschappen.
{
"label": "Reservation",
"name": "reservation",
"fields": [
{
"name": "firstName",
"label": "First name",
"type": "text"
},
{
"name": "name",
"label": "Last name",
"type": "text"
},
{
"name": "eMailAddress",
"label": "E-mail address",
"type": "email"
},
{
"name": "timeSlot",
"label": "Time slot",
"type": "choice",
"choices": [
{
"name": "timeSlot18H19H",
"label": "18h - 19h"
},
{
"name": "timeSlot19H20H",
"label": "19h - 20h"
},
{
"name": "timeSlot20H21H",
"label": "20h - 21h"
}
]
}
]
}