La création d’un formulaire adaptatif à l’aide d’un schéma JSON en tant que modèle de formulaire requiert des connaissances de base en matière de schémas JSON. Il est recommandé de lire le contenu suivant avant cet article.
Adobe Experience Manager Forms prend en charge la création d’un formulaire adaptatif en utilisant un schéma JSON existant en tant que modèle de formulaire. Ce schéma JSON représente la structure dans laquelle les données sont générées ou utilisées par le système principal de votre organisation. Le schéma JSON que vous utilisez doit être compatible avec les spécifications v4.
Les principales fonctionnalités de l’utilisation d’un schéma JSON sont les suivantes :
Un schéma JSON se compose de types d’éléments simples et complexes. Les éléments possèdent des attributs qui ajoutent des règles à ceux-ci. Lorsque ces éléments et attributs sont déplacés vers un formulaire adaptatif, ils sont automatiquement mis en correspondance avec les composants de formulaires adaptatifs correspondants.
Cette mise en correspondance des éléments JSON avec les composants de formulaires adaptatifs est la suivante :
"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."
}
Élément, propriétés ou attributs JSON | Composant de formulaire adaptatif |
---|---|
Propriétés de chaînes avec contrainte d’énumération et enumNames. Syntaxe,
|
Composant de liste déroulante :
|
Propriété de chaîne avec contrainte de format. Par exemple, e-mail et date. Syntaxe,
|
|
|
Champ de texte |
propriété de nombre |
Champ numérique dont le sous-type est défini comme flottant |
Propriété Entier |
Champ numérique dont le sous-type est défini sur entier |
Propriété Booléen |
Basculer |
Propriété de l’objet |
Panneau |
Propriété de tableau | Panneau répétable avec le minimum et le maximum égaux aux minItems et maxItems respectivement. Seuls les tableaux homogènes sont pris en charge. Par conséquent, la contrainte d’éléments doit être un objet et n’est pas un tableau. |
Le formulaire adaptatif utilise les informations disponibles dans le schéma JSON pour mapper chaque champ généré. En particulier :
title
sert de libellé aux composants de formulaire adaptatif.description
est définie comme description longue pour un composant de formulaire adaptatif.default
sert de valeur initiale d’un champ de formulaire adaptatif.maxLength
est définie en tant qu’attribut maxlength
du composant champ de texte.minimum
, maximum
, exclusiveMinimum
et exclusiveMaximum
sont utilisées pour le composant zone numérique.DatePicker component
, les propriétés supplémentaires minDate
et maxDate
de schéma JSON sont fournis.minItems
et maxItems
servent à limiter le nombre d’éléments/champs qui peuvent être ajoutés ou retirés d’un composant de panneau.readOnly
définit l’attribut readonly
d’un composant de formulaire adaptatif.required
marque le champ de formulaire adaptatif comme obligatoire alors qu’en cas de panneau (lorsque le type est objet), les données JSON finales soumises ont des champs avec une valeur vide correspondant à cet objet.pattern
est définie comme modèle de validation (expression régulière) dans le formulaire adaptatif.Vous trouverez ci-dessous un exemple de schéma JSON.
{
"$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"
}
}
}
Les clés de définition sont utilisées pour identifier les schémas réutilisables. Les définitions de schéma réutilisables sont utilisées pour créer des fragments. Il est semblable à l’identification des types complexes dans XSD. Un exemple de schéma JSON dont la définition est fournie ci-dessous :
{
"$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" }
}
}
L’exemple ci-dessus définit un enregistrement de client dans lequel chaque client dispose d’une expédition et d’une adresse de facturation. La structure des deux adresses est la même : les adresses indiquent une rue, la ville et un état. Il est donc préférable de ne pas dupliquer les adresses. Cela simplifie également l’ajout et la suppression de champs simples pour toutes les nouvelles modifications.
Vous pouvez utiliser la propriété aem:afProperties pour préconfigurer le champ de schéma JSON pour mapper vers un composant de formulaire adaptatif personnalisé. Un exemple est répertorié ci-dessous :
{
"properties": {
"sizeInMB": {
"type": "integer",
"minimum": 16,
"maximum": 512,
"aem:afProperties" : {
"sling:resourceType" : "/apps/fd/af/components/guideTextBox",
"guideNodeClass" : "guideTextBox"
}
}
},
"required": [ "sizeInMB" ],
"additionalProperties": false
}
JavaScript est le langage d’expression utilisé pour les formulaires adaptatifs. Toutes les expressions sont des expressions JavaScript valides qui utilisent des API de modèle de script pour les formulaires adaptatifs. Vous pouvez préconfigurer les objets de formulaire pour évaluer une expression sur un événement de formulaire.
Utilisez la propriété aem:afproperties pour préconfigurer les expressions ou scripts de formulaires adaptatifs pour les composants de ces formulaires. Par exemple, lorsque l’événement initialize est déclenché, le code ci-dessous définit la valeur du champ téléphonique et imprime une valeur dans le journal :
"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\") "
}
}
}
Vous devez être membre du groupe forms-power-user pour configurer des scripts ou des expressions pour l’objet de formulaire. Le tableau ci-dessous répertorie tous les événements de script pris en charge pour un composant de formulaire adaptatif.
Composant \ Événement | initialize |
Calculer | Visibilité | Valider | Activé | Validation de la valeur | Cliquez sur | Options |
---|---|---|---|---|---|---|---|---|
Champ de texte | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
||
Champ numérique | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
||
Procédure pas à pas numérique | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
||
Bouton radio | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
||
Téléphone | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
||
Basculer | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
||
Bouton | ![]() |
![]() |
![]() |
![]() |
||||
Case à cocher | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
Liste déroulante | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
Choix d’image | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
Champ de saisie de date | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
||
Sélecteur de date | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|||
Pièce jointe | ![]() |
![]() |
![]() |
![]() |
![]() |
|||
Image | ![]() |
![]() |
||||||
Dessin | ![]() |
![]() |
||||||
Panneau | ![]() |
![]() |
Certains exemples d’utilisation d’événements dans un JSON masquent un champ sur l’événement initialize et configurent la valeur d’un autre champ sur l’événement de validation de valeur. Pour plus d’informations sur la création d’expressions pour les événements de script, voir Expressions de formulaire adaptatif.
Voici l’exemple de code JSON pour les exemples mentionnés précédemment.
"name": {
"type": "string",
"aem:afProperties": {
"events" : {
"Initialize" : "this.visible = false;"
}
}
}
"Income": {
"type": "object",
"properties": {
"monthly": {
"type": "number",
"aem:afProperties": {
"events" : {
"Value Commit" : "IncomeYearly.value = this.value * 12;"
}
}
},
"yearly": {
"type": "number",
"aem:afProperties": {
"name": "IncomeYearly"
}
}
}
}
Vous pouvez ajouter les restrictions suivantes aux éléments de schéma JSON pour limiter les valeurs possibles pour un composant de formulaire adaptatif :
Propriété de schéma |
Type de données |
Description |
Composant |
|
Chaîne |
Spécifie la limite supérieure pour les valeurs numériques et les dates. Par défaut, la valeur maximale est incluse. |
|
|
Chaîne |
Définit la limite inférieure pour les valeurs numériques et les dates. Par défaut, la valeur minimale est incluse. |
|
|
Booléen |
Si elle est définie sur true, la valeur numérique ou la date spécifiée dans le composant de formulaire doit être inférieure à la valeur numérique ou la date spécifiée pour la propriété maximum. Si elle est définie sur false, la valeur numérique ou la date spécifiée dans le composant de formulaire doit inférieure ou égale à la valeur numérique ou la date spécifiée pour la propriété maximum. |
|
|
Booléen |
Si elle est définie sur true, la valeur numérique ou la date spécifiée dans le composant de formulaire doit être supérieure à la valeur numérique ou la date spécifiée pour la propriété minimum. Si elle est définie sur false, la valeur numérique ou la date spécifiée dans le composant de formulaire doit être supérieure ou égale à la valeur numérique ou la date spécifiée pour la propriété minimum. |
|
|
Chaîne |
Indique le nombre minimum de caractères autorisés dans un composant. La longueur minimale doit être égale ou supérieure à zéro. |
|
maxLength |
Chaîne | Spécifie le nombre maximal de caractères autorisés dans un composant. La longueur maximale doit être égale ou supérieure à zéro. |
|
|
Chaîne |
Spécifie la séquence de caractères. Un composant accepte les caractères si les caractères sont conformes au modèle spécifié. Les propriétés de motif mappent vers le motif de validation du composant de formulaire adaptatif correspondant. |
|
maxItems |
Chaîne | Indique le nombre maximum d’éléments dans un tableau. Le nombre maximal d’éléments doit être égal ou supérieur à zéro. | |
minItems |
Chaîne | Indique le nombre minimum d’éléments dans un tableau. Le nombre d’éléments minimum doit être égal ou supérieur à zéro. |
Les formulaires adaptatifs ne prennent pas en charge les éléments suivants de schéma JSON :
Pourquoi est-ce que je ne parviens pas à faire glisser des éléments individuels d’un sous-formulaire (structure générée à partir de n’importe quel type complexe) pour les sous-formulaires répétables (les valeurs minOccurs ou maxOccurs sont supérieures à 1) ?
Dans un sous-formulaire répétable, vous devez utiliser le sous-formulaire complet. Si vous souhaitez uniquement des champs sélectifs, utilisez la structure entière et supprimez les champs indésirables.
Je dispose d’une longue structure complexe dans l’Outil de recherche de contenu. Comment puis-je trouver un élément spécifique ?
Vous disposez de deux options :
Quelle doit être l’extension d’un fichier de schéma JSON ?
L’extension d’un fichier de schéma JSON doit être .schema.json, Par exemple, <nom_fichier>.schema.json.