Dynamische taakformulieren (DynamicForm)¶
Taakformulieren (de formulieren bij een Operaton-userTask) worden uit een
JSON-spec opgebouwd en gerenderd met onze eigen DynamicForm-component —
volledig in onze eigen layout (Tabler), zonder Form.io.
Hoe het samenhangt¶
bundle taakformulieren/<key>.json → seeder → DB (task_forms) → DynamicForm
(developer, in git) (runtime, hotfix) (rendering)
BPMN userTask formKey="portal:<key>" ──────────────────────────────────┘
- De developer schrijft de spec in de feature-bundle:
resources/features/<naam>/taakformulieren/<key>.json. - De
TaskFormSeederzet die bij deploy in de tabeltask_forms(key, name, schema). - Een BPMN-userTask verwijst ernaar met
camunda:formKey="portal:<key>". - De portal rendert het taakscherm met
DynamicForm.
De spec¶
{
"key": "autorisatie-beoordelen",
"name": "Autorisatieverzoek beoordelen",
"schema": {
"title": "Autorisatieverzoek beoordelen",
"sections": [
{ "title": "Beoordeling", "columns": 1, "fields": [
{ "type": "textarea", "name": "opmerking", "label": "Opmerking beoordelaar",
"validate": { "maxLength": 1000 } }
]}
]
}
}
| Niveau | Sleutels |
|---|---|
| schema | title?, sections[] |
| section | title?, columns? (layout), fields[] |
| field | type, name, label, readOnly?, placeholder?, help?, validate?, visibleWhen?, options?/optionsSource? |
| validate | required, minLength, maxLength, pattern (+patternMessage) |
| visibleWhen | { field, eq } · { field, in: [] } · { field, truthy } |
Veldtypes: text, email, number, textarea, select, radio, checkbox.
Opties via options (statisch) of optionsSource (dynamisch, bv. "roles").
Een veldtype toevoegen¶
- Maak
resources/js/Components/DynamicForm/fields/MijnVeld.jsx(props:field,value,error,options,onChange). - Registreer het in
fieldRegistry.js:mijntype: MijnVeld.
Validatie leeft in validation.js, conditionals in conditions.js, opties in options.js.
Beheer: een fout snel herstellen (hotfix)¶
Beheer → Taakformulieren toont alle formulieren. Via Bewerken pas je de JSON-spec aan met een live preview. Bij opslaan:
- wordt de spec structureel gevalideerd (
TaakformulierSpec), - krijgt het formulier
overridden = true— een volgende deploy overschrijft een in de portal gewijzigd formulier niet (de bundle blijft de canonieke bron).
Hotfix vs. bron
De beheer-editor is een portal-UI-actie (geen terminal) om een fout van een
developer snel te herstellen. De echte fix hoort ook in de bundle-JSON terug,
anders wijkt git af van de runtime. Wil je de bundle weer leidend maken, zet dan
overridden terug op false (en deploy opnieuw).
Server-validatie¶
Dezelfde spec stuurt client én server: App\Support\TaakformulierSpec::regels($spec)
leidt Laravel-validatieregels af (incl. required_if voor visibleWhen) voor wanneer
een ingediend formulier wordt verwerkt. Vertrouw nooit alleen de client.
Verhouding tot Open Forms / Form.io¶
Voor publieke intakeformulieren gebruiken we Open Forms (zgw). Voor interne
taakformulieren gebruiken we DynamicForm — eigen layout, in de portal beheerbaar.
Het legacy publieke aanmelden-formulier draait nog op Form.io en blijft ongemoeid.