Ansicht
Dokumentation
ABENCDS_V2_VIEW_CLIENT_HANDLING - CDS V2 VIEW CLIENT HANDLING
CL_GUI_FRONTEND_SERVICES - Frontend Services Vendor Master (General Section)Diese Dokumentation steht unter dem Copyright der SAP AG.
- Mandantenbehandlung bei CDS-View-Entitäten
Bei einer CDS-View-Entität erfolgt die Mandantenbehandlung implizit und automatisch, indem der Mandant Sitzungsvariable $session.client gefiltert wird.
Sie können das nicht bearbeiten. Mandantenbehandlungsannotationen sind nicht verfügbar.
Bestimmung der Mandantenabhängigkeit
Die Mandantenabhängigkeit einer View wird durch die verwendeten Datenquellen bestimmt.
- Wenn eine der in der View verwendeten Datenquellen mandantenabhängig ist, ist die View mandantenabhängig.
- Wenn keine der in der View verwendeten Datenquellen mandantenabhängig ist, ist die View mandantenunabhängig.
Bestimmung der Mandantenbehandlung
Wenn eine CDS-View-Entität mandantenabhängig ist, erfolgt die Mandantenbehandlung über das Filtern des Mandanten Sitzungsvariable $session.client. Mit dem Sitzungsvariablenalgorithmus werden die Joins der View-Entitäten, wie in der folgenden Tabelle gezeigt, implizit erweitert. Dies betrifft sowohl die mit JOIN explizit angegebenen Joins als auch die bei Verwendung von SQL-Pfadausdrücken angelegten Joins.
Linke Seite | Rechte Seite | INNER JOIN | LEFT OUTER JOIN | RIGHT OUTER JOIN | CROSS JOIN |
mandantenabhängig | mandantenabhängig | Vergleich der Mandantenspalten in der ON-Bedingung | Vergleich der Mandantenspalten in der ON-Bedingung | Vergleich der Mandantenspalten in der ON-Bedingung | Umwandlung des Cross Joins in einen inneren Join mit ON-Bedingung für die Mandantenspalten |
mandantenunabhängig | mandantenabhängig | - | Vergleich der Mandantenspalte mit dem Wert der Sitzungsvariable $session.client in der ON-Bedingung | - | - |
mandantenabhängig | mandantenunabhängig | - | - | Vergleich der Mandantenspalte mit dem Wert der Sitzungsvariable $session.client in der ON-Bedingung | - |
mandantenunabhängig | mandantenunabhängig | - | - | - | - |
Weiterhin wird die View beim Zugriff auf mandantenabhängige Datenbanktabellen implizit um WHERE-Klauseln mit Vergleichen der Mandantenspalten mit der Sitzungsvariable $session.client erweitert. Wenn ausschließlich auf mandantenabhängige CDS-Entitäten zugegriffen wird, findet aber keine solche Erweiterung statt.
Es ist nicht möglich in einem einzelnen Lesezugriff auf die Daten unterschiedlicher Mandanten zuzugreifen.
Der Zusatz USING der Anweisung SELECT zum Wechseln der impliziten Mandantenbehandlung ist in CDS-Entitätsviews nicht erlaubt. Der obsolete Zusatz CLIENT SPECIFIED ist ebenfalls nicht erlaubt.
Beispiel
Die folgende CDS-View-Entität DEMO_CDS_CLIENT_HANDLING definiert verschiedene Arten von Joins (Left-Outer-Join, Inner-Join, und Right-Outer-Join) zwischen einer mandantenunabhängigen Datenbanktabelle (T000) und einer mandantenabhängigen Datenbanktabelle (DEMO_SALES_ORDER). Sie definiert und verwendet auch eine Assoziation zwischen derselben mandantenunabhängigen Datenbanktabelle (T000) und derselben mandantenabhängigen Datenbanktabelle (DEMO_SALES_ORDER).
Das Bild unten zeigt die SQL-Anweisung, die auf der SAP-HANA-Datenbank generiert wird. Bei dem Left-Outer-Join wird eine ON-Bedingung hinzugefügt, die das Mandantenfeld der Datenbanktabelle DEMO_SALES_ORDER mit dem aktuellen Mandanten vergleicht. Der aktuelle Mandant wird mithilfe der eingebauten SAP-HANA-Funktion SESSION_CONTEXT ('CDS_CLIENT') bestimmt, die das Äquivalent zur Sitzungsvariable $session.client in ABAP CDS ist. Genauso wird eine WHERE-Klausel hinzugefügt, die den Mandanten der Datenbanktabelle mit dem aktuellen Mandanten vergleicht.
IMAGE @@ABDOC_CLIENT_HANDLING.png@@628@@457@@Eigenschaften von mandantenabhängigen CDS-View-Entitäten
Da die Mandantenbehandlung vollständig implizit in CDS-View-Entitäten durchgeführt wird, ist ein Mandantenfeld in der SELECT-Liste einer View-Entität nicht erlaubt. Die Ergebnismenge eines-Lesezugriffs auf einer CDS-View-Entität kann auch nie eine Mandantenspalte enthalten.
Hinweise
- Wenn über Native SQL oder in einer AMDP-Methode auf mandantenabhängige Views zugegriffen wird, erfolgt der Zugriff nur auf das Datenbankobjekt. Die Mandantenkennung muss wie üblich spezifiziert werden und es sollte nur auf Daten des aktuellen Mandanten zugegriffen werden.
- Wenn auf das Datenbankobjekt einer mandantenabhängigen CDS-View-Entität über Native SQL oder AMDP zugegriffen wird, beachten Sie bitte Folgendes:
- In der View wird in der Regel implizit die Sitzungsvariable $session.client verwendet. Diese ist nur auf einer SAP-HANA-Datenbank, die als Standarddatenbank eines AS ABAP dient, unter dem Namen CDS_CLIENT garantiert vorhanden. Auf anderen Plattformen sind das Vorhandensein und der Inhalt der Sitzungsvariable außerhalb eines -Zugriffs nicht garantiert und es kann zu unerwartetem Verhalten oder Programmabbrüchen kommen.
- Es darf keine eigene WHERE-Bedingung verwendet werden, die einen anderen Mandanten selektiert als die Sitzungsvariable und es muss dafür gesorgt werden, dass die datenbankspezifische Ausprägung der Sitzungsvariable $session.client während eines Native-SQL-Zugriffs oder eines oder AMDP-Zugriffs den gewünschten Wert hat. Sie enthält außerhalb eines -Zugriffs standardmäßig den aktuellen Mandanten.
- Der letzte Punkt ist insbesondere bei der Mandantenbehandlung in allgemeinen AMDP-Prozedurimplementierungen auf der SAP-HANA-Datenbank zu beachten, die in ABAP wie normale Methoden aufgerufen werden. Der Wert der entsprechenden HANA-Sitzungsvariable CDS_CLIENT muss bei einem Zugriff auf ein Datenbankobjekt mit dem Zusatz AMDP OPTIONS CDS SESSION CLIENT bei der Deklaration der AMDP-Methode explizit gesetzt werden. Andernfalls kommt es zu einem Syntaxfehler. Bei einer AMDP-Funktionsimplementierung, die als CDS-Tabellenfunktion in verwendet wird, ist die HANA-Sitzungsvariable CDS_CLIENT dagegen mit dem dort festgelegten Inhalt gefüllt.
BAL_S_LOG - Application Log: Log header data Vendor Master (General Section)
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 14370 Date: 20240523 Time: 175946 sap01-206 ( 171 ms )