Introduction
Application des techniques et concepts de base
Utilisation des classes locales
Lecture des données de la base de données
Utilisation d'objets de données structurés
Utilisation de tables internes complexes
Implémentation de mises à jour de base de données à l'aide d'objets de gestion
Description du modèle de programmation d'applications ABAP RESTful

Utilisation des vues CDS

Objectives

After completing this lesson, you will be able to:
  • Analyser une définition de vue CDS.
  • Lire les données à l'aide d'une vue CDS.

Vues CDS

Définitions de vue dans ABAP Core Data Services (ABAP CDS)

ABAP Core Data Services, ou ABAP CDS en abrégé, est une infrastructure permettant de définir et d'utiliser des modèles de données sémantiquement riches dans ABAP. Ils utilisent un DDL CDS pour définir des entités CDS qui implémentent un modèle de données sémantique. Les entités de modélisation CDS les plus importantes sont les entités de vue CDS.

La définition de vue CDS contient une logique SQL réutilisable, parfois aussi simple qu'une projection de zones de table et parfois plus sophistiquée avec des calculs, des agrégations, des jointures, des unions, etc.

Une définition de vue CDS peut contenir des associations pour refléter les relations du modèle de données. Les utilisateurs de la vue peuvent utiliser les associations pour récupérer les données liées.

Enfin, les annotations sont utilisées pour enrichir sémantiquement la définition de vue. Ces métadonnées sont évaluées par des frameworks qui reposent sur des définitions de vues CDS. L'une de ces structures est le modèle de programmation d'applications ABAP RESTful, pour lequel nous aborderons un exemple plus loin dans ce cours.

Regardons des exemples de définitions de vues CDS.

Les définitions de vues CDS sont contenues dans les objets du référentiel de type Définition de données. Examinons maintenant le code source de la définition de données /DMO/I_CONNECTION.

La partie principale est l'instruction DEFINE VIEW ENTITY. Il contient le nom de l'entité Vue CDS et, après le mot-clé FROM, la source de données. Dans notre exemple, le nom de l'entité de vue est /DMO/I_Connection et la source de données est la table de base de données /dmo/connection. Ajout facultatif AS, définit un nom d'alias Connexion pour adresser la source de données dans la définition de vue.

Remarque

La source d'une entité de vue CDS peut également être une autre vue CDS.

Une paire d'accolades contient la liste des éléments de vue. Dans notre exemple, les éléments de vue sont des zones de la table de base de données /dmo/connection. Mot-clé Clé devant les deux premiers éléments les définit comme zones clés de l'entité Vue CDS. L'option AS définit un nom d'alias pour chaque élément de vue.

L'ajout association définit une relation avec une autre entité de vue CDS. Dans notre exemple, la vue liée est l'entité de vue CDS /DMO/I_Carrier et le nom de l'association est _Airline.

Cette association devient disponible pour les consommateurs de la vue en l'ajoutant à la liste des éléments. On parle alors d'exposition de l'association.

Les annotations commencent par le signe @ et sont utilisées pour enrichir sémantiquement la définition de vue pour les consommateurs. Les annotations antérieures à la définition de vue sont appelées annotations d'entité. Les annotations d'entité sont utilisées pour définir des métadonnées pour l'entité de vue dans son ensemble. Les annotations entre accolades sont appelées annotations d'élément. Les annotations d'élément sont utilisées pour définir des métadonnées pour les différents éléments de la vue.

Vous avez déjà appris à utiliser l'outil Aperçu des données pour afficher et analyser le contenu d'une table de base de données. Cet outil est également disponible pour les entités de vue CDS.

Pour ouvrir l' aperçu des données pour une entité CDS donnée, cliquez avec le bouton droit de la souris n'importe où dans la définition de données et sélectionnez Ouvrir avecl'aperçu des données. Vous pouvez également placer le curseur n'importe où dans la définition des données et appuyer sur F8.

L'outil affiche les données renvoyées par l'entité CDS. Les mêmes fonctions sont disponibles pour trier ou filtrer les données et ajuster l'affichage.

Si la définition de vue contient une ou plusieurs associations, vous pouvez les utiliser pour afficher les données liées. Pour ce faire, procédez comme suit :

  1. Cliquez avec le bouton droit de la souris sur une ligne dans l'affichage.
  2. Dans le menu contextuel, sélectionnez Suivre association.
  3. Dans la liste des associations disponibles, sélectionnez celle qui vous intéresse.

Si vous voulez rechercher toutes les vues CDS avec une certaine table de base de données comme source, vous pouvez utiliser l'outil Cas d'emploi d'ADT. Pour utiliser cet outil, procédez comme suit :

  1. Ouvrez la définition de la table de base de données.
  2. Cliquez avec le bouton droit de la souris n'importe où dans le code source et sélectionnez Obtenir les cas d'emploi dans le menu contextuel. Vous pouvez également appuyer sur Ctrl + Maj + G ou cliquer sur le bouton de la barre d'outils avec le même symbole.
  3. La vue Recherche affiche une liste de tous les objets de développement qui utilisent directement la table de base de données.

Vous pouvez appliquer des filtres au cas d'emploi si, par exemple, vous êtes uniquement intéressé par des objets de certains packages ou objets du type d'objet spécifique. L'exemple illustre comment filtrer les vues CDS qui utilisent la table.

Comment analyser une vue CDS

Vues CDS dans ABAP SQL

Lorsque vous implémentez une instruction SELECT dans ABAP, vous pouvez utiliser une entité de vue CDS comme source de données au lieu de lire directement à partir de la table de base de données. Cela présente plusieurs avantages.

  • Réutilisation de la logique SQL contenue dans la vue CDS
  • Lecture concise et facile à lire des données liées à l'aide des associations
  • Parfois, les noms des vues et des éléments de vue sont plus lisibles que les noms plus techniques des tables de base de données et des zones de table.

L'instruction SELECT dans l'exemple utilise l'entité de vue CDS /DMO/I_Connection comme source de données.

Remarque

Notez que les noms utilisés dans la clause FIELDS et les conditions WHERE sont les noms d'alias des éléments de vue.

Le troisième élément de la clause FIELDS utilise l'association exposée _Airline. Il lit l'élément Name à partir de l'entité de vue CDS associée /DMO/I_Carrier. Ce type d'élément est appelé expression de chemin. La barre oblique inverse (\) est un préfixe obligatoire pour les noms d'association.

Analyse et utilisation d'une entité de vue CDS

Dans cet exercice, vous lisez à partir d'une entité de vue CDS plutôt qu'à partir de la table de base de données directement. Cela vous permet également d'accéder facilement au nom de la compagnie aérienne.

Modèle :

  • /LRN/CL_S4D400_DBS_SELECT (classe globale)

Solution :

  • /LRN/CL_S4D400_DBS_CDS (classe globale)

Tâche 1: Copier modèle (facultatif)

Copiez la classe de modèle. Si vous avez terminé l'exercice précédent, vous pouvez ignorer cette tâche et continuer à modifier votre classe ZCL_##_SELECT.

Étapes

  1. Copiez la classe /LRN/CL_S4D400_DBS_SELECT dans une classe de votre propre package (nom proposé : ZCL_##_CDS, où ## correspond à votre numéro de groupe).

    1. Ouvrez le code source de la classe globale /LRN/CL_S4D400_DBS_SELECT.

    2. Liez la vue Explorateur de projets à l'aide de l'éditeur.

    3. Dans la vue Explorateur de projets, cliquez avec le bouton droit de la souris sur la classe /LRN/CL_S4D400_DBS_SELECT pour ouvrir le menu contextuel.

    4. Dans le menu contextuel, sélectionnez Dupliquer ....

    5. Saisissez le nom de votre package dans la zone Package. Dans la zone Nom, saisissez le nom ZCL_##_CDS, où ## représente votre numéro de groupe.

    6. Ajustez la description et cliquez sur Suivant.

    7. Confirmez l'ordre de transport et cliquez sur Terminer.

Tâche 2: Analyser l'entité de vue CDS

Analysez la définition de l'entité de vue CDS /DMO/I_Connection.

Étapes

  1. Ouvrez l'objet de développement qui contient la définition de l'entité de vue CDS /DMO/I_Connection.

    1. Dans la barre d'outils Eclipse, sélectionnez Ouvrir ABAP Development Object ou appuyez sur Ctrl + Maj + A.

    2. Dans la zone de saisie, saisissez /DMO/I_Con comme chaîne de recherche.

    3. Dans la liste des postes concordants, cliquez sur /DMO/I_CONNECTION (définition de données) et sélectionnez OK.

  2. Analysez la liste des éléments de l'entité de vue CDS.

    1. Naviguez jusqu'à la liste séparée par des virgules entre les accolades ( { } ).

    2. Vous trouverez les noms d'alias après le mot-clé AS.

  3. Ouvrez les informations sur l'élément (F2) pour la cible de l'association _Airline.

    1. Cliquez sur /DMO/I_Carrier avant as _Airline et appuyez sur F2 pour afficher les informations sur l'élément.

Tâche 3: Déclarer attribut supplémentaire

Étendez la classe locale lcl_connection avec un attribut d'instance privé carrier_name. Ajoutez une sortie pour le nouvel attribut à l'implémentation de la méthode get_output( ).

Remarque

Le nouvel attribut n'est pas encore renseigné. Pour la renseigner, nous ajusterons l'instruction SELECT dans la tâche suivante de cet exercice.

Étapes

  1. Retournez à la classe locale lcl_connection dans votre classe globale.

    1. Dans la classe globale, sélectionnez Types locaux.

  2. Ajoutez l'attribut privé suivant à la définition de classe :

    attributs

    Nom de l'attributPérimètreType de données
    nom_transporteurInstance/DMO/CARRIER_NAME
    1. Adaptez le code comme suit :

      Code Snippet
      1234567891011
      PRIVATE SECTION. DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /dmo/connection_id. DATA airport_from_id TYPE /dmo/airport_from_id. DATA airport_to_id TYPE /dmo/airport_to_id. DATA carrier_name TYPE /dmo/carrier_name. ENDCLASS.
  3. Étendez l'implémentation de la méthode get_output. Ajoutez le nom du transporteur au modèle de chaîne avec l'identification du transporteur.

    1. Naviguez vers l'implémentation de la méthode get_output.

    2. Remplacez l'instruction APPEND |Carrier:     { carrier_id      }| TO r_output. par l'instruction suivante :

      Code Snippet
      123
        APPEND |Carrier:     { carrier_id } { carrier_name }| TO r_output.
  4. Activez la classe. Exécutez-la et analysez la sortie de la console.

    1. Appuyez sur Ctrl + F3 pour activer la classe.

    2. Appuyez sur F9 pour exécuter la classe.

Tâche 4: Utiliser l'entité de vue CDS

Dans l'implémentation du constructeur de méthode, remplacez l'instruction SELECT qui lit la table de base de données /dmo/connection par une instruction SELECT qui lit à partir de l'entité de vue CDS /DMO/I_Connection.

Étapes

  1. Dans l'implémentation du constructeur de méthode, commentez l'instruction SELECT.

    1. Sélectionnez toutes les lignes appartenant à la SELECT SINGLE ... ..

    2. Appuyez sur Ctrl + < pour ajouter un signe étoile (*) devant chaque ligne sélectionnée.

  2. Après le code commenté, ajoutez une instruction SELECT qui lit un enregistrement individuel à partir de la vue CDS /DMO/I_Connection.

    1. Adaptez le code comme suit :

      Code Snippet
      123456789101112
      * SELECT SINGLE * FROM /dmo/connection * FIELDS airport_from_id, airport_to_id * WHERE carrier_id = @i_carrier_id * AND connection_id = @i_connection_id * INTO ( @airport_from_id, @airport_to_id ). SELECT SINGLE FROM /DMO/I_Connection
  3. Implémentez la clause FIELDS. Lire les éléments de vue DepartureAirport et DestinationAirport. En outre, lisez l'élément de vue Nom à partir de la cible de l'association _Airline.

    Astuce

    Utilisez la saisie semi-automatique (Ctrl + Espace) pour saisir les noms.
    1. Après FROM /DMO/I_Connection saisissez FIELDS.

    2. Après un vide, appuyez sur Ctrl + Espace et sélectionnez DepartureAirport.

    3. Après une virgule et un blanc, appuyez à nouveau sur Ctrl + Espace et sélectionnez DestinationAirport.

    4. Après une virgule et un espace, saisissez une barre oblique inverse (\), appuyez sur Ctrl + Espace et sélectionnez _Airline.

    5. Immédiatement après _Airline, saisissez un tiret (-), appuyez sur Ctrl + Espace et sélectionnez Nom.

    6. La clause FIELDS complète doit ressembler à ceci :

      Code Snippet
      123
      FIELDS DepartureAirport, DestinationAirport, \_Airline-Name
  4. Implémentez la condition WHERE. Limitez les éléments clés de l'entité de vue CDS avec les valeurs des paramètres d'importation i_carrier_id et i_connection_id. N'oubliez pas d'ignorer les paramètres avec le préfixe @.

    Astuce

    Utilisez la saisie semi-automatique (Ctrl + Espace) pour saisir les noms des éléments et des paramètres.
    1. Ajoutez le code suivant après la clause FIELDS :

      Code Snippet
      1234
      WHERE AirlineID = @i_carrier_id AND ConnectionID = @i_connection_id
  5. Implémentez la clause INTO. Stockez le résultat SELECT dans les attributs airport_from_id, airport_to_id et carrier_name. N'oubliez pas d'échapper aux attributs avec le préfixe @.

    Astuce

    Utilisez la saisie semi-automatique (Ctrl + Espace) pour saisir les noms des attributs.
    1. Adaptez le code comme suit :

      Code Snippet
      12345
      WHERE AirlineID = @i_carrier_id AND ConnectionID = @i_connection_id INTO ( @airport_from_id, @airport_to_id, @carrier_name ).
    2. L'instruction SELECT complète doit ressembler à ceci :

      Code Snippet
      12345678
      SELECT SINGLE FROM /DMO/I_Connection FIELDS DepartureAirport, DestinationAirport, \_Airline-Name WHERE AirlineID = @i_carrier_id AND ConnectionID = @i_connection_id INTO ( @airport_from_id, @airport_to_id, @carrier_name ).
  6. Activez la classe. Exécutez-la et analysez la sortie de la console. Vérifiez que la sortie du nouvel attribut affiche des données.

    1. Appuyez sur Ctrl + F3 pour activer la classe.

    2. Appuyez sur F9 pour exécuter la classe.