Att skapa ett adaptivt formulär med ett JSON-schema som formulärmodell kräver grundläggande kunskaper i JSON-schemat. Du bör läsa igenom följande innehåll före den här artikeln.
Adobe Experience Manager Forms har stöd för att skapa ett adaptivt formulär genom att använda ett befintligt JSON-schema som formulärmodell. Detta JSON-schema representerar strukturen i vilken data produceras eller används av det bakomliggande systemet i din organisation. Det JSON-schema som du använder ska vara kompatibelt med v4-specifikationer.
De viktigaste funktionerna i ett JSON-schema är:
Ett JSON-schema består av enkla och komplexa elementtyper. Elementen har attribut som lägger till regler i elementet. När dessa element och attribut dras till ett adaptivt formulär mappas de automatiskt till motsvarande adaptiv formulärkomponent.
Den här mappningen av JSON-element med adaptiva formulärkomponenter är följande:
"birthDate": {
"type": "string",
"format": "date",
"pattern": "date{DD MMMM, YYYY}",
"aem:affKeyword": [
"DOB",
"Date of Birth"
],
"description": "Date of birth in DD MMMM, YYYY",
"aem:afProperties": {
"displayPictureClause": "date{DD MMMM, YYYY}",
"displayPatternType": "date{DD MMMM, YYYY}",
"validationPatternType": "date{DD MMMM, YYYY}",
"validatePictureClause": "date{DD MMMM, YYYY}",
"validatePictureClauseMessage": "Date must be in DD MMMM, YYYY format."
}
JSON-element, egenskaper eller attribut | Adaptiv Form-komponent |
---|---|
Strängegenskaper med enum- och enumNames-begränsningen. Syntax,
|
Nedrullningsbar komponent:
|
Strängegenskap med formatbegränsning. Till exempel e-post och datum. Syntax,
|
|
|
Textfält |
number, egenskap |
Numeriskt fält med undertyp inställd på flytande |
heltalsegenskap |
Numeriskt fält med subtyp inställd på heltal |
boolesk egenskap |
Byt |
object, egenskap |
Panel |
arrayegenskap | Upprepningsbar panel med min och max lika med minItems respektive maxItems. Endast homogena arrayer stöds. Objektbegränsningen måste därför vara ett objekt och inte en array. |
Det adaptiva formuläret använder information som finns i JSON-schemat för att mappa varje genererat fält. Särskilt gäller följande:
title
fungerar som etikett för adaptiva formulärkomponenter.description
-egenskapen anges som en lång beskrivning för en adaptiv formulärkomponent.default
fungerar som det ursprungliga värdet i ett fält med adaptiv form.maxLength
egenskapen anges som maxlength
textfältskomponentens attribut.minimum
, maximum
, exclusiveMinimum
och exclusiveMaximum
-egenskaper används för NumericBox-komponenter.DatePicker component
ytterligare egenskaper för JSON-schema minDate
och maxDate
anges.minItems
och maxItems
-egenskaper används för att begränsa antalet objekt/fält som kan läggas till eller tas bort från en panelkomponent.readOnly
egenskapen anger readonly
för en adaptiv formulärkomponent.required
egenskapen anger att fältet Adaptivt formulär är obligatoriskt, medan den slutliga inskickade JSON-informationen i panelen (där typen är objekt) har fält med ett tomt värde som motsvarar det objektet.pattern
egenskapen anges som valideringsmönster (reguljärt uttryck) i adaptiv form.Här är ett exempel på ett JSON-schema.
{
"$schema": "https://json-schema.org/draft-04/schema#",
"definitions": {
"employee": {
"type": "object",
"properties": {
"userName": {
"type": "string"
},
"dateOfBirth": {
"type": "string",
"format": "date"
},
"email": {
"type": "string",
"format": "email"
},
"language": {
"type": "string"
},
"personalDetails": {
"$ref": "#/definitions/personalDetails"
},
"projectDetails": {
"$ref": "#/definitions/projectDetails"
}
},
"required": [
"userName",
"dateOfBirth",
"language"
]
},
"personalDetails": {
"type": "object",
"properties": {
"GeneralDetails": {
"$ref": "#/definitions/GeneralDetails"
},
"Family": {
"$ref": "#/definitions/Family"
},
"Income": {
"$ref": "#/definitions/Income"
}
}
},
"projectDetails": {
"type": "array",
"items": {
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "number"
},
"projects": {
"$ref": "#/definitions/projects"
}
}
},
"minItems": 1,
"maxItems": 4
},
"projects": {
"type": "array",
"items": {
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "number"
},
"projectsAdditional": {
"$ref": "#/definitions/projectsAdditional"
}
}
},
"minItems": 1,
"maxItems": 4
},
"projectsAdditional": {
"type": "array",
"items": {
"properties": {
"Additional_name": {
"type": "string"
},
"Additional_areacode": {
"type": "number"
}
}
},
"minItems": 1,
"maxItems": 4
},
"GeneralDetails": {
"type": "object",
"properties": {
"age": {
"type": "number"
},
"married": {
"type": "boolean"
},
"phone": {
"type": "number",
"aem:afProperties": {
"sling:resourceType": "/libs/fd/af/components/guidetelephone",
"guideNodeClass": "guideTelephone"
}
},
"address": {
"type": "string"
}
}
},
"Family": {
"type": "object",
"properties": {
"spouse": {
"$ref": "#/definitions/spouse"
},
"kids": {
"$ref": "#/definitions/kids"
}
}
},
"Income": {
"type": "object",
"properties": {
"monthly": {
"type": "number"
},
"yearly": {
"type": "number"
}
}
},
"spouse": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"Income": {
"$ref": "#/definitions/Income"
}
}
},
"kids": {
"type": "array",
"items": {
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "number"
}
}
},
"minItems": 1,
"maxItems": 4
}
},
"type": "object",
"properties": {
"employee": {
"$ref": "#/definitions/employee"
}
}
}
Definitionsnycklar används för att identifiera återanvändbara scheman. Återanvändbara schemadefinitioner används för att skapa fragment. Ett exempel på JSON-schema med definitioner ges nedan:
{
"$schema": "https://json-schema.org/draft-04/schema#",
"definitions": {
"address": {
"type": "object",
"properties": {
"street_address": { "type": "string" },
"city": { "type": "string" },
"state": { "type": "string" }
},
"required": ["street_address", "city", "state"]
}
},
"type": "object",
"properties": {
"billing_address": { "$ref": "#/definitions/address" },
"shipping_address": { "$ref": "#/definitions/address" }
}
}
Exemplet ovan definierar en kundpost där varje kund har både en leveransadress och en faktureringsadress. Adressernas struktur är densamma - adresserna har en gatuadress, ort och delstat - så det är en bra idé att inte duplicera adresserna. Det gör det också enkelt att lägga till och ta bort fält för framtida ändringar.
Du kan använda aem:afProperties för att förkonfigurera JSON-schemafältet för mappning till en anpassad adaptiv formulärkomponent. Ett exempel visas nedan:
{
"properties": {
"sizeInMB": {
"type": "integer",
"minimum": 16,
"maximum": 512,
"aem:afProperties" : {
"sling:resourceType" : "/apps/fd/af/components/guideTextBox",
"guideNodeClass" : "guideTextBox"
}
}
},
"required": [ "sizeInMB" ],
"additionalProperties": false
}
Du kan lägga till följande begränsningar i JSON-schemaelement för att begränsa vilka värden som tillåts för en adaptiv formulärkomponent:
Schemaegenskap |
Datatyp |
Beskrivning |
Komponent |
|
Sträng |
Anger den övre gränsen för numeriska värden och datum. Som standard inkluderas maxvärdet. |
|
|
Sträng |
Anger den nedre gränsen för numeriska värden och datum. Som standard inkluderas minimivärdet. |
|
|
Boolesk |
Om true måste det numeriska värdet eller datumet som anges i formulärets komponent vara mindre än det numeriska värdet eller datumet som anges för egenskapen maximum. Om värdet är false måste det numeriska värdet eller datumet som anges i formulärets komponent vara mindre än eller lika med det numeriska värdet eller datumet som anges för egenskapen maximum. |
|
|
Boolesk |
Om true måste det numeriska värdet eller datumet som anges i formulärets komponent vara större än det numeriska värdet eller datumet som anges för egenskapen minimum. Om värdet är false måste det numeriska värdet eller datumet som anges i formulärets komponent vara större än eller lika med det numeriska värdet eller datumet som anges för egenskapen minimum. |
|
|
Sträng |
Anger det minsta antalet tecken som tillåts i en komponent. Minimilängden måste vara lika med eller större än noll. |
|
maxLength |
Sträng | Anger maximalt antal tecken som tillåts i en komponent. Den maximala längden måste vara lika med eller större än noll. |
|
|
Sträng |
Anger teckensekvensen. En komponent accepterar tecknen om tecknen överensstämmer med det angivna mönstret. Egenskapen pattern mappar till valideringsmönstret för motsvarande komponent i adaptiv form. |
|
maxItems |
Sträng | Anger maximalt antal objekt i en array. Det maximala antalet objekt måste vara lika med eller större än noll. | |
minItems |
Sträng | Anger det minsta antalet objekt i en array. Minimiobjekten måste vara lika med eller större än noll. |
Adaptiv Forms stöder inte följande JSON-schemakonstruktioner:
Varför kan jag inte dra enskilda element i ett delformulär (struktur som genereras från en komplex typ) för repeterbara delformulär (värdena minOcCours och maxOccurs är större än 1)?
I ett upprepningsbart delformulär måste du använda hela delformuläret. Om du bara vill ha selektiva fält använder du hela strukturen och tar bort de oönskade.
Jag har en lång komplex struktur i Content Finder. Hur hittar jag ett specifikt element?
Du har två alternativ:
Vad ska tillägget för JSON-schemafilen vara?
Tillägget för JSON-schemafilen måste vara .schema.json. Till exempel: <filename>.schema.json.