ABAP - Schlüsselwortdokumentation →  ABAP - Dictionary →  ABAP CDS im ABAP Dictionary →  ABAP CDS - Datendefinitionen →  ABAP CDS - DDL für Datendefinitionen →  ABAP CDS - DEFINE VIEW →  ABAP CDS - SELECT →  ABAP CDS - SELECT, select_list → 

ABAP CDS - SELECT, element

Syntax

... { [@element_annot1]
      [@element_annot2]
      ...
        [KEY] { { field
                | path_expr [AS alias] }
              | { literal
                | parameter
                | session_variable
                | aggr_expr
                | arith_expr
                | builtin_func
                | case_expr
                | cast_expr AS alias }
      [@<element_annot1]
      [@<element_annot2]
      ... }
  | { $EXTENSION.* } }  ...


Alternativen:

1. ... field|path_expr|literal|parameter|...

2. ... $EXTENSION.*

Wirkung

Definiert ein Element einer SELECT-Liste einer CDS-View. Die Namen der Elemente einer SELECT-Liste müssen eindeutig sein.

Alternative 1

... field|path_expr|literal|parameter|...


Zusätze:

1. ... @element_annot ... @<element_annot

2. ... KEY

3. ... AS alias

Wirkung

Angabe einzelner Elemente.

Mit AS kann ein alternativer Elementname alias definiert werden.

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

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

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:

Hinweise

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

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

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.* }


Weiterlesen
ABAP CDS - SELECT, element_annot