Ansicht
Dokumentation

ABAPMETHODS_AMDP_OPTIONS - METHODS AMDP OPTIONS

ABAPMETHODS_AMDP_OPTIONS - METHODS AMDP OPTIONS

CPI1466 during Backup   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

[CLASS-]METHODS, AMDP OPTIONS

Kurzreferenz



[CLASS-]METHODS meth ... AMDP OPTIONS $[READ-ONLY$]
                                      $[CDS SESSION CLIENT clnt$|CURRENT$] ...


Zusätze:

1. ... READ-ONLY

2. ... CDS SESSION CLIENT clnt$|CURRENT

Wirkung

Mit dem Zusatz AMDP OPTIONS zu den Anweisungen METHODS oder CLASS-METHODS können Eigenschaften von AMDP-Methoden globaler Klassen oder Interfaces deklariert werden. Hinter AMDP OPTIONS muss mindestens eine Eigenschaft angegeben werden.

Wenn eine Methode, bei deren Deklaration der Zusatz AMDP OPTIONS verwendet wird, ohne den Zusatz BY DATABASE PROCEDURE|FUNCTION als normale ABAP-Methode implementiert wird, haben die mit AMDP OPTIONS angegebenen Eigenschaften keine Wirkung. Für die Deklaration der Methode gelten aber die Einschränkungen für AMDP-Methoden:

Voraussetzung für die Verwendung des Zusatzes ist, dass die globale Klasse oder das Interface ein Tag-Interface IF_AMDP_MARKER_... für AMDP-Klassen enthält. Die Verwendung von AMDP OPTIONS ist nicht möglich in lokalen Klassen, für die Konstruktoren constructor und class_constructor, für mit FOR EVENT deklarierte Ereignisbehandler, für mit REDEFINITION deklarierte Redefinitionen und für mit FOR TABLE FUNCTION deklarierte AMDP-Funktionsimplementierungen für CDS-Tabellenfunktionen.

Zusatz 1

... READ-ONLY

Wirkung

Bei Angabe der Option READ-ONLY sind in der Implementierung der Datenbankprozedur bzw. Datenbankfunktion nur Lesezugriffe auf Datenbanktabellen erlaubt. Es dürfen nur die Datenbankprozeduren oder Datenbankfunktionen anderer AMDP-Methoden aufgerufen werden, die ebenfalls mit READ-ONLY gekennzeichnet sind. Dies wird bei der Syntaxprüfung oder zur Laufzeit überprüft.

Diese Eigenschaft kann auch mit dem Zusatz OPTIONS bei der Implementierung einer AMDP-Methode mit METHOD meth BY DATABASE PROCEDURE|FUNCTION angegeben werden. Sie gilt, wenn sie entweder bei der Deklaration oder der Implementierung der Methode oder an beiden Stellen angegeben ist.

Bei der Implementierung einer AMDP-Funktion oder einer L-Prozedur muss die Option READ-ONLY mindestens einmal angegeben werden. Wenn der Zusatz AMDP OPTIONS bei der Deklaration einer Methode mit einem RETURNING-Parameter verwendet wird, muss die Option READ-ONLY bereits bei der Deklaration angegeben werden.

Zusatz 2

... CDS SESSION CLIENT clnt$|CURRENT

Wirkung

Die Option CDS SESSION CLIENT bewirkt, dass beim Aufruf der AMDP-Methode aus ABAP die Sitzungsvariable der Datenbank mit einem Wert versorgt wird, die in der CDS DDL der ABAP CDS unter dem Namen $session.client (CDS-View-Entität, ) angesprochen werden kann. Auf der SAP-HANA-Datenbank ist dies die ABAP-spezifische Sitzungsvariable CDS_CLIENT. Der Wert wird wie folgt bestimmt:

  • Für clnt kann der Name eines Eingabeparameters der aktuellen Methode angegeben werden, dessen Typisierung kompatibel zum eingebauten Typ CLNT des ABAP Dictionary sein muss. Die Sitzungsvariable wird auf den beim Aufruf an diesen Parameter übergebenen Wert bzw. auf den Wert des mit DEFAULT deklarierten Ersatzparameters gesetzt.
  • Falls CURRENT angegeben ist, wird die Sitzungsvariable auf ihren Standardwert, d.h. den nominellen Wert des ABAP-Systemfelds sy-mandt bzw. des Mandanten der aktuellen Anmeldung gesetzt. In diesem Fall darf es keinen Eingabeparameter mit dem Namen current geben.

Die Sitzungsvariable wird ausschließlich beim Aufruf der AMDP-Methode aus ABAP gesetzt. Beim Aufruf der zugehörigen Datenbankprozedur bzw. -funktion aus einer anderen AMDP-Methode oder aus einer nicht von AMDP verwalteten Datenbankprozedur oder Datenbankfunktion wird die Sitzungsvariable nicht beeinflusst.

Für den Aufruf der Datenbankprozedur bzw. -funktion einer AMDP-Methode, die mit der Option CDS SESSION CLIENT deklariert ist, aus einer AMDP-Prozedur- oder Funktionsimplementierung oder während einer SELECT-Anweisung gelten folgende Regeln:

  • AMDP-Methode als Aufrufsziel
  • Die Implementierung einer AMDP-Methode, die mit dem Zusatz CURRENT deklariert ist, darf nur in Implementierungen von Methoden mit dem Zusatz CURRENT und nicht während der Ausführung einer SELECT-Anweisung mit dem Zusatz USING CLIENT aufgerufen werden.

  • Die Implementierung einer AMDP-Methode, die mit der Angabe clnt deklariert ist, darf nur in Implementierungen von Methoden mit dem Zusatz CURRENT oder der Angabe clnt und während der Ausführung einer SELECT-Anweisung mit dem Zusatz USING CLIENT aufgerufen werden.

  • Die Implementierung einer AMDP-Methode, die ohne einen der Zusätze deklariert ist, darf von beliebigen Implementierungen aufgerufen werden und während der Ausführung beliebiger SELECT-Anweisungen aufgerufen werden.

  • AMDP-Methode als Aufrufer
  • Die Implementierung einer AMDP-Methode, die mit dem Zusatz CURRENT deklariert ist, darf beliebige Implementierungen aufrufen.

  • Die Implementierung einer AMDP-Methode, die mit der Angabe clnt deklariert ist darf keine Implementierungen von Methoden mit der Angabe CURRENT aufrufen.

  • Die Implementierung einer AMDP-Methode, die ohne einen der Zusätze deklariert ist, darf nur ebensolche Implementierungen aufrufen.

Zu einem Aufruf während einer SELECT-Anweisung kann es kommen, wenn diese direkt oder indirekt auf eine CDS-Tabellenfunktion zugreift, da diese als AMDP-Tabellenfunktion implementiert ist.

Wenn in einer AMDP-Methode auf die CDS-verwaltete DDIC-View einer zugegriffen wird, deren Mandantenbehandlung durch die Annotation @ClientHandling.algorithm: #SESSION_VARIABLE bestimmt wird, muss sie mit der Option CDS SESSION CLIENT deklariert sein oder es kommt zu einem Syntaxfehler. Andernfalls kommt es zu einem Syntaxfehler.

Hinweise

  • Die Option CDS SESSION CLIENT ist in erster Linie dann notwendig, wenn in einer AMDP-Methode auf die CDS-verwalteten DDIC-View einer zugegriffen werden soll, deren Mandantenbehandlung durch die Annotation @ClientHandling.algorithm: #SESSION_VARIABLE bestimmt wird. In einer solchen DDIC-Datenbank-View wird in der Regel die zu $session.client gehörige Sitzungsvariable in Vergleichen mit einer Mandantenspalte ausgewertet. Ohne die Verwendung der Option CDS SESSION CLIENT beim Aufruf von AMDP-Methoden oder des Zusatzes USING CLIENT in hätte die Sitzungsvariable standardmäßig den nominellen Wert des ABAP-Systemfelds sy-mandt. Durch das Setzen der Sitzungsvariable beim Aufruf einer AMDP-Methode selektieren die in ihr verwendeten CDS-verwalteten DDIC-Views die Daten des gewünschten Mandanten. Wenn es in der Implementierung der AMDP-Methode beim Zugriff auf die CDS-verwalteten DDIC-View eine eigene Selektion auf eine Mandantenkennung gibt, die nicht dem Wert der Sitzungsvariable entspricht, ist die Ergebnismenge leer.
  • Das AMDP-Framework setzt die zu $session.client gehörige Sitzungsvariable bei der Verwendung von CDS SESSION CLIENT für eine AMDP-Methode genau einmal beim Aufruf dieser Methode aus ABAP. Deshalb gelten folgende Empfehlungen:
  • Der Wert des mit clnt bezeichneten Eingabeparameters sollte während der Ausführung der Implementierung als Konstante betrachtet und nicht verändert werden, damit er immer dem Wert der Sitzungsvariable entspricht. Beim Aufruf weiterer Implementierungen von AMDP-Methoden, die mit CDS SESSION CLIENT deklariert sind, sollte auch immer nur die Mandantenkennung übergeben werden, die dem Wert der Sitzungsvariable entspricht.

  • Der Wert der Sitzungsvariable sollte nicht mit Mitteln der Datenbank überschrieben werden.

Damit ist gewährleistet, dass die explizite Verwendung des Eingabeparameters in selbst programmierten Bedingungen und die implizite Verwendung in CDS-verwalteten DDIC-Views auf Daten des gleichen Mandanten zugreift.
  • Die Regeln für die gegenseitige Aufrufbarkeit von AMDP-Methoden, die mit der Option CDS SESSION CLIENT deklariert sind, unterstützen den vorhergehenden Punkt:
  • In einer Aufrufkette, die zu einer Methode mit dem Zusatz CURRENT führt, darf die zu $session.client gehörige Sitzungsvariable nur den nominellen Wert des ABAP-Systemfelds sy-mandt haben.

  • In einer Aufrufkette, die zu einer Methode mit der Angabe clnt führt, darf die zu $session.client gehörige Sitzungsvariable einen explizit durch clnt definierten Wert haben.

Beispiel

Die folgende Implementierung einer AMDP-Methode greift auf die CDS-verwalteten DDIC-View DEMO_CDS_PRJCT0A einer mandantenabhängigen zu:

Der DDL-Quelltext zur Definition der eigentlichen CDS-Entität DEMO_CDS_SPFLI_CLIENT_0A sieht wie folgt aus:

Die Mandantenbehandlung wird mit der Annotation @ClientHandling.algorithm: #SESSION_VARIABLE definiert. Aus diesem Grund enthält die Ausprägung der View auf der Datenbank folgende WHERE-Bedingung (hier für die SAP-HANA-Datenbank):

WHERE ( "SPFLI"."MANDT" = SESSION_CONTEXT( 'CDS_CLIENT') )

Diese WHERE-Bedingung ist für jeden Zugriff auf die View gültig. Hätte die SELECT-Anweisung in obiger AMDP-Methode selbst eine WHERE-Bedingung für die Mandantenspalte MANDT und diese würde einen anderen Mandanten selektieren, als die Sitzungsvariable CDS_CLIENT, wäre die Ergebnismenge leer. Aus diesem Grund führt ein Zugriff auf eine solche CDS-verwaltete DDIC-View in einer AMDP-Methode standardmäßig zu einer Warnung von der Syntaxprüfung. Diese Warnung wird durch die Verwendung des Zusatzes AMDP OPTIONS CDS SESSION CLIENT bei der Deklaration der Methode in der Klasse CL_DEMO_AMDP_SESSION_CLIENT umgangen:

CLASS cl_demo_amdp_session_client DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES if_amdp_marker_hdb.
    TYPES t_connections TYPE STANDARD TABLE OF demo_cds_prjct0a
                        WITH EMPTY KEY.
    METHODS get_spfli_view
      AMDP OPTIONS READ-ONLY
                   CDS SESSION CLIENT clnt
      IMPORTING VALUE(clnt)        TYPE sy-mandt
      EXPORTING VALUE(connections) TYPE t_connections
      RAISING   cx_amdp_error.

Die Sitzungsvariable CDS_CLIENT wird bei einem Aufruf der Methode aus ABAP auf den an den Eingabeparameter clnt übergebenen Wert gesetzt. Das Programm DEMO_AMDP_SESSION_CLIENT ruft die AMDP-Methode auf, wobei verschiedene Werte für die Mandantenkennung eingegeben werden können. Es werden die Daten des entsprechenden Mandanten selektiert.






BAL Application Log Documentation   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 21743 Date: 20240523 Time: 144628     sap01-206 ( 276 ms )