Vous consultez actuellement l'aide de la version:

Conditions préalables

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.

Utilisation d’un schéma JSON comme modèle de formulaire

AEM 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 :

  • La structure du modèle JSON s’affiche sous forme d’arborescence sous l’onglet Outil de recherche de contenu en mode création pour un formulaire adaptatif. Vous pouvez faire glisser et ajouter un élément de la hiérarchie JSON dans le formulaire adaptatif.
  • Vous pouvez préremplir le formulaire avec le code JSON conforme au schéma associé.
  • Au moment de l’envoi, les données saisies par l’utilisateur sont envoyées au format JSON approprié pour le schéma associé.

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 :

É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,

 {

"type" : "string",

"enum" : ["M", "F"]

"enumNames" : ["Male", "Female"]

}

 

Composant de liste déroulante :

  • Les valeurs énumérées dans enumNames s’affichent dans la boîte de dialogue.
  • Les valeurs répertoriées dans l’énumération sont utilisées pour le calcul.

Propriété de chaîne avec contrainte de format. Par exemple, e-mail et date.

Syntaxe,

{

"type" : "string",

"format" : "email"

}

 

  • Le composant de message électronique est mappé lorsque le type est une chaîne et le format un message électronique.
  • Le composant de textbox avec validation est mappé lorsque le type est une chaîne et le format un nom d’hôte.

{

"type" : "string",

}



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.
 

Propriétés communes de schéma

Le formulaire adaptatif utilise les informations disponibles dans le schéma JSON pour mapper chaque champ généré. En particulier :

  • La propriété de titre sert de libellé aux composants de formulaire adaptatif.
  • La propriété description est définie comme description longue pour un composant de formulaire adaptatif.
  • La propriété par défaut sert de valeur initiale d’un champ de formulaire adaptative.
  • La propriété maxLength est définie en tant qu’attribut maxlength du composant champ de texte.
  • Les propriétés minimum, maximum, exclusiveMinimum et exclusiveMaximum sont utilisées pour le composant de zone numérique.
  • Pour prendre en charge la plage de composants DatePicker, les propriétés minDate et maxDate supplémentaires de schéma JSON sont fournis.
  • Les propriétés minItems et maxItems servent à limiter le nombre d’éléments/champs qui peuvent être ajoutés ou retirés d’un composant de panneau.
  • La propriété définie en lecture seule définit l’attribut lecture seule d’un composant de formulaire adaptatif.
  • La propriété requise marque le champ de formulaire adaptatif comme obligatoire alors qu’en cas de panneau (dans lequel le type est objet), les données JSON finales soumises ont des champs avec une valeur vide correspondant à cet objet.
  • La propriété motif est définie comme motif de validation (expression régulière) sous forme adaptative.

Exemple de schéma JSON

Vous trouverez ci-dessous un exemple de schéma JSON.

{
	"$schema": "http://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"
		}
	}
}

Définitions de schéma réutilisables

Les touches 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": "http://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.

Préconfiguration des champs dans la définition du schéma JSON

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
}

Valeurs possibles de limite pour un composant de formulaire adaptatif

Vous pouvez ajouter des 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

maximum

Chaîne

Spécifie la limite supérieure pour les valeurs numériques et les dates. Par défaut, la valeur maximale est incluse.

  • Zone numérique
  • Procédure pas à pas numérique
  • Sélecteur de date

minimum

Chaîne

Définit la limite inférieure pour les valeurs numériques et les dates. Par défaut, la valeur minimale est incluse.

  • Zone numérique
  • Procédure pas à pas numérique
  • Sélecteur de date

exclusiveMaximum

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.

  • Zone numérique
  • Procédure pas à pas numérique
  • Sélecteur de date

exclusiveMinimum

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.

  • Zone numérique
  • Procédure pas à pas numérique
  • Sélecteur de date

minLength

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.

  • Zone de texte
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.
  • Zone de texte

pattern

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.

  • Tous les composants de formulaires adaptatifs qui sont mappés vers un schéma XSD  
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.  

Éléments non pris en charge

Les formulaires adaptatifs ne prennent pas en charge les éléments suivants de schéma JSON :

  • Type nul
  • Types d’union tels quels et
  • OneOf, AnyOf, AllOf, et NOT
  • Seuls les tableaux homogènes sont pris en charge. Par conséquent, la contrainte d’éléments doit être un objet et ne doit pas être un tableau.

Foire aux questions

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 :

  • Parcourez la structure de l’arborescence.
  • Utilisez la zone Rechercher pour rechercher un élément.

Ce produit est distribué sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage à l’identique 3.0 non transposé  Les publications Twitter™ et Facebook ne sont pas couvertes par les dispositions Creative Commons.

Mentions légales   |   Politique de confidentialité en ligne