Exposition de vues dénormalisées

Objective

After completing this lesson, you will be able to définir des services adaptés à des cas d'utilisation spécifiques à l'aide de vues dénormalisées

Expressions de chemin d'accès

Le service d'administration implémenté dans notre scénario présente jusqu'à présent le modèle de données sous-jacent d'une manière 1:1. De tels services sont plutôt rares. Au lieu de cela, les services exposent souvent des vues dénormalisées qui sont adaptées à des cas d'utilisation spécifiques. Prenons un exemple dans ce qui suit.

Nous modélisons un CatalogService qui expose les livres et les auteurs du modèle de domaine pour une utilisation dans une application de librairie. En d'autres termes, ce service est destiné à permettre aux utilisateurs du catalogue d'accéder aux livres et à leurs auteurs et de passer des commandes.

Le nouveau service que nous créons maintenant est également défini dans le dossier srv du projet CAP. Pour cela, nous utilisons le fichier cat-service.cds (voir figure suivante).

Tout d'abord, nous procédons exactement de la même manière qu'avec AdminService : nous importons toutes les définitions avec le préfixe d'espace nom com.sap.learning du fichier db/schema.cds et nous définissons l'alias local db pour les définitions importées (ligne 1).

Les lignes 3 à 31 contiennent alors un bloc service qui définit une interface de service appelée CatalogService comme un ensemble d'entités exposées. L'annotation @path est utilisée pour spécifier le chemin d'URL /cat sous lequel le service sera accessible.

CatalogService présente deux entités qui sont définies comme des projections sur les entités du modèle de domaine sous-jacent. Les lignes 5ff déclarent une entité appelée Dossiers, qui est une vue de l'entité Pages définie dans le modèle de domaine importé. Par conséquent, une entité Auteurs est déclarée dans les lignes 18ff comme une projection sur l'entité Auteurs à partir du modèle de domaine.

Nous examinerons plus en détail l'entité Auteurs dans le CatalogService ultérieurement. Examinons d'abord de plus près l'entité Livres.

Contrairement à l'entité Books dans le service d'administration, qui expose l'entité de domaine sous-jacente de manière 1:1, l'entité Books dans le CatalogService utilise une clause select explicite. Cela signifie que seul ce qui est explicitement répertorié dans la clause select est exposé.

Les expressions de chemin d'accès peuvent être utilisées dans la clause select pour naviguer le long des associations et/ou des éléments structurés.

Dans l'exemple illustré, l'association auteur de l'entité de modèle Pages est utilisée pour accéder au nom de l'auteur et celui-ci est inclus dans la clause select en tant qu'auteur.

publCountry est également une association définie sur l'entité de modèle Books. Il est utilisé pour relier l'entité Livres à la liste de codes sap.common.Countries . Dans l'exemple, le nom de pays de cette liste de codes est inclus dans la clause select en tant que publCountry.

L'élément de prix de l'entité de domaine Dossiers a un type structuré. Les deux composantes montant et devise de ce type sont également incluses dans la clause select via les expressions de chemin d'accès correspondantes.

Sélecteur intelligent et clause d'exclusion

Examinons maintenant la deuxième entité exposée via le service de catalogue. L'entité Auteurs dans le service de catalogue est une projection sur l'entité Auteurs à partir du modèle de domaine importé. 

En utilisant la clause d'exclusion en combinaison avec le sélecteur intelligent * dans la clause select, tous les éléments de l'entité de domaine Auteurs, à l'exception de ceux répertoriés dans la liste d'exclusion, sont inclus dans la projection.

L'entité de modèle Auteurs a une association d'époques via laquelle l'entité Auteurs est liée à la liste de codes Epochs. Le nom de l'époque de cette liste de codes est inclus dans la projection en tant qu'élément supplémentaire avec la période de nom à l'aide d'une expression de chemin.

Démonstration et exercice : définir un service basé sur des vues dénormalisé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 Ajouter un contrôle d'exécution simultanée optimiste si vous avez réussi. Vous pouvez également utiliser la branche 9_concurrency_control à partir 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 10_denormalized_views 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 voir comment définir un service basé sur des vues dénormalisées.