Ansicht
Dokumentation

ABENCDS_V2_VIEW_CLIENT_HANDLING - CDS V2 VIEW CLIENT HANDLING

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.
SAP E-Book

- 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.
  • 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 )