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

Die Architektur erkunden

Objectives

After completing this lesson, you will be able to:
  • Legen Sie eine Datenbanktabelle an.
  • Generieren Sie die Entwicklungsobjekte für einen OData-UI-Service.

Anlegen des Datenmodells

Beispieldatenmodell

Das Datenmodell in diesem Beispiel ist sehr einfach - es gibt eine einzige Datenbanktabelle, die Details zu Flugverbindungen enthält - eine Fluggesellschaft, eine Flugnummer, Details zum Abflugflughafen und zum Ziel.

Notiz

Nicht in der Abbildung enthalten sind zusätzliche Felder, die die Laufzeit benötigt, um die Parallelitätskontrolle zu verwalten. Diese werden wir uns wenig später ansehen.

Eine Datenbanktabelle anlegen

Zunächst sehen wir uns an, wie eine Datenbanktabelle angelegt wird.

Grundlegende Tabellenattribute definieren

Es wird nun gezeigt, wie grundlegende Tabellenattribute definiert werden.

Tabellendefinition hinzufügen

Das folgende Video zeigt, wie Sie eine Tabellendefinition hinzufügen.

Wenn Sie keinen eingebauten Typ des ABAP Dictionary verwenden, um den Typ einer Tabellenspalte anzugeben, verwenden Sie stattdessen ein Datenelement. Datenelemente sind ABAP-Dictionary-Objekte, die den Typ eines einzelnen Felds wie UUID oder Airline Code definieren. Datenelemente enthalten nicht nur eine technische Typbeschreibung, sondern auch semantische Informationen wie Feldbezeichner. Wenn Sie Datenelemente verwenden, um die Typen der Tabellenspalten zu definieren, kann das System die Feldbezeichner automatisch auf der generierten Benutzungsoberfläche verwenden.

Das Datenelement in der Abbildung „Datenelement" beschreibt das Feld „Fluggesellschaft". Es handelt sich um ein Zeichenfeld der Länge 3. Das System verwendet die Feldbezeichner automatisch auf der generierten Benutzungsoberfläche.

Um ein neues Datenelement anzulegen, wählen Sie FileNewOther, und geben Sie dann data element in das Feld Filter Text ein. Geben Sie einen Paketnamen und den Namen des Datenelements ein, und wählen Sie Weiter. Wählen Sie einen Transportauftrag aus, und wählen Sie Fertigstellen.

Anschließend müssen Sie einen Datentyp für das Datenelement angeben. Dies sollte eine Domäne sein. Im Beispiel wird die vorhandene Domäne /DMO/CITY wiederverwendet. Beachten Sie, dass beide Datenelemente dieselbe Domäne verwenden. Das bedeutet, wenn jemand die Länge der Domäne nachträglich ändert, gilt die Änderung für alle Datenelemente, die sie verwenden.

Abschließend geben Sie kurze, mittlere und lange Feldbezeichner sowie einen Bezeichner ein, der für Spaltenüberschriften verwendet wird. Wenn Sie später die Fiori-Elements-App generieren, verwendet das System diese Texte automatisch.

Jede Tabelle, die Sie definieren, muss einen Primärschlüssel haben. Dies ist eine Abfolge von Feldern am Anfang der Tabellenbeschreibung, die jeden Eintrag in der Tabelle eindeutig identifiziert.

Das erste Feld der Tabelle (und damit auch das erste Feld in der Schlüsseldefinition) muss das Mandantenfeld sein, das den Datentyp abap.clnt hat. Darüber hinaus ist es für unser Beispiel praktisch, eine UUID für den eindeutigen Schlüssel zu verwenden. Wenn Sie das Datenelement sysuuid_x16 verwenden, um den Typ dieses Feldes anzugeben, können Sie die UUID von der Laufzeit automatisch zuordnen lassen, wenn Sie einen neuen Datensatz anlegen.

Aus Gründen der Rückverfolgbarkeit wird empfohlen, einige administrative Informationen mit den Daten zu speichern, z.B. dem Benutzer, der die Daten und Zeitstempel für das Anlegen und die letzte Änderung angelegt oder geändert hat. Die Datenbanktabelle, die Sie anlegen, sollte die in der Abbildung dargestellten Felder enthalten.

Notiz

Diese Felder sind für den Generator, den wir später verwenden werden, obligatorisch. Damit dieser Generator ordnungsgemäß funktioniert, müssen die Felder auch mit den hier aufgeführten Datentypen definiert werden.

Insbesondere fieldslocal_last_changed_at und last_changed_at sind nicht nur administrative Felder. Im ABAP-RESTful-Anwendungsprogrammiermodell werden sie auch für die Parallelitätskontrolle verwendet.

Da RESTful-Anwendungen zustandslos sind, kann die Datenkonsistenz nicht allein durch exklusive Sperren sichergestellt werden. Das ABAP-RESTful-Anwendungsprogrammiermodell verwendet eine Mischung aus exklusiven Sperren und ETags, um Dateninkonsistenzen zu vermeiden. Ein ETag ist ein Feld, das seinen Wert ändert, wenn ein Datensatz aktualisiert wird. Durch den Vergleich des Werts des ETag-Felds kann das Framework sicherstellen, dass ein Datenset seit dem letzten Lesen nicht geändert wurde. Zeitstempel der letzten Änderung machen perfekte ETag-Felder.

Wenn Sie eine Datenbanktabelle in ADT aktivieren, legt das System die entsprechende physische Tabelle in der Datenbank an. Anschließend können Sie die zusätzlichen Objekte, die Sie für Ihre App benötigen, automatisch generieren.

Datenelemente anlegen

Eine Datenbanktabelle anlegen

Datenbanktabelle kopieren

In den Übungen dieses Kapitels legen Sie einen OData-UI-Service an. Dieser UI-Service bildet die Grundlage für eine Anwendung, mit der Sie den Preis von Flügen ändern können. Zunächst legen Sie ein dediziertes Paket für die erforderlichen Entwicklungsobjekte an. Anschließend kopieren Sie eine Datenbanktabelle und füllen diese mit Daten.

Vorlage:

  • /LRN/S4D400_APT (Datenbanktabelle)
  • /LRN/CL_S4D400_APT_COPY (globale Klasse)

Lösung:

  • /LRN/S4D400AFLGT (Datenbanktabelle)
  • /LRN/CL_S4D400_APS_COPY (globale Klasse)

Aufgabe 1: Unterpaket anlegen

Legen Sie ein neues Unterpaket unter Ihrem eigenen Paket ZS4D400_## an (wobei ## für Ihre Gruppennummer steht).

Das Unterpaket sollte die folgenden Attribute haben:

AttributWert
NameZS4D400_##_RAP, wobei ## für Ihre Gruppennummer steht
BeschreibungObjekte für OData-UI-Service
Zu bevorzugten Paketen hinzufügenMarkiert
SuperpackageZS4D400_##, wobei ## für Ihre Gruppennummer steht

Schritte

  1. Legen Sie ein Unterpaket unter Ihrem eigenen Paket ZS4D400_## an (wobei ## für Ihre Gruppennummer steht).

    1. Klicken Sie im Project Explorer mit der rechten Maustaste auf Ihr ABAP-Paket ZS4D400_##, und wählen Sie NewABAP Package.

    2. Geben Sie den Paketnamen ZS4D400_##_RAP ein, wobei ## für Ihre Gruppennummer steht.

    3. Geben Sie die Beschreibung Objekte für OData-UI-Service ein.

    4. Markieren Sie das Ankreuzfeld Zu Favoritenpaketen hinzufügen.

    5. Stellen Sie sicher, dass das Feld Oberpaket den Namen Ihres bereits vorhandenen Pakets enthält.

    6. Wählen Sie Next.

    7. Stellen Sie sicher, dass die Softwarekomponente auf ZSTUDENTS gesetzt ist.

    8. Wählen Sie Next.

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

Aufgabe 2: Datenbanktabelle kopieren

Legen Sie im neuen Paket eine Kopie der Datenbanktabelle /LRN/S4D400_APT an. Nennen Sie die neue Datenbanktabelle Z##FLIGHT, wobei ## für Ihre Gruppennummer steht.

Schritte

  1. Kopieren Sie die Datenbanktabelle /LRN/S4D400_APT in Ihr eigenes Paket ZS4D400_##_RAP, wobei ## für Ihre Gruppennummer steht.

    1. Öffnen Sie die Definition der Datenbanktabelle /LRN/S4D400_APT.

    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 Datenbanktabelle /LRN/S4D400_APT, um das Kontextmenü zu öffnen.

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

    5. Geben Sie den Namen Ihres Pakets ZS4D400_##_RAP in das Feld Paket ein. Geben Sie im Feld NameZ##FLIGHT ein, wobei ## für Ihre Gruppennummer steht.

    6. Wählen Sie Next.

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

  2. Aktivieren Sie die Datenbanktabellendefinition.

    1. Drücken Sie Strg + F3, um das Entwicklungsobjekt zu aktivieren.

Aufgabe 3: Datenbanktabelle füllen

Legen Sie in Ihrem Paket ZS4D400_## eine Kopie der globalen Klasse /LRN/CL_S4D400_APT_COPY an (Namensvorschlag: ZCL_##_COPY). Ändern Sie in dieser Kopie den Wert der Konstante table_name in den Namen Ihrer eigenen Datenbanktabelle. Führen Sie dann die Klasse als Konsolen-App aus. Dadurch wird Ihre Datenbanktabelle mit Daten gefüllt.

Schritte

  1. Kopieren Sie die Klasse /LRN/CL_S4D400_APT_COPY in eine Klasse in Ihrem eigenen Paket ZS4D400_##.

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

    2. Verknüpfen Sie bei Bedarf 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_APT_COPY, um das Kontextmenü zu öffnen.

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

    5. Geben Sie ZS4D400_## in das Feld Paket ein. Geben Sie im Feld NameZCL_##_COPY ein, wobei ## für Ihre Gruppennummer steht.

    6. Wählen Sie Next.

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

  2. Passen Sie in der Kopie das Coding der Methode IF_OO_ADT_CLASSRUN~MAIN an. Ändern Sie den Wert der Konstante table_name in den Namen Ihrer eigenen Datenbanktabelle.

    1. Stellen Sie sicher, dass der Wert der Konstante dem Namen Ihrer Datenbanktabelle entspricht.

  3. Aktivieren Sie die Klasse, und führen Sie sie als Konsolen-App aus.

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

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

    3. Prüfen Sie die Sicht Konsole. Die letzte Ausgabe sollte lauten: <...> wurde mit Daten gefüllt. Wenn <...> nicht vom richtigen Typ ist, stellen Sie sicher, dass eine Datenbanktabelle mit diesem Namen vorhanden, aktiv und eine exakte Kopie der Vorlagetabelle ist.

Der Objektgenerator

Zusätzliche Objekte generieren

Wir haben gerade eine Datenbanktabelle für unsere Daten definiert, aber die App, die wir anlegen werden, benötigt mehr Objekte als nur diese Tabelle. Diese Objekte können mithilfe eines Assistenten in ADT generiert werden.

Die generierten Objekte enthalten alle Informationen, die erforderlich sind, um eine funktionierende App mit der Anlege-, Lese-, Aktualisierungs- und Löschfunktion bereitzustellen. Später werden wir auch einige dieser Objekte anpassen und erweitern, um das Erscheinungsbild der Benutzungsoberfläche zu ändern und einige Prüfungen und Berechnungen zu implementieren.

In diesem Video erfahren Sie, wie Sie zusätzliche Objekte generieren.

Generieren der zusätzlichen Objekte

Vorschau des OData-UI-Service

Service veröffentlichen und Vorschau anzeigen

Mit Ihrer Datenbanktabelle und dem Objektgenerator können Sie alle Objekte generieren, die Sie benötigen, um eine funktionierende Fiori-Elements-App zu erhalten. Der einzige manuelle Schritt besteht darin, den Service zu veröffentlichen.

Sie müssen den Service veröffentlichen, bevor Sie die App testen können. Öffnen Sie dazu das Service-Binding, und wählen Sie Publizieren. Anschließend wird die von Ihnen angelegte Entität (in diesem Fall Verbindung) in der Liste der Entitäten angezeigt. Markieren Sie sie, und wählen Sie Vorschau, um die App zu testen.

App testen

Wenn Sie Vorschau wählen, wird ein Browserfenster geöffnet, in dem Sie eine neue Flugverbindung anlegen können. Die App implementiert jedoch keine anderen Prüfungen als Typprüfungen (z.B. sind im Feld Flugnummer nur Ziffern zulässig).

OData-UI-Service generieren und Vorschau anzeigen

In dieser Übung generieren Sie die Repository-Objekte für einen OData-UI-Service und zeigen eine Vorschau des Service als SAP-Fiori-App an.

Vorlage:

  • keine

Lösung:

  • Die generierten Entwicklungsobjekte im Paket /LRN/S4D400_EXERCISE_RAP.

Notiz

Beachten Sie, dass sich die Implementierung des verwendeten Generators ändern kann. Daher können die in der Übung generierten Entwicklungsobjekte von denen in der Lösung abweichen.

Voraussetzungen

Sie haben die vorherige Übung abgeschlossen. Sie haben die Datenbanktabelle Z##FLIGHT angelegt (wobei ## für Ihre Gruppennummer steht), und die Datenbanktabelle enthält Daten.

Aufgabe 1: Generator verwenden

Verwenden Sie den Generator-OData-UI-Service desABAP-RESTful-Anwendungsprogrammiermodells, um die erforderlichen Entwicklungsobjekte in Ihrem Unterpaket ZS4D400_##_RAP zu generieren. Geben Sie dazu im Assistenten folgende Werte an:

FeldWert
Allgemeinesreferenziertes ObjektZ##FLIGHT
AllgemeinerProjektname<leer>
AllgemeinesArtefaktpräfix<leer>
Suffixfür allgemeine Artefakte<leer>
  
CDS-Entitätsname desBusiness-Objekt-DatenmodellsZR_##Flug
CDS-Entitätsalias desBusiness-Objekt-DatenmodellsFlight
Business-Objekt-VerhaltensverhaltensimplementierungsklasseZBP_R_##FLIGHT
Name der Entwurfstabelle fürBusiness-Objekt-VerhaltenZ##FLIGHT_D
  
Service ProjektionsserviceProjektionsentitätCDS-EntitätsnameZC_##Flug
Service ProjektionService ProjektionsverhaltenVerhaltensimplementierungsklasseZBP_C_##FLIGHT
  
Name derBusiness-Service-Service-DefinitionZUI_##FLIGHT_O4
Business-Service-Binding-Service-Binding-NameZUI_##FLIGHT_O4
Business-Service-Binding-Binding-TypOData V4 - UI

Schritte

  1. Starten Sie den Objektgenerator für Ihre Datenbanktabelle Z##FLIGHT (wobei ## für Ihre Gruppennummer steht).

    1. Expandieren Sie im Project Explorer den Pfad Favorite PackagesZS4D400_##ZS4D400_##_RAPDictionaryDatabase Tables (wobei ## für Ihre Gruppennummer steht). Alternativ können Sie die Definition der Datenbanktabelle Z##FLIGHT öffnen und bei Bedarf die View Project Explorer mit dem Editor verknüpfen.

    2. Klicken Sie in der View Project Explorer mit der rechten Maustaste auf die Datenbanktabelle Z##FLIGHT, um das Kontextmenü zu öffnen.

    3. Wählen Sie im Kontextmenü Generate ABAP Repository Objects....

  2. Wählen Sie im Dialogfenster den Generator aus.

    1. Wählen Sie auf der linken Seite des Dialogfensters ABAP RESTful Application Programming ModelOData UI Service.

    2. Wählen Sie Weiter, um zum nächsten Schritt zu navigieren.

  3. Stellen Sie sicher, dass die Entwicklungsobjekte in Ihrem Unterpaket ZS4D400_##_RAP angelegt werden.

    1. Wenn das Fenster oben Paket eingeben lautet, stellen Sie sicher, dass das Feld Paket den Wert ZS4D400_##_RAP enthält.

    2. Wählen Sie Weiter, um zum nächsten Schritt zu navigieren.

  4. Konfigurieren Sie den Generator mit den Daten aus der Tabelle.

    Achtung

    Wählen Sie nicht Weiter, bevor Sie alle Daten eingegeben haben.
    1. Wählen Sie die Positionen auf der linken Seite des Dialogfensters nacheinander aus, und füllen Sie die entsprechenden Felder im rechten Bereich aus. Die erforderlichen Werte werden in der obigen Tabelle aufgeführt.

    2. Nachdem Sie alle Daten eingegeben haben, wählen Sie Weiter.

  5. Prüfen Sie die Repository-Objekte, die generiert werden sollen, und generieren Sie die Objekte.

    Notiz

    Haben Sie ein wenig Geduld. Die Generierung der Objekte dauert einige Zeit. Am Ende des Generierungsprozesses wird ein Dialogfenster angezeigt, in dem Sie gefragt werden, ob Sie die generierte Service-Bindung im Editor öffnen möchten. Bestätigen Sie diesen Dialog, indem Sie auf Öffnen klicken.
    1. Prüfen Sie die Liste der angezeigten Repository-Objekte.

    2. Wenn Sie sicher sind, dass Sie alle Namen korrekt eingegeben haben, wählen Sie Weiter.

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

    4. Bestätigen Sie das Dialogfenster am Ende des Generierungsprozesses, indem Sie Öffnen wählen.

  6. Analysieren Sie die Generatorausgabe im Projekt-Explorer.

    1. Positionieren Sie im Project Explorer den Cursor auf Ihrem Unterpaket ZS4D400_##_RAP, und drücken Sie F5, um den Inhalt des Pakets neu zu laden.

    2. Expandieren Sie alle Unterknoten des Pakets, um die Namen der generierten Entwicklungsobjekte anzuzeigen.

Aufgabe 2: Vorschau der App anzeigen

Veröffentlichen Sie den OData-UI-Service, und zeigen Sie eine Vorschau des Ergebnisses als SAP-Fiori-App an.

Schritte

  1. Veröffentlichen Sie den lokalen Service-Endpunkt.

    Notiz

    Das Veröffentlichen des Service kann einige Zeit in Anspruch nehmen.
    1. Falls noch nicht geschehen, öffnen Sie die generierte Service-Bindung ZUI_##FLIGHT_O4.

    2. Wenn die Service-Bindung inaktiv ist, drücken Sie Strg + F3, um sie zu aktivieren.

    3. Um den Service zu publizieren, wählen Sie im Center des Editors Publizieren.

  2. Zeigen Sie eine Vorschau des OData-UI-Service als SAP-Fiori-App an.

    1. Wählen Sie im Abschnitt Service Version Details auf der rechten Seite Flight und dann Preview....

      Ergebnis

      Ein Browserfenster mit einer SAP-Fiori-Anwendung wird geöffnet. Wenn Sie dazu aufgefordert werden, melden Sie sich mit Ihrem ABAP-Systembenutzer an der Anwendung an.
  3. Zeigen Sie die Liste der Flüge an.

    1. Wählen Sie Start, um die Liste der Flüge anzuzeigen, die in Ihrer Datenbanktabelle Z##FLIGHT gespeichert sind.

  4. Navigieren Sie für einen der Flüge zur Detailsicht.

    1. Wählen Sie einen der Listeneinträge, um zur Object Page mit den Details dieses Flugs zu navigieren.

  5. Wechseln Sie für diesen Flug in den Änderungsmodus.

    1. Wählen Sie Bearbeiten.

  6. Geben Sie im Feld Flugpreis einen Text ein, z.B..

  7. Geben Sie einen negativen Wert für den Flugpreis ein.