Allgemeine Wiederverwendungsaspekte einbinden

Objective

After completing this lesson, you will be able to entitätsdefinitionen mithilfe von CDS-Aspekten um neue Elemente erweitern

Aspekte

Sehen wir uns nun an, wie die Definition von Entitäten mithilfe sogenannter Aspekte um neue Elemente erweitert werden kann.

Sehen Sie sich das Video an, um mehr über CDS-Aspekte zu erfahren.

In dieser Lektion lernen wir die extend Richtlinie kennen. Wir werden die annotate Richtlinie später in einer anderen Lektion diskutieren.

Die extend Richtlinie

Mit der Richtlinie extend können Sie kundenspezifische Felder zu vorhandenen Definitionen hinzufügen, wie in der folgenden Abbildung dargestellt:

Im Beispiel wird das Element someAdditionalField der Domänenentität Authors hinzugefügt. Dadurch wird dieses Feld auch der generierten Datenbanktabelle hinzugefügt.

Notiz

Verbraucher sehen immer die zusammengeführten effektiven Modelle, wobei die Trennung in Aspekte für sie völlig transparent ist.

Mit der extend -Direktive können auch Metadaten wie Annotationen zu vorhandenen Definitionen hinzugefügt oder vorhandene Metadaten überschrieben werden.

Typeigenschaften können auch über extendfestgelegt werden. Beispielsweise kann die Länge eines vorhandenen Elements vom Typ String erhöht werden.

Benannte Aspekte

Sie können extend mit vordefinierten Aspekten verwenden, um dieselben Erweiterungen auf mehrere Ziele anzuwenden, wie in der folgenden Abbildung dargestellt:

Das Beispiel zeigt einen benannten Aspekt ManagedObject, der die beiden Elemente createdAt und createdBy definiert. Sowohl die Dokumentenmappenentität als auch die Autorenentität werden über diesen benannten Aspekt um diese Felder erweitert.

Notiz

Die Syntax aspect ManagedObject hat die gleiche Wirkung wie die Syntax define aspect ManagedObject, d.h. das Schlüsselwort define ist optional.

Eine benannte Erweiterung kann alles enthalten, z.B. Felder, Typen oder Entitäten.

Includes als Shortcut-Syntax

Sie können benannte Aspekte auch als Includes in einer vererbungsartigen Syntax verwenden. Mit dieser Syntax können Sie eine Definition um mehrere benannte Aspekte gleichzeitig erweitern. In der folgenden Abbildung wird die Entität Autoren um die beiden genannten Aspekte ManagedObject und AnotherAspect erweitert.

Includes sind syntaktischer Zucker. Das gezeigte Beispiel ist äquivalent zur Verwendung einer Abfolge von extends wie folgt:

Code Snippet
1234567
entity Authors {} extend Authors with ManagedObject; extend Authors with AnotherAspect; extend Authors with { key ID : UUID; ... }

Allgemeine Wiederverwendungsaspekte

CDS wird mit einem vorkonfigurierten Modell @sap/cds/common ausgeliefert, das allgemeine Typen und Aspekte zur Wiederverwendung bereitstellt.

Es wird empfohlen, dass alle Anwendungen die allgemeinen Typen und Aspekte verwenden, die über @sap/cds/common bereitgestellt werden. Auf diese Weise können Sie von Best Practices profitieren, die aus echten Geschäftsanwendungen gelernt wurden.

Im folgenden Abschnitt werden die beiden Aspekte cuid und managed aus @sap/cds/common näher betrachtet. Später werden wir auch den CodeList Aspekt und die Country und Currency Typen aus diesem Modell diskutieren.

Aspekt cuid

Der cuid Aspekt ist eine praktische Verknüpfung, mit der Sie Ihren Entitätsdefinitionen kanonische, universell eindeutige Primärschlüssel hinzufügen können.

Notiz

Zur Erinnerung: Serviceanbieterlaufzeiten füllen UUID-artige Schlüsselfelder automatisch mit automatisch generierten UUIDs.

Aspekt managed

Der managed Aspekt kann verwendet werden, um die vier Felder createdAt, createdBy, modifiedAt und modifiedBy einer Entität hinzuzufügen. Diese Felder werden verwendet, um nachzuverfolgen, wer wann Datensätze angelegt und aktualisiert hat.

Mit diesem Aspekt können Sie die relevanten datensatzbezogenen Verwaltungsinformationen speichern und Ihr Core Domain Model dennoch sauber und verständlich halten.

Die Felder createdBy und modifiedBy haben den Datentyp User, bei dem es sich um einen gemeinsamen Wiederverwendungstyp aus @sap/cds/common handelt.

Die im Aspekt verwendeten Annotationen @cds.on.insert und @cds.on.update bezeichnen Elemente, die beim Einfügen und Aktualisieren automatisch von den generischen Behandlern gefüllt werden.

Die in diesen Annotationen verwendeten Pseudovariablen werden wie folgt aufgelöst:

  • $now wird durch die aktuelle Serverzeit (in UTC) ersetzt
  • $user ist die ID des aktuellen Benutzers, die von der Authentifizierungs-Middleware empfangen wurde.

Notiz

Die Felder modifiedAt und modifiedBy werden immer dann gesetzt, wenn die entsprechende Zeile modifiziert wurde, d.h. auch während CREATE-Operationen.

Aspekte aus @sap/cds/common verwenden

Um Aspekte aus dem @sap/cds/common Modell verwenden zu können, müssen Sie diese über die Direktive using importieren. In der folgenden Abbildung erfolgt dies beispielsweise für die allgemeinen Wiederverwendungsaspekte cuid und managed über die ES6-ähnliche Dekonstruktorvariante von using.

Die beiden importierten Aspekte werden als Includes im Beispiel verwendet, um die Entität Autoren um die entsprechenden Felder zu erweitern. Ohne die beiden vordefinierten Aspekte wäre die folgende Definition der Entität Autoren erforderlich, um das gleiche Ergebnis wie in dem mit nativen Mitteln gezeigten Beispiel zu erzielen:

Code Snippet
123456789101112
entity Authors { key ID: UUID; createdAt : Timestamp @cds.on.insert: $now; createdBy : User @cds.on.insert: $user; modifiedAt : Timestamp @cds.on.insert: $now @cds.on.update: $now; modifiedBy : User @cds.on.insert: $user @cds.on.update: $user; name : String(100); dateOfBirth : Date; dateOfDeath : Date; books : Association to many Books on books.author = $self; }

Demonstration und Übung: Vordefinierte Aspekte verwenden

Notiz

Führen Sie als Übung die Schritt-für-Schritt-Anleitung in der folgenden Demonstration selbst im SAP Business Application Studio durch.

Verwenden Sie als Ausgangspunkt für die Übung das Ergebnis der vorherigen Übung Assoziationen zum Domain Model hinzufügen, wenn Sie es erfolgreich abgeschlossen haben. Alternativ können Sie auch den Branch 5_associations aus dem folgenden GitHub-Repository als Ausgangspunkt verwenden:

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

Die vollständige Implementierung der Simulation finden Sie im Zweig 6_common_reuse_, des GitHub-Repositorys.

Detaillierte Informationen zum Inhalt des Repositorys und dessen Verwendung finden Sie hier.

Sehen Sie sich das Video an, um zu erfahren, wie Sie vordefinierte Aspekte verwenden.