Erste Schritte
Grundlegende Methoden und Konzepte anwenden
Mit lokalen Klassen arbeiten
Daten aus der Datenbank lesen
Mit strukturierten Datenobjekten arbeiten
Mit komplexen internen Tabellen arbeiten
Datenbankänderungen mit Business Objects implementieren
Das ABAP-RESTful-Anwendungsprogrammiermodell beschreiben

Mit CDS-Views arbeiten

Objectives

After completing this lesson, you will be able to:
  • Analysieren Sie eine CDS-View-Definition.
  • Daten über eine CDS-View lesen.

CDS-Views

View-Definitionen in ABAP Core Data Services (ABAP CDS)

ABAP Core Data Services, kurz ABAP CDS, sind eine Infrastruktur zum Definieren und Nutzen semantisch reicher Datenmodelle in ABAP. Sie verwenden eine CDS DDL, um CDS-Entitäten zu definieren, die ein semantisches Datenmodell implementieren. Die wichtigsten CDS-Modellierungsentitäten sind CDS-View-Entitäten.

Die CDS-View-Definition enthält wiederverwendbare SQL-Logik: manchmal so einfach wie eine Projektion von Tabellenfeldern und manchmal komplexer mit Berechnungen, Aggregationen, Joins, Unions usw.

Eine CDS-View-Definition kann Assoziationen enthalten, um die Beziehungen des Datenmodells widerzuspiegeln. Consumer der View können die Assoziationen verwenden, um zugehörige Daten abzurufen.

Schließlich werden Annotationen verwendet, um die View-Definition semantisch anzureichern. Diese Metadaten werden von Frameworks ausgewertet, die auf CDS-View-Definitionen aufbauen. Ein solches Framework ist das ABAP-RESTful-Anwendungsprogrammiermodell, für das wir später in diesem Kurs ein Beispiel besprechen.

Schauen wir uns einige Beispiele für CDS-View-Definitionen an.

CDS-View-Definitionen sind in Repository-Objekten vom Typ Datendefinition enthalten. Sehen wir uns nun den Quelltext der Datendefinition /DMO/I_CONNECTION an.

Der Hauptteil ist die Anweisung DEFINE VIEW ENTITY. Sie enthält den Namen der CDS-View-Entität und nach dem Schlüsselwort FROM die Datenquelle. In unserem Beispiel lautet der Name der View-Entität „/DMO/I_Connection", und die Datenquelle ist die Datenbanktabelle „/dmo/connection". Der optionale Zusatz AS definiert einen Aliasnamen „Connection", um die Datenquelle innerhalb der View-Definition zu adressieren.

Notiz

Die Quelle einer CDS-View-Entität kann auch eine andere CDS-View sein.

Ein Paar geschweifter Klammern enthält die Liste der View-Elemente. In unserem Beispiel sind die View-Elemente Felder der Datenbanktabelle „/dmo/connection". Das Schlüsselwort „Key" vor den ersten beiden Elementen definiert sie als Schlüsselfelder der CDS-View-Entität. Der optionale Zusatz AS definiert einen Aliasnamen für jedes View-Element.

Der Zusatz association definiert eine Beziehung zu einer anderen CDS-View-Entität. In unserem Beispiel ist die zugehörige View die CDS-View-Entität /DMO/I_Carrier und der Name der Assoziation ist _Airline.

Diese Assoziation steht für Consumer der View zur Verfügung, nachdem sie zur Elementliste hinzugefügt wurde. Dieser Vorgang wird als Exponieren der Assoziation bezeichnet.

Annotationen beginnen mit dem At-Zeichen (@) und werden verwendet, um die View-Definition für Consumer semantisch anzureichern. Annotationen vor der View-Definition werden als Entitätsannotationen bezeichnet. Entitätsannotationen werden verwendet, um Metadaten für die View-Entität als Ganzes zu definieren. Annotationen zwischen den geschweiften Klammern werden als Elementannotationen bezeichnet. Elementannotationen werden verwendet, um Metadaten für die verschiedenen Elemente der View zu definieren.

Sie haben bereits gelernt, wie Sie das Werkzeug Datenvorschau verwenden, um den Inhalt einer Datenbanktabelle anzuzeigen und zu analysieren. Dieses Werkzeug ist auch für CDS-View-Entitäten verfügbar.

Um die Datenvorschau für eine bestimmte CDS-Entität zu öffnen, klicken Sie mit der rechten Maustaste auf eine beliebige Stelle in der Datendefinition, und wählen Sie Öffnen MitDatenvorschau. Alternativ können Sie den Cursor an eine beliebige Stelle in der Datendefinition setzen und F8 drücken.

Das Werkzeug zeigt die von der CDS-Entität zurückgegebenen Daten an. Dieselben Funktionen stehen zur Verfügung, um die Daten zu sortieren oder zu filtern und die Anzeige anzupassen.

Wenn die View-Definition eine oder mehrere Assoziationen enthält, können Sie diese verwenden, um zugehörige Daten anzuzeigen. Gehen Sie dazu wie folgt vor:

  1. Klicken Sie mit der rechten Maustaste auf eine Zeile in der Anzeige.
  2. Wählen Sie im Kontextmenü ///Follow Association.
  3. Wählen Sie aus der Liste der verfügbaren Assoziationen die gewünschte Assoziation aus.

Wenn Sie alle CDS-Views mit einer bestimmten Datenbanktabelle als Quelle finden möchten, können Sie das Werkzeug „///Verwendungsnachweis" von ADT verwenden. Um dieses Werkzeug zu verwenden, gehen Sie wie folgt vor:

  1. Öffnen Sie die Definition der Datenbanktabelle.
  2. Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle im Quelltext, und wählen Sie im Kontextmenü ///Verwendungsnachweis holen. Alternativ können Sie „Strg + Umschalt + G" drücken oder die Drucktaste mit demselben Symbol in der Symbolleiste wählen.
  3. Die View ///Suche zeigt eine Liste aller Entwicklungsobjekte an, die die Datenbanktabelle direkt verwenden.

Sie können Filter auf den Verwendungsnachweis anwenden, wenn Sie z.B. nur Objekte aus bestimmten Paketen oder Objekten des jeweiligen Objekttyps benötigen. Das Beispiel zeigt, wie Sie nach CDS-Views filtern, die die Tabelle verwenden.

Analysieren einer CDS-View

CDS-Views in ABAP SQL

Wenn Sie eine SELECT-Anweisung in ABAP implementieren, können Sie eine CDS-View-Entität als Datenquelle verwenden, anstatt direkt aus der Datenbanktabelle zu lesen. Dies hat verschiedene Vorteile:

  • Wiederverwendung der in der CDS-View enthaltenen SQL-Logik
  • Übersichtliches und einfaches Lesen zugehöriger Daten über die Assoziationen
  • Manchmal sind die Namen von Views und View-Elementen besser lesbar als die technischen Namen von Datenbanktabellen und Tabellenfeldern.

Die SELECT-Anweisung im Beispiel verwendet die CDS-View-Entität „/DMO/I_Connection" als Datenquelle.

Notiz

Beachten Sie, dass die in der FIELDS-Klausel und in den WHERE-Bedingungen verwendeten Namen die Aliasnamen der View-Elemente sind.

Das dritte Element in der FIELDS-Klausel verwendet die exponierte Assoziation „_Airline". Sie liest das Element Name aus der zugehörigen CDS-View-Entität /DMO/I_Carrier. Ein solches Element wird Pfadausdruck genannt. Der umgekehrte Schrägstrich (\) ist ein obligatorisches Präfix für Assoziationsnamen.

Eine CDS-View-Entität analysieren und verwenden

In dieser Übung lesen Sie aus einer CDS-View-Entität und nicht direkt aus der Datenbanktabelle. Dadurch haben Sie auch einen komfortablen Zugriff auf den Namen der Fluggesellschaft.

Vorlage:

  • /LRN/CL_S4D400_DBS_SELECT (globale Klasse)

Lösung:

  • /LRN/CL_S4D400_DBS_CDS (globale Klasse)

Aufgabe 1: Vorlage kopieren (optional)

Kopieren Sie die Vorlageklasse. Wenn Sie die vorherige Übung abgeschlossen haben, können Sie diese Aufgabe überspringen und mit der Bearbeitung Ihrer Klasse ZCL_##_SELECT fortfahren.

Schritte

  1. Kopieren Sie die Klasse /LRN/CL_S4D400_DBS_SELECT in eine Klasse in Ihrem eigenen Paket (Namensvorschlag: ZCL_##_CDS, wobei ## für Ihre Gruppennummer steht).

    1. Öffnen Sie den Quelltext der globalen Klasse /LRN/CL_S4D400_DBS_SELECT.

    2. Verknüpfen Sie die View Project Explorer mit dem Editor.

    3. Klicken Sie in der View Project Explorer mit der rechten Maustaste auf die Klasse /LRN/CL_S4D400_DBS_SELECT, um das Kontextmenü zu öffnen.

    4. Wählen Sie im Kontextmenü Duplicate ...

    5. Geben Sie den Namen Ihres Pakets in das Feld Package ein. Geben Sie im Feld Name den Namen ZCL_##_CDS ein, wobei ## für Ihre Gruppennummer steht.

    6. Passen Sie die Beschreibung an, und wählen Sie Next.

    7. Bestätigen Sie den Transportauftrag, und wählen Sie Finish.

Aufgabe 2: CDS-View-Entitäten analysieren

Analysieren Sie die Definition der CDS-View-Entität /DMO/I_Connection.

Schritte

  1. Öffnen Sie das Entwicklungsobjekt, das die Definition der CDS-View-Entität /DMO/I_Connection enthält.

    1. Wählen Sie in der Eclipse-Symbolleiste ///Open ABAP Development Object, oder drücken Sie Strg + Umschalt + A.

    2. Geben Sie im Eingabefeld als Suchzeichenfolge /DMO/I_Con ein.

    3. Klicken Sie in der Liste der passenden Einträge auf /DMO/I_CONNECTION (Datendefinition), und wählen Sie OK.

  2. Analysieren Sie die Elementliste der CDS-View-Entität.

    1. Navigieren Sie zur durch Kommata getrennten Listen zwischen dem Paar geschweifter Klammern ( { } ).

    2. Sie finden die Aliasnamen nach dem Schlüsselwort AS.

  3. Öffnen Sie die Elementinformationen (F2) für das Ziel der Assoziation _Airline.

    1. Klicken Sie auf /DMO/I_Carrier vor as _Airline, und drücken Sie F2, um die Elementinformationen anzuzeigen.

Aufgabe 3: Zusätzliche Attribute deklarieren

Erweitern Sie die lokale Klasse lcl_connection um ein privates Instanzattribut carrier_name. Fügen Sie der Implementierung der Methode get_output( ) Ausgabedaten für das neue Attribut hinzu.

Notiz

Das neue Attribut ist noch nicht gefüllt. Um es zu füllen, passen wir die SELECT-Anweisung in der nächsten Aufgabe dieser Übung an.

Schritte

  1. Kehren Sie zur lokalen Klasse lcl_connection in Ihrer globalen Klasse zurück.

    1. Wählen Sie in der globalen Klasse Local Types.

  2. Fügen Sie der Klassendefinition das folgende private Attribut hinzu:

    Attribute

    AttributnameUmfangDatentyp
    carrier_nameInstanz/DMO/CARRIER_NAME
    1. Passen Sie den Quelltext wie folgt an:

      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. Erweitern Sie die Implementierung der Methode get_output. Fügen Sie den Namen der Fluggesellschaf dem Zeichenketten-Template mit der Fluggesellschafts-ID hinzu.

    1. Navigieren Sie zur Implementierung der Methode get_output.

    2. Ersetzen Sie die Anweisung APPEND |Carrier:     { carrier_id      }| TO r_output. mit der folgenden Anweisung:

      Code Snippet
      123
        APPEND |Carrier:     { carrier_id } { carrier_name }| TO r_output.
  4. Aktivieren Sie die Klasse. Führen Sie sie aus, und analysieren Sie die Konsolenausgabe.

    1. Drücken Sie Strg + F3, um die Klasse zu aktivieren.

    2. Drücken Sie F9, um die Klasse auszuführen.

Aufgabe 4: CDS-View-Entitäten verwenden

Ersetzen Sie in der Implementierung der Methode constructor die SELECT-Anweisung, die aus der Datenbanktabelle /dmo/connection liest, durch eine SELECT-Anweisung, die aus der CDS-View-Entität /DMO/I_Connection liest.

Schritte

  1. Kommentieren Sie in der Implementierung der Methode constructor die SELECT-Anweisung aus.

    1. Markieren Sie alle Zeilen, die zu SELECT SINGLE ... . gehören.

    2. Drücken Sie Strg + <, um vor jeder ausgewählten Zeile ein Sternchen (*) hinzuzufügen.

  2. Fügen Sie nach dem kommentierten Quelltext eine SELECT-Anweisung hinzu, die einen einzelnen Datensatz aus der CDS-View /DMO/I_Connection liest.

    1. Passen Sie den Quelltext wie folgt an:

      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. Implementieren Sie die FIELDS-Klausel. Lesen Sie die View-Elemente DepartureAirport und DestinationAirport. Lesen Sie zusätzlich das View-Element Name aus dem Ziel der Assoziation _Airline.

    Hinweis

    Verwenden Sie die automatische Vervollständigung (Strg + Leertaste), um die Namen einzugeben.
    1. Geben Sie nach FROM /DMO/I_ConnectionFIELDS ein.

    2. Drücken Sie nach einem Leerzeichen Strg + Leertaste, und wählen Sie DepartureAirport.

    3. Drücken Sie nach einem Komma und einem Leerzeichen erneut Strg + Leertaste, und wählen Sie DestinationAirport.

    4. Geben Sie nach einem Komma und einem Leerzeichen einen umgekehrten Schrägstrich (\) ein, drücken Sie Strg + Leertaste, und wählen Sie _Airline.

    5. Geben Sie unmittelbar nach _Airline einen Bindestrich (-) ein, drücken Sie Strg + Leertaste, und wählen Sie Name.

    6. Die vollständige FIELDS-Klausel sollte wie folgt aussehen:

      Code Snippet
      123
      FIELDS DepartureAirport, DestinationAirport, \_Airline-Name
  4. Implementieren Sie die WHERE-Bedingung. Schränken Sie die Schlüsselelemente der CDS-View-Entität mit den Werten der Importing-Parameter i_carrier_id und i_connection_id ein. Vergessen Sie nicht, als Escape-Zeichen für die Parameter das Präfix @ voranzustellen.

    Hinweis

    Verwenden Sie die automatische Vervollständigung (Strg + Leertaste), um die Element- und Parameternamen einzugeben.
    1. Fügen Sie den folgenden Quelltext nach der FIELDS-Klausel hinzu:

      Code Snippet
      1234
      WHERE AirlineID = @i_carrier_id AND ConnectionID = @i_connection_id
  5. Implementieren Sie die INTO-Klausel. Speichern Sie das SELECT-Ergebnis in den Attributen airport_from_id, airport_to_id und carrier_name. Vergessen Sie nicht, als Escape-Zeichen für die Attribute das Präfix @ voranzustellen.

    Hinweis

    Verwenden Sie die automatische Vervollständigung (Strg + Leertaste), um die Attributnamen einzugeben.
    1. Passen Sie den Quelltext wie folgt an:

      Code Snippet
      12345
      WHERE AirlineID = @i_carrier_id AND ConnectionID = @i_connection_id INTO ( @airport_from_id, @airport_to_id, @carrier_name ).
    2. Die vollständige SELECT-Anweisung sollte wie folgt aussehen:

      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. Aktivieren Sie die Klasse. Führen Sie sie aus, und analysieren Sie die Konsolenausgabe. Prüfen Sie, ob die Ausgabe für das neue Attribut Daten anzeigt.

    1. Drücken Sie Strg + F3, um die Klasse zu aktivieren.

    2. Drücken Sie F9, um die Klasse auszuführen.