SAP NetWeaver AS ABAP Release 750, ©Copyright 2016 SAP AG. Alle Rechte vorbehalten.
ABAP - Schlüsselwortdokumentation → ABAP - Dictionary → ABAP CDS im ABAP Dictionary → ABAP CDS - Datendefinitionen → ABAP CDS - DDL-Anweisungen → ABAP CDS - DEFINE VIEW → ABAP CDS - SELECT →ABAP CDS - SELECT, association
Syntax
... ASSOCIATION [ [min..max] ] TO target [AS _assoc] ON
cond_exp ...
Zusätze:
1. ... [min..max]
2. ... AS _assoc
Wirkung
Definition einer Assoziation des Namens _assoc in einer SELECT-Anweisung einer CDS-View der ABAP CDS. Eine Assoziation verknüpft die aktuelle CDS-View als Ausgangsdatenquelle über eine ON-Bedingung cond_exp mit der in der Definition der Assoziation angegebenen Zieldatenquelle target. Eine Datenquelle target kann eine im ABAP Dictionary definierte Datenbanktabelle, eine klassische View, eine externe View oder eine CDS-Entität sein.
Auf eine Assoziation einer SELECT-Anweisung einer CDS-View kann wie folgt zugegriffen werden:
Bei der Aktivierung einer CDS-View mit Pfadausdrücken wird jede dort angegebenen Assoziation in einen Join-Ausdruck verwandelt, wobei die Ausgangsdatenquelle die linke und die Zieldatenquelle die rechte Seite des Joins darstellt und die ON-Bedingung der Assoziation in dessen ON-Bedingung übernommen wird. Standardmäßig hängt die Art des Joins von der Verwendungsstelle des Pfadausdrucks ab:
Diese Einstellung kann bei Angabe der Assoziation in einem Pfadausdruck durch ein Attribut überschrieben werden.
Für die Angabe der ON-Bedingung gelten spezielle Regeln zusätzlich folgender Besonderheiten:
Hinweise
... [min..max]
Wirkung
Definiert die Kardinalität der Zieldatenquelle einer mit ASSOCIATION definierten Assoziation einer CDS-View. Die eckigen Klammern [ ] sind Teil der Syntax. Für min und max sind positive ganze Zahlen inklusive 0 oder ein Stern (*) wie folgt möglich:
Wenn die Kardinalität nicht explizit definiert wird, wird implizit eine Kardinalität "zu 1" ([min..1]) verwendet.
Die Angabe der Kardinalität dient hauptsächlich der Dokumentation der Semantik des Datenmodells. Die Kardinalität wird zur Laufzeit nicht validiert kann aber zu Warnungen von der Syntaxprüfung führen.
Hinweis
Die Angabe der Kardinalität wird von der Syntaxprüfung für Pfadangaben in der DDL
von CDS oder in Open SQL ausgewertet. Es erfolgt derzeit eine Warnung wenn für max
ein Wert größer 1 angegeben ist, d.h., wenn eine Pfadangabe gemäß dieser Angabe die Kardinalität der Ergebnismenge beeinflusst.
... AS _assoc
Wirkung
Definiert den Namen _assoc einer mit ASSOCIATION definierten Assoziation einer CDS-View. Falls kein expliziter Name mit AS definiert wird, wird _assoc implizit auf den Namen der Zieldatenquelle gesetzt. Der Name _assoc muss den Namensregeln für Bezeichner folgen.
Hinweis
Als Namenskonvention wird für den Namen einer Assoziation als erstes Zeichen ein Unterstrich _ empfohlen.
Beispiel
Beispiel einer einfachen Assoziation. Die folgende CDS-View liefert das gleiche Ergebnis wie die CDS-View DEMO_CDS_SCARR_SPFLI im Beispiel zu Joins, was im Programm DEMO_CDS_ASSOCIATION durch eine Assertion gezeigt wird. Zusätzlich wird die Assoziation spfli_scarr in der SELECT-Liste durch die Angabe einer Pfadangabe, die nur den Namen einer Assoziation enthält, für die Verwendung von außen veröffentlicht. Das Programm DEMO_CDS_ASSOCIATION zeigt auch, wie auf die Assoziation durch eine Pfadangabe in Open SQL zugegriffen werden kann.
Beispiel
Die folgende CDS-View sales_order_invoice_header liefert Informationen zu Rechnungen von Verkäufen und arbeitet dafür mit den Datenbanktabellen snwd_so_inv_head, snwd_so, snwd_bpa, snwd_so_inv_item.
Es werden zwei Assoziationen definiert:
Die in den ON-Bedingungen verwendeten Felder node_key und buyer_guid der Ausgangsdatenquelle sind Teil der SELECT-Liste, wobei statt der Präfixe snwd_so_inv_head bzw. snwd_so_inv_head der empfohlene Präfix $projection verwendet wird.
Die Assoziation _buyer ist nicht in der SELECT-Liste aufgeführt und kann nur in Pfadausdrücken der aktuellen SELECT-Anweisung verwendet werden. Wegen der Kardinalität [1..1] kann sie in der WHERE-Bedingung angegeben werden. Auf die Assoziation _invoice_items wird nicht in Pfadausdrücken der aktuellen SELECT-Anweisung zugegriffen. Sie wird aber in der SELECT-Liste aufgeführt und kann damit in Pfadausdrücken anderer CDS-Views verwendet werden. Wegen der Kardinalität [1..*] kann sie nicht in einer WHERE-Bedingung angegeben werden.
In einem ABAP-Programm kann mit einer einfachen SELECT-Anweisung von Open SQL auf die CDS-View zugegriffen werden.
Die Komplexität der eigentlichen Query ist für den Anwendungsprogrammierer transparent in der CDS-View verschalt. Während des Zugriffs wird der durch die Assoziation _invoice_items definierte Join zwischen snwd_so_inv_head und snwd_so_inv_item nicht gebildet, da in keinem Pfadausdruck auf ihn zugegriffen wird.
In der Definition der folgenden CDS-View sales_order_invoice_items wird obige CDS-View sales_order_invoice_header als Datenquelle verwendet, wodurch auf die dort veröffentlichte Assoziation _invoice_items zugegriffen werden kann. In dieser View wird auf die Elemente der Assoziation zugegriffen, ohne dass dabei sichtbar wird, dass es sich tatsächlich um das Ergebnis eines Joins handelt. Dieser Join zwischen snwd_so_inv_head und snwd_so_inv_item wird bei der Aktivierung der CDS-View sales_order_invoice_items erzeugt. Ein Zugriff auf die andere Assoziation _buyer der CDS-View sales_order_invoice_header ist nicht möglich.