Aangepaste formulieren maken met JSON-schema creating-adaptive-forms-using-json-schema
de Adobe adviseert gebruikend de moderne en verlengbare gegevens vangen Componenten van de Kernvoor het creëren van nieuwe Aangepaste Formsof het toevoegen van Aangepaste Forms aan de pagina's van AEM Sites. Deze componenten betekenen een aanzienlijke vooruitgang in de aanmaak van Adaptive Forms en zorgen voor indrukwekkende gebruikerservaring. In dit artikel wordt een oudere aanpak beschreven voor de auteur Adaptive Forms die gebruikmaakt van stichtingscomponenten.
Vereisten prerequisites
Voor het ontwerpen van een adaptief formulier met behulp van een JSON-schema als formuliermodel is basiskennis van JSON-schema vereist. Het wordt aanbevolen de volgende inhoud vóór dit artikel te lezen.
Een JSON-schema gebruiken als formuliermodel using-a-json-schema-as-form-model
Adobe Experience Manager Forms ondersteunt het maken van een adaptief formulier met een bestaand JSON-schema als formuliermodel. Dit JSON-schema vertegenwoordigt de structuur waarin gegevens worden geproduceerd of verbruikt door het back-end systeem in uw organisatie. Het Schema JSON u gebruikt zou met v4 specificatiesvolgzaam moeten zijn.
De belangrijkste eigenschappen van het gebruiken van een Schema JSON zijn:
- De structuur van JSON wordt als een structuur weergegeven op het tabblad Inhoudszoeker in de ontwerpmodus voor een adaptief formulier. U kunt elementen slepen van de JSON-hiërarchie naar het aangepaste formulier.
- U kunt het formulier vooraf invullen met JSON dat voldoet aan het bijbehorende schema.
- Bij verzending worden de gegevens die door de gebruiker zijn ingevoerd, verzonden als JSON die wordt uitgelijnd met het bijbehorende schema.
Een JSON-schema bestaat uit eenvoudige en complexe elementtypen. De elementen hebben attributen die regels aan het element toevoegen. Wanneer deze elementen en kenmerken naar een adaptief formulier worden gesleept, worden ze automatisch toegewezen aan de bijbehorende adaptieve formuliercomponent.
Deze toewijzing van JSON-elementen met adaptieve formuliercomponenten is als volgt:
"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."
}
Algemene schemaeigenschappen common-schema-properties
Het adaptieve formulier gebruikt informatie die beschikbaar is in het JSON-schema om elk gegenereerd veld in kaart te brengen. Met name:
- De eigenschap
title
fungeert als label voor de adaptieve formuliercomponenten. - De eigenschap
description
wordt ingesteld als een lange beschrijving voor een adaptieve formuliercomponent. - De eigenschap
default
fungeert als beginwaarde van een adaptief formulierveld. - De eigenschap
maxLength
wordt ingesteld alsmaxlength
-kenmerk van de tekstveldcomponent. - De eigenschappen
minimum
,maximum
,exclusiveMinimum
enexclusiveMaximum
worden gebruikt voor de component NumericBox. - Als u een bereik voor
DatePicker component
extra JSON-schemaeigenschappenminDate
enmaxDate
wilt ondersteunen, worden deze opgegeven. - De eigenschappen
minItems
enmaxItems
worden gebruikt om het aantal items/velden te beperken dat kan worden toegevoegd aan of verwijderd uit een deelvenstercomponent. - Met de eigenschap
readOnly
wordt het kenmerkreadonly
van een adaptieve formuliercomponent ingesteld. - De eigenschap
required
markeert het adaptieve formulierveld als verplicht, terwijl in het paneel (waar type object is) de uiteindelijke JSON-gegevens velden bevatten met een lege waarde die overeenkomt met dat object. - De eigenschap
pattern
wordt ingesteld als het validatiepatroon (reguliere expressie) in adaptieve vorm. - De extensie van het JSON-schemabestand moet .schema.json blijven. Bijvoorbeeld <filename>.schema.json.
Voorbeeld JSON-schema sample-json-schema
Hier is een voorbeeld van een 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"
}
}
}
Herbruikbare schemadefinities reusable-schema-definitions
De sleutels van de definitie worden gebruikt om herbruikbare schema's te identificeren. De herbruikbare schemadefinities worden gebruikt om fragmenten tot stand te brengen. Het is gelijkaardig aan het identificeren van complexe types in XSD. Hieronder volgt een voorbeeld van een JSON-schema met definities:
{
"$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" }
}
}
In het bovenstaande voorbeeld wordt een klantrecord gedefinieerd, waarbij elke klant zowel een verzendadres als een factuuradres heeft. De structuur van beide adressen is zelfde-adressen heeft een straatadres, een stad en een staat— zodat is het een goed idee om de adressen niet te dupliceren. Het maakt het toevoegen en schrappen van gebieden voor om het even welke toekomstige veranderingen gemakkelijk.
Velden vooraf configureren in JSON-schemadefinitie pre-configuring-fields-in-json-schema-definition
U kunt gebruiken aem:afProperties bezit om het gebied van het Schema van JSON vooraf te vormen om aan een douane aan aangepaste vormcomponent in kaart te brengen. Hieronder ziet u een voorbeeld:
{
"properties": {
"sizeInMB": {
"type": "integer",
"minimum": 16,
"maximum": 512,
"aem:afProperties" : {
"sling:resourceType" : "/apps/fd/af/components/guideTextBox",
"guideNodeClass" : "guideTextBox"
}
}
},
"required": [ "sizeInMB" ],
"additionalProperties": false
}
Scripts of expressies configureren voor formulierobjecten configure-scripts-or-expressions-for-form-objects
JavaScript is de expressietaal van adaptieve formulieren. Alle expressies zijn geldige JavaScript-expressies en gebruiken API's van het scriptmodel voor aangepaste formulieren. U kunt vormvoorwerpen pre-vormen om een uitdrukkingop een vormgebeurtenis te evalueren.
Met de eigenschap aaem:afproperties kunt u aangepaste formulierexpressies of scripts vooraf configureren voor adaptieve formuliercomponenten. Wanneer bijvoorbeeld de gebeurtenis initialize wordt geactiveerd, stelt de onderstaande code de waarde van het telefoonveld in en drukt een waarde af op het logbestand:
"telephone": {
"type": "string",
"pattern": "/\\d{10}/",
"aem:affKeyword": ["phone", "telephone","mobile phone", "work phone", "home phone", "telephone number", "telephone no", "phone number"],
"description": "Telephone Number",
"aem:afProperties" : {
"sling:resourceType" : "fd/af/components/guidetelephone",
"guideNodeClass" : "guideTelephone",
"events": {
"Initialize" : "this.value = \"1234567890\"; console.log(\"ef:gh\") "
}
}
}
U zou een lid van de vorm-macht-gebruikersgroepmoeten zijn om manuscripten of uitdrukkingen voor vormvoorwerp te vormen. In de onderstaande tabel staan alle scriptgebeurtenissen die worden ondersteund voor een adaptieve formuliercomponent.
Sommige voorbeelden van het gebruik van gebeurtenissen in een JSON verbergen een gebied bij initialize gebeurtenis en vormen waarde van een ander gebied bij waarde begaan gebeurtenis. Voor gedetailleerde informatie over het creëren van uitdrukkingen voor de manuscriptgebeurtenissen, zie Aangepaste Uitdrukkingen van de Vorm.
Hier volgt een voorbeeld van de JSON-code voor eerder vermelde voorbeelden.
Veld verbergen bij initialisatiegebeurtenis hiding-a-field-on-initialize-event
"name": {
"type": "string",
"aem:afProperties": {
"events" : {
"Initialize" : "this.visible = false;"
}
}
}
Waarde van een ander veld configureren bij gebeurtenis value commit configure-value-of-another-field-on-value-commit-event
"Income": {
"type": "object",
"properties": {
"monthly": {
"type": "number",
"aem:afProperties": {
"events" : {
"Value Commit" : "IncomeYearly.value = this.value * 12;"
}
}
},
"yearly": {
"type": "number",
"aem:afProperties": {
"name": "IncomeYearly"
}
}
}
}
Acceptabele waarden voor een adaptieve formuliercomponent beperken limit-acceptable-values-for-an-adaptive-form-component
U kunt de volgende beperkingen toevoegen aan JSON-schemaelementen om de waarden te beperken die acceptabel zijn voor een adaptieve formuliercomponent:
Schema-compatibele gegevens inschakelen enablig-schema-compliant-data
Voer de volgende stappen uit om alle op JSON-schema's gebaseerde Adaptieve Forms in staat te stellen schema-compatibele gegevens te genereren bij het verzenden van formulieren:
- Ga naar de webconsole van de Experience Manager op
https://server:host/system/console/configMgr
. - Zoek Adaptive Form and Interactice Communication Web Channel Configuration .
- Selecteer deze optie om de configuratie te openen in de bewerkingsmodus.
- Schakel het selectievakje Generate Schema Compliant Data in.
- Sla de instellingen op.
Niet-ondersteunde constructies non-supported-constructs
De volgende JSON-schemaconstructies worden niet ondersteund door adaptieve formulieren:
- Null-tekst
- Unietypen zoals alle, en
- OneOf, anyOf, allOf, and not
- Alleen homogene arrays worden ondersteund. De itembeperking moet dus een object zijn en geen array.
Veelgestelde vragen frequently-asked-questions
waarom ik niet individuele elementen van een subformulier (structuur die van om het even welk complex type wordt geproduceerd) voor herhaalbare subforms (minOccurs of maxOccurs waarden zijn groter dan 1) kan slepen?
In een herhaalbaar subformulier moet u het volledige subformulier gebruiken. Als u alleen selectieve velden wilt, gebruikt u de volledige structuur en verwijdert u de ongewenste velden.
ik heb een lange complexe structuur in de Vinder van de Inhoud. Hoe kan ik een specifiek element vinden?
U hebt twee opties:
- Door de boomstructuur schuiven
- Gebruik het vak Zoeken om een element te zoeken
wat de uitbreiding van het JSON schemadossier zou moeten zijn?
De extensie van het JSON-schemabestand moet .schema.json zijn. Bijvoorbeeld <filename>.schema.json.