Mit der direkten Angabe eines Namens field wird ein Element einer
Datenquelle data_source
der aktuellen CDS-View als Element definiert. Dem Feldnamen kann der Name der Datenquelle oder deren alternativer Name als Präfix vorangestellt werden, der durch einen Punkt
(.) abgetrennt ist. Mit AS kann ein alternativer Elementname alias definiert werden.
Bei der Angabe eines Pfadausdrucks path_expr gibt es zwei Fälle:
Wenn der Pfadausdruck ein Element bezeichnet, wird das Ziel des Pfadausdrucks als Element definiert. Das Element ist Teil der Ergebnismenge der CDS-View, ein Feld der
CDS-Datenbank-View
und eine Komponente eines Typs, der in ABAP mit Bezug auf die CDS-View definiert wird. Wenn kein alternativer Elementname alias definiert ist und es keine
Namensliste gibt, wird der Elementname durch den Namen des vom Pfadausdruck bezeichneten Elements definiert.
Wenn ein Pfadausdruck, der mit einer Assoziation
endet, angegeben ist, wird diese Assoziation für die Verwendung in anderen CDS-Views oder in Open SQL veröffentlicht. Eine andere CDS-View kann die Assoziation in ihren
Pfadausdrücken auswerten. Genauso kann die Assoziation in
Pfadausdrücken von Open SQL verwendet werden.
Eine solcherart veröffentlichte Assoziation gehört wie jedes Element zur SELECT-Liste und muss auch in einer
Namensliste aufgeführt werden. Sie ist aber nicht Teil der Ergebnismenge, kein Feld der
CDS-Datenbank-View
der CDS-View und keine Komponente eines Typs, der in ABAP mit Bezug auf die CDS-View definiert wird. Wenn kein alternativer Elementname alias definiert ist und es keine
Namensliste gibt, wird der Elementname durch den Namen der vom Pfadausdruck bezeichneten Assoziation definiert.
Mit AS kann ein alternativer Elementname alias definiert werden.
Mit literal kann
ein Literal angegeben werden. Mit AS muss ein alternativer Elementname
alias definiert werden. Dem Literal kann der Name einer Domäne vorangestellt werden.
Mit parameter
kann ein Eingabeparameter aus der Parameterliste
parameter_list angegeben werden. Mit AS muss ein alternativer
Elementname alias definiert werden, der nicht der Name pname des Parameters sein darf.
Mit session_variable
kann eine Sitzungsvariable angegeben werden. Mit AS muss ein alternativer Elementname alias definiert werden.
Mit aggr_expr,
arith_expr,
builtin_func
und case_exp
können Aggregatausdrücke, arithmetische Ausdrücke, Aufrufe eingebauter Funktionen
der Datenbank und Fallunterscheidungen angegeben werden. Die Ausdrücke und Funktionen werden
bei Zugriff auf die CDS-View im Datenbanksystem ausgewertet. Mit AS muss ein alternativer Elementname alias definiert werden, es sei denn es gibt eine
Namensliste.
Wenn in der SELECT-Liste eine
Assoziation über eine Pfadausdruck
path_expr veröffentlicht wird, müssen alle Felder ihrer Ausgangsdatenquelle, die
in der ON-Bedingung vorkommen, auch als Elemente der SELECT-Liste
aufgeführt sein. Bei einem Pfadausdruck, der mehr als eine Assoziation enthält, muss ein solches Element als entsprechender durch das Feld abgeschlossener Pfadausdruck aufgeführt sein.
Hinweise
Bei der Veröffentlichung einer Assoziation
über einen Pfadausdruck path_expr in der SELECT-Liste können keine Aktualparameter an eventuelle
Eingabeparameter der Zieldatenquelle übergeben werden, um diese mit Startwerten zu versehen.
Dass die Namen der Elemente einer SELECT-Liste eindeutig sein müssen, gilt insbesondere auch für die Veröffentlichung einer
Assoziation über einen Pfadausdruck
path_expr. Es darf keine anderes Element dieses Namens geben. Falls notwendig, muss mit
AS ein alternativer Elementname alias für die Assoziation definiert werden.
Eine Assoziation kann mit verschiedenen alternativen Elementnamen auch mehrmals veröffentlicht
werden. Dies erlaubt die Verwendung unterschiedlicher Filterbedingungen cond_expr.
Für die Veröffentlichung von Assoziationen in mit
UNION vereinigten SELECT-Anweisungen gelten spezielle Regeln.
Beispiel
Die folgende CDS-View veröffentlicht ihre eigene Assoziation _spfli
und die von deren Zieldatenquelle demo_cds_assoc_spfli veröffentlichte
Assoziation _sflight. Die in den ON-Bedingungen
der Assoziationen verwendeten Felder der Ausgangsdatenquelle sind in der SELECT-Liste
aufgeführt. Im Fall der über _spfli._sflight veröffentlichten
Assoziation müssen entsprechend Pfadausdrücke _spfli.carrid
und _spfli.connid verwendet werden. Da das Element scarr
doppelt vorkommt, muss mindestens ein alternativer Elementname mit AS definiert werden.
@AbapCatalog.sqlViewName: 'DEMO_CDS_PUBASC' @AccessControl.authorizationCheck: #NOT_REQUIRED
define view demo_cds_publish_assoc as select from scarr association to demo_cds_assoc_spfli as _spfli on
scarr.carrid = _spfli.carrid { _spfli, scarr.carrid as scarr_carrid, _spfli._sflight, _spfli.carrid, _spfli.connid }
Zusatz 1
... @element_annot ... @<element_annot
Wirkung
Angabe von Annotationen für das Element. Die Angaben können über @element_annot vor oder über @<element_annot hinter dem Element erfolgen.
Hinweise
Über eine Annotation können einem Element weitere technische und semantische Eigenschaften im ABAP Dictionary zugeordnet werden. Über
Framework-spezifische
Annotationen kann es mit spezifischen semantischen Eigenschaften für andere Frameworks der SAP versehen werden.
Bezüglich der Elementannotationen wird die Veröffentlichung einer Assoziation über
einen Pfadausdruck path_expr, der mit einer
Assoziation endet, wie jedes normale Element behandelt. Wenn eine Assoziation veröffentlicht wird, die in einer anderen CDS-View definiert ist, werden bei der
Auswertung von Annotationen mit der Klasse
CL_DD_DDL_ANNOTATION_SERVICE die Annotationen vorhergehender Veröffentlichungen geerbt.
Zusatz 2
... KEY
Wirkung
Mit KEY wird das aktuelle Element als Schlüsselelement der aktuellen
CDS-Entität definiert.
Als Schlüsselelemente können solche Elemente einer SELECT-Liste definiert werden, die zusammenhängend am Anfang
der Liste stehen. Die Schlüsselelemente der CDS-Entität werden wie folgt ausgewertet,
wenn sie als Datenquelle einer SELECT-Anweisung in Open SQL verwendet wird:
Wenn beim Zugriff auf eine CDS-Entität eine für diese definierte CDS-Rolle ausgewertet
wird, müssen deren Schlüsselelemente eine Zeile der Ergebnismenge eindeutig identifizieren.
Ansonsten kann es durch die interne Ausprägung der Zugriffskontrolle zu doppelten Einträgen
oder bei der Verwendung von Aggregatfunktionen zu falschen Ergebnissen kommen. Kann für eine
CDS-Entität kein eindeutiger Schlüssel bestimmt werden, sollte kein Schlüsselelemente
definiert werden. Die Zugriffskontrolle wird dann intern anders ausgeprägt, was aber weniger effizient ist.
Standardmäßig dienen die Schlüsselelemente der CDS-Entität nur der Dokumentation
der Semantik des Datenmodells. Der Zusatz KEY spielt dann bei der Aktivierung der CDS-View und bei sonstigen Zugriffen während der Programmausführung keine Rolle.
Die Standardeinstellung kann mit der View-Annotation AbapCatalog.preserveKey übersteuert werden:
Wenn für diese Annotation der Wert true angegeben ist, werden die mit KEY definierten Schlüsselelemente auch als Schlüssel der
CDS-Datenbank-View verwendet.
Wenn diese Annotation nicht oder mit dem Wert false angegeben ist, haben die mit KEY definierten Schlüsselelemente keinen Einfluss auf den Schlüssel der
CDS-Datenbank-View. Die Schlüsselfelder der Datenbank-View werden wie bei einer
klassischen View implizit aus den Schlüsselfeldern
der Basistabellen und den Join-Bedingungen abgeleitet. Wenn dies nicht möglich ist, sind alle Felder der Datenbank-View Schlüsselfelder.
Hinweise
Für die Tabellenpufferung sind immer die Schlüsselfelder der CDS-Datenbank-View ausschlaggebend.
Welche Schlüsselelemente bei der Syntaxprüfung von Open SQL verwendet werden hängt davon, ob der Name der CDS-Entität oder der CDS-Datenbank-View angegeben ist, wobei letzteres aber
obsolet ist.
Zusatz 3
... AS alias
Wirkung
Definition eines alternativen Elementnamens für das aktuelle Element. Der alternative Elementname
ersetzt den tatsächlichen Namen des Elements aus der Datenquelle data_source. Im
CDS-Datenbank-View
wird das View-Feld unter dem alternativen Elementnamen angelegt. Entsprechend muss der alternative Elementname neben den allgemeinen Namensregeln für
Bezeichner den Vorschriften für Namen von View-Feldern von
Datenbank-Views folgen: d.h. er muss zusätzlich den
darf kein reservierter Komponentenname sein. Die verbotenen reservierten Namen sind in der Datenbanktabelle TRESE enthalten.
Dies wird aber nur überprüft, wenn keine explizite Namensliste vorhanden ist, welche die alternativen Elementnamen übersteuert.
Mit alternativen Elementnamen können in der aktuellen CDS-View eindeutige Namen für gleichnamige
Elementen aus unterschiedlichen Entitäten der Datenquelle vergeben werden. Die alternativen Elementnamen
sind bei einem Zugriff auf die aktuelle CDS-View statt des tatsächlichen Namens zu verwenden.
Innerhalb der CDS-View können alternative Elementnamen nicht verwendet werden, mit einer Ausnahme: In der ON-Bedingung einer
Assoziation können alternative Elementnamen direkt oder hinter $projection angegeben werden.
Alternative 2
... $EXTENSION.*
Wirkung
Angabe aller Elemente einer Erweiterung des Erweiterungskonzepts
für klassische Objekte des ABAP Dictionary. Wenn $EXTENSION.* als Element angegeben ist, werden alle Felder die in einer Erweiterung einer Datenbanktabelle oder einer
klassischen View des ABAP Dictionary in der
Datenquelle data_source vorkommen, automatisch zu Elementen der aktuellen CDS-View.
Die Angabe $EXTENSION.* wirkt genau für die aktuelle CDS-View.
Sie wirkt nicht auf andere CDS-Views, in deren Datenquelle die aktuelle CDS-View verwendet wird oder auf CDS-Views in der Datenquelle der aktuellen CDS-View.
Die Angabe $EXTENSION.* ist nicht möglich, wenn in der aktuellen
SELECT-Liste Aggregatausdrücke aggr_expr vorkommen oder wenn die aktuelle CDS-View eine Vereinigungsmenge über UNION bildet.
Hinweise
Die Angabe $EXTENSION.* ist unabhängig davon, wann eine Erweiterung
vorgenommen wird. Sie wirkt auch dann, wenn eine Datenbanktabelle oder eine View erst nach der Aktivierung der CDS-View erweitert wird.
Um die aktuelle CDS-View selbst zu erweitern, kann die Anweisung EXTEND VIEW verwendet werden.
Beispiel
Die Datenquelle der CDS-View sales_order ist ein innerer Join der Datenbanktabellen
snwd_bpa und snwd_so und enthält
drei direkt definierte Elemente sales_order_id, business_partner_id,
company_name und wegen der Angabe von $EXTENSION.*
alle Felder, die durch Erweiterungen in den Datenbanktabellen snwd_bpa und snwd_so vorhanden sind. Für die Datenbank
snwd_bpa ist der alternative Name partner
definiert und wird in der ON-Bedingung verwendet. Die Namen der Elemente
sales_order_id und business_partner_id sind
alternative Elementnamen. Das Element sales_order_id wird als Schlüsselelement definiert.
@AbapCatalog.sqlViewName: 'SALES_ORDER_VW' define view sales_order as select from snwd_bpa as partner
inner join snwd_so on partner.node_key = snwd_so.buyer_guid
{ key so_id as sales_order_id, bp_id as business_partner_id,
company_name, //from snwd_bpa $extension.* }