Documentatie voor klanten en partners van Digitaal Vlaanderen - bouwstenen Mijn Burgerprofiel, Verenigingsloket en e-loketondernemers
Met JSON-output werken
JSON Schema koppelen
Elke formulier heeft een JSON Schema nodig om te bepalen welke velden er in het output formaat moet komen te staan. Een JSON Schema laat ook toe structuur te brengen in de JSON die anders is dan de structuur van het formulier. Daarnaast laat het JSON Schema ook toe om velden een andere naam te geven in de output JSON tegenover de veldnamen in het formulier.
Er zijn 3 manieren om een JSON Schema te koppelen aan een formulier:
Genereer een JSON Schema van alle velden in een formulier en leg een automatische referentie naar alle velden (lees āAutomatischā hieronder)
Genereer een JSON Schema van alle velden in een formulier (lees āAutomatischā hieronder) en koppel de velden manueel (lees āmanueelā hieronder vanaf stap 4)
CreĆ«er manueel een JSON Schema en koppel de velden manueel (lees āmanueelā hieronder)
Het is natuurlijk ook mogelijk om het JSON Schema te downloaden, aan te passen, opnieuw te uploaden en dan pas de manuele koppeling te doen. (Zie Output formaat bepalen hieronder voor meer uitleg)
Om een json schema te downloaden uit AEM, kies ādownload assets(s) as binary filesā. Deze file kan dan geopend en geĆ«diteerd worden in een json editor (bijvoorbeeld notepad++.)
Ā
Automatisch
Open je formulier
Open het pagina menu linksboven en kies je juiste optie
Selecteer āGenereer formulier schemaā
Deze optie gaat enkel je JSON Schema genereren,
het JSON Schema wordt naast je formulier geplaatst,
bevat de datum en uur van generatie,
en is niet gekoppeld aan je formulier
(je kan dan verdergaan met Stap 3 in Manueel hieronder, of een aanpassing doen aan je JSON Schema)
Selecteer āGenereer en bind formulier schemaā
Identiek dezelfde stappen als āGenereer formulier schemaā
maar elk JSON veld wordt automatisch gekoppeld aan elk formulier veld
Bij de eigenschappen van elk formulier veld, kan je ook aangeven of je dat veld niet in het JSON Schema wil.
Manueel
Maak een JSON Schema (zie output formaat bepalen hieronder)
de bestandsnaam eindigt op .schema.json
Aanbevolen is het om de naam van je formulier te geven
Upload dit JSON Schema en zet het naast je formulier (is geen verplichting, maar wel handiger)
Koppel het JSON Schema aan het formulier
Open de Page Properties van een formulier
Open de Form Model tab
Selecteer Schema in het āSelect Formā veld
Selecteer je geĆ¼ploade JSON Schema
Koppel nu elk JSON Schema veld aan elk formulier veld dat je wil zien in de output JSON
Selecteer een formulier veld
Open de Eigenschappen van dat veld
Ga naar āReferentie koppelingā
Klik op het icoon achteraan dit veld
Selecteer uit je JSON Schema het juiste veld waaraan dit formulier veld gekoppeld wordt
Ā
Herhaal deze laatste stap per formulier veld dat je wil mappen in je output JSON. Bekijk output formaat bepalen om meer te weten te komen hoe om te gaan met verschillende type velden.
Debuggen
Open je formulier in een modus dat je het in kan vullen. Vul het al dan niet in om je data al dan niet in de output JSON te zien.
Momenteel (vrij technisch) is er een script beschikbaar dat in de browser console kan worden geplakt en uitgevoerd.
Dit geeft weer welke de bound velden zijn en unbound velden.
Enkel bound velden worden gebruikt, de unbound velden worden genegeerd.
Tenzij er geen bound velden zijn, worden de unbound velden gebruikt.
function parseXmlToJson(xml) {
const json = {};
for (const res of xml.matchAll(/(?:<(\w*)(?:\s[^>]*)*>)((?:(?!<\1).)*)(?:<\/\1>)|<(\w*)(?:\s*)*\/>/gm)) {
const key = res[1] || res[3];
const value = res[2] && parseXmlToJson(res[2]);
json[key] = ((value && Object.keys(value).length) ? value : res[2]) || null;
}
return json;
}
guideBridge.getDataXML({
success: function(guideResultObject) {
var data = guideResultObject.data;
var json = undefined;
if (data.startsWith('<')) {
json = parseXmlToJson(data);
console.log('XML was found');
} else {
json = JSON.parse(data);
console.log('JSON was found');
}
if (json !== undefined) {
var boundData = json.afData.afBoundData;
var unboundData = json.afData.afUnboundData;
console.log("Full JSON", json);
console.log("Bound data", boundData);
console.log("Unbound data", unboundData);
console.log("Also copied to clipboard");
copy(data);
} else {
console.log("Could not parse data", data);
}
}
});
Output formaat bepalen
Dit deel gaat over het beĆÆnvloeden en de mogelijkheden binnen een JSON Schema. Maar ook wat er standaard uit een gegenereerd JSON Schema komt.
Als je geen kennis van JSON Schema hebt, is het eenvoudigste te kiezen om eentje te genereren en aan te passen.
Simpel voorbeeld
Formulier:
Ā
JSON Schema (dat werd gegenereerd):
{
"$schema":"http://json-schema.org/draft-07/schema#",
"$id":"http://example.com/form_data.schema.json",
"title":"Json schema for /vlaamse-overheid/demo-2/test-routering",
"type":"object",
"properties":{
"textbox_voornaam":{
"type":"string"
},
"textbox_naam":{
"type":"string"
},
"dropdownlist1637886097279":{
"type":"string"
},
"textbox_bijkomende_info":{
"type":"string"
}
},
"required":[
"textbox_naam",
"textbox_voornaam",
"dropdownlist1637886097279",
"textbox_bijkomende_info"
]
}
JSON output:
{
"textbox_voornaam": "Sarah",
"textbox_naam": "Janssens",
"dropdownlist1637886097279": "1",
"textbox_bijkomende_info": ""
}
Complex voorbeeld
JSON Schema:
JSON output:
Andere JSON Schema details
Ik wil mijn optionele velden wel of niet in de JSON output als ze leeg werden gelaten?
Dit wordt gecontroleerd door de ārequiredā optie in het JSON Schema. Als je veld naam vermeld staat in bij ārequiredā, zal het leeg worden doorgestuurd indien niet ingevuld. Als je de veld naam niet vermeld bij ārequiredā en het word niet ingevuld door de gebruiker, dan zal het veld helemaal niet vermeld worden in de JSON output.
De automatische generatie zet alle velden als ārequiredā waardoor elk niet ingevuld veld, toch meegestuurd wordt.
Ik wil enkele velden nesten in mijn output JSON?
Aan de formulier kant kan je velden groeperen door panels te gebruiken. Tijdens de automatische generatie van het JSON Schema, worden de panels gebruikt om ook inde output JSON voor een genest structuur te zorgen.
Dit JSON Schema moet gebruikt worden om de nesting te bepalen (let op āpersoonā):
Hoe worden bijlagen verwerkt in de output JSON?
Afhankelijk van de een enkele bijlage of meerdere bijlages, zal de output JSON er anders uitzien.
ābijlage-singleā of ābijlage-multiā zijn namen die instelbaar zijn in het JSON Schema. Maar de veldnamen āfileNameā, āfileContentā en ācontentTypeā zijn niet instelbaar en komen altijd zo mee. āfileContentā bevat een base64 versie van de bijlage.
Hoe kan ik velden niet doorsturen?
Als je geen āreferentie koppelingā op de eigenschappen van een veld definieert, zal de ingevulde data in dat veld bij āunboundā JSON terecht komen en geen deel uitmaken van de output JSON. (tenzij er enkel unbound data is)
Als je JSON Schema werd gegeneerd en automatisch gekoppeld, kan je dit oplossen door naar de eigenschappen van dat veld (dat je niet meer wil doorsturen) te gaan en daar de referentie koppeling verwijderen.
Hoe kan ik een veldwaarde samenvoegen?
Velden samenvoegen kan door een hidden field te gebruiken. In het hidden veld kunnen dan bijvoorbeeld dag, maand en jaar aan elkaar geplakt worden, terwijl dit toch 3 velden zijn aan de formulier kant. Door dan deze 3 velden geen referentie koppeling te geven, worden deze niet meer doorgestuurd. Door dan het ene hidden field wel een referentie koppeling te geven, kan je enkel de samengevoegde data laten deel uitmaken van de output JSON.
Een andere use case is 2 velden waar er maar 1 van ingevuld kan worden aan de formulier kant door de gebruiker. En de output JSON ook maar 1 JSON veld wil ontvangen. Door een hidden veld te gebruiken met waarde van veld 1 of veld 2 (afhankelijk welk was ingevuld), en dit hidden veld enkel een referentie koppeling te geven, kan deze data ook samengevoegd worden.
Hoe ziet een repeatable panel eruit in de JSON output?
Een repeatable panel is een formulier veld waar de gebruiker zelf meerdere velden kan doen verschijnen of verwijderen.
Het JSON Schema bevat een array definitie voor āenqVervoerā:
Dit resulteert in deze JSON:
Hoe om te gaan met conditionele panels?
Een conditional panel verschijnt bij het selecteren van een optie (bijvoorbeeld ja) en verdwijnt bij het selecteren van een andere optie (bijvoorbeeld nee). Dit conditionele panel bevat extra velden die dus wel of niet tonen. Moest je de de velden invullen, maar daarna weer voor āneeā kiezen, zullen deze velden toch doorgestuurd worden.
Daarom moet de formulier bouwer een regel implementeren op het formulier bij het aanduiden van āneeā, om de eventuele conditioneel ingevulde velden weer leeg te maken.
Welke velden hebben nog een niet te wijzigen output?
Het voorwaarden component heeft maar 1 in te stellen JSON veld naam, āvoorwaardenā in dit voorbeeld. De reviewDocment en reviewStatus komen automatisch in de JSON output en kan niet worden aangepast vanuit het JSON Schema.
Dit is een officiƫle website van de Vlaamse overheid - Uitgegeven door Digitaal Vlaanderen: https://www.vlaanderen.be/digitaal-vlaanderen
DISCLAIMER: http://www.vlaanderen.be/nl/disclaimer
TOEGANKELIJKHEID:
http://www.vlaanderen.be/nl/toegankelijkheid