Validation de l'entrée utilisateur

Objective

After completing this lesson, you will be able to utiliser des annotations pour valider l'entrée utilisateur

Annotations

CAP prend en charge la validation des entrées côté serveur. Ceci est contrôlé par des annotations, dont certaines sont présentées ci-dessous. Les informations qui vont au-delà de ce qui est discuté ici sont disponibles dans la documentation de la PAC.

Dans cette formation, nous aborderons les annotations suivantes :

  • @mandatory
  • @assert.target
  • @assert.range

@obligatoire

Nous commençons par l'annotation @mandatory. Les éléments marqués d'un @mandatory sont contrôlés pour les entrées non vides : null et les chaînes vides (tronquées) sont rejetées.

Dans l'exemple illustré, l'élément de titre de l'entité Pages est annoté avec @mandatory. Si vous essayez de créer une page sans titre, la requête correspondante renvoie une réponse avec le code de statut HTTP 400 (requête incorrecte). La réponse contient un message d'erreur similaire à ce qui suit :

JSON
123456
"error": { "code": "400", "message": "Value is required", "target": "title", "@Common.numericSeverity": 4 }

Remarque

Comme dans SQL, vous pouvez spécifier des valeurs par défaut à renseigner lors des INSERT si aucune valeur n'est spécifiée pour un élément donné. Le mot-clé default est disponible à cet effet. Dans l'exemple précédent, la valeur 0 est définie pour l'élément de stock de l'entité Books si aucune valeur n'est fournie pour cet élément lors de la création d'un nouveau livre.

@assert.target

L'annotation @assert.target peut être utilisée pour les associations gérées à un d'une entité de modèle CDS. L'annotation est utilisée pour vérifier lors des opérations CREATE et UPDATE si l'entité cible à laquelle l'association fait référence existe. En d'autres termes, utilisez cette annotation pour vous assurer qu'une clé étrangère non nulle dans une table a une clé primaire correspondante dans la table cible associée/référencée.

Dans l'exemple illustré, l'auteur de l'association gérée à un de l'entité Livres est annoté avec @mandatory et @assert.target. L'annotation @mandatory garantit qu'un auteur de livre est spécifié. L'annotation @assert.target vérifie également si l'auteur indiqué existe.

Si vous essayez de créer un nouveau dossier et que l'ID d'auteur indiqué dans la requête n'existe pas dans la base de données, l'opération CREATE demandée n'est pas exécutée. Au lieu de cela, la réponse HTTP a le code de statut 400 (Bad Request), comme nous l'avons déjà vu avec l'annotation @mandatory . Le corps de la réponse contient un message d'erreur similaire à ce qui suit. Il pointe vers la clé étrangère non valide :

JSON
123456
"error": { "code": "400", "message": "Value doesn't exist", "target": "author_ID", "@Common.numericSeverity": 4 }

@assert.range

L'annotation @assert.range permet de spécifier des plages de valeurs pour des éléments d'entités de modèle avec des types ordinaux, c'est-à-dire des types numériques ou de date/heure. La plage de valeurs est définie comme un intervalle avec la syntaxe suivante :

Code Snippet
1
@assert.range: [min, max]

L'intervalle défini est considéré comme un intervalle fermé, c'est-à-dire qu'il est vérifié si une valeur indiquée est supérieure ou égale à min et inférieure ou égale à max.

Pour les éléments enum, true peut être spécifié pour limiter les valeurs possibles aux valeurs d'énumération définies.

Dans l'exemple illustré, l'élément de genre de l'entité Pages a le type de données Genre, qui est un type personnalisé avec des valeurs d'énumération. Annoter l'élément de genre avec @assert.range: true garantit que seules les valeurs de l'énumération peuvent être spécifiées pour cet élément, c'est-à-dire 1 ou 2.

Si, par exemple, la valeur 3 est fournie pour l'élément de genre lors de la création d'un livre, l'opération CREATE demandée n'est pas exécutée. Au lieu de cela, la réponse HTTP a le code de statut 400 (Requête incorrecte) et le corps de la réponse contient un message d'erreur similaire à ce qui suit :

Code Snippet
123456
"error": { "code": "400", "message": "Value 3 is invalid according to enum declaration {1, 2}", "target": "genre", "@Common.numericSeverity": 4 }

Démonstration et exercice : implémentation de la validation des entrées

Remarque

Dans l'exercice, suivez les instructions étape par étape de la démonstration suivante dans SAP Business Application Studio.

Comme point de départ de l'exercice, utilisez le résultat de l'exercice précédent Utiliser les données localisées, les listes de codes et les types de réutilisation communs si vous avez réussi. Vous pouvez également utiliser la branche 7_localized_data du référentiel GitHub suivant comme point de départ :

https://github.com/SAP-samples/cap-development-learning-journey

L'implémentation complète de la simulation se trouve dans la branche 8_input_validation du référentiel GitHub.

Vous trouverez ici des informations détaillées sur le contenu du référentiel et son utilisation.

Regardez la vidéo pour découvrir comment implémenter la validation des entrées.