Ansicht
Dokumentation

ABENAMDP_PROCEDURE_METHODS - AMDP PROCEDURE METHODS

ABENAMDP_PROCEDURE_METHODS - AMDP PROCEDURE METHODS

TXBHW - Original Tax Base Amount in Local Currency   PERFORM Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- Prozedurimplementierungen

Eine AMDP-Prozedurimplementierung ist eine AMDP-Methode zur Implementierung einer Datenbankprozedur. Sie wird in einer AMDP-Klasse wie eine normale statische Methode oder Instanzmethode in einem beliebigen Sichtbarkeitsbereich deklariert. Eine AMDP-Prozedurimplementierung ist im Deklarationsteil der Klasse nicht als solche erkennbar.

Eine AMDP-Funktionsimplementierung wird mit dem Zusatz BY DATABASE FUNCTION zur Anweisung METHOD im Implementierungsteil der Klasse als solche gekennzeichnet. Dabei werden das Datenbanksystem, für das die Methode verwendet werden soll, und die Programmiersprache des Datenbanksystems, mit dem die Methode implementiert wird, festgelegt. Die Datenbankobjekte des aktuellen Datenbankschemas, auf die in der AMDP-Methode zugegriffen wird, müssen mit einem Zusatz USING deklariert werden. Die Syntaxprüfung findet soweit wie möglich auf Grundlage dieser Angaben statt. Bei einem statisch erkennbaren Zugriff auf im ABAP Dictionary definierte Datenbanktabellen sorgt das AMDP-Framework dafür, dass die im Dictionary definierte Reihenfolge der Felder berücksichtigt wird, die von der Reihenfolge auf der Datenbank abweichen kann.

Bezüglich der Parameterschnittstelle einer AMDP-Prozedurimplementierung gelten folgende Einschränkungen:

  • Die Typisierung der Parameter darf nicht generisch sein.

  • Der Zeilentyp eines tabellarischen Typs darf nur elementare Datentypen als Komponenten enthalten.

  • Ein Parameter darf keinen Aufzählungstyp und keine Komponente eines solchen Typs haben.
  • Ein Parameter darf nicht mit einem Datentyp typisiert werden, der sich auf einen der obsoleten eingebauten Datentypen DF16_SCL oder DF34_SCL des ABAP Dictionary bezieht.
  • Jeder elementare optionale Eingabeparameter muss einen mit DEFAULT deklarierten Ersatzparameter haben. Als Ersatzparameter dürfen ausschließlich Literale oder Konstanten angegeben werden.

  • Anders als bei normalen Methoden, muss ein als Ersatzparameter angegebenes Literal in den Datentyp des Eingabeparameters konvertierbar sein. Andernfalls kommt es zu einem Syntaxfehler.

  • Eingabeparameter der Typen string, xstring, decfloat16 und decfloat34 können keine Ersatzparameter haben und können damit nicht optional sein.

  • Ein optionaler tabellarischer Eingabeparameter darf keinen Ersatzparameter haben, sondern muss mit OPTIONAL optional gemacht werden.

  • Parameternamen:
  • Ein Parametername darf nicht mit den Zeichen "%_" beginnen.

  • Der Parametername connection darf nur für einen Eingabeparameter vom Typ DBCON_NAME verwendet werden, an den der Name einer Datenbankverbindung übergeben werden kann.

  • Der Parametername client ist für spätere Erweiterungen reserviert.

  • Der Parametername endmethod ist nicht erlaubt.

  • Mit RAISING können die unter AMDP - Ausnahmeklassen aufgeführten Ausnahmen angegeben werden, um sie bei einem Aufruf behandeln zu können. Andere Ausnahmen sind nicht behandelbar. Es dürfen keine nicht-klassenbasierten Ausnahmen mit dem Zusatz EXCEPTIONS angelegt werden.

AMDP-Methoden können über Datenbankhinweise aufgerufen werden, d.h. ein zusätzlicher Importparameter mit dem Namen call_hints kann definiert werden. Der Parameter muss per Referenz übergeben werden und den Typ TT_HINT des Interfaces CL_AMDP_CALL_HINT haben. Er darf optional sein. Verwendete ABAP-Aufrufer können eine Liste Hinweise und Hinweisparameter an die AMDP-Methode übergeben. Zur Zeit sind ausschließlich die Hinweisparameter route_to und workload_class unterstützt. Hinweisparameter bestehen aus den Zeichen a - z, A - Z, 0 - 9 und _. Alle anderen Namen müssen mit " oder ' in Paaren eingeschlossen werden. Bei inkorrekten Hinweisparametern endet die Methode mit der handelbaren Ausnahme AMDP_CALL_HINT_ILL_PARAM. Der Parameter darf für Datenbankprozeduren, skalare Funktionen und BAdIs angegeben werden, aber nicht für Tabellenfunktionen und Graph-Workspaces.

Bezüglich der Methodenimplementierung gelten folgende Einschränkungen:

  • Eine AMDP-Methode darf nicht leer sein.
  • Es sind keine DDL-Anweisungen für das Anlegen, Ändern oder Löschen von Datenbankobjekten erlaubt.
  • Es sind keine Anweisungen erlaubt, die ausschließlich für Datenbanktabellen aber nicht für Views möglich sind, wie z.B. TRUNCATE TABLE, LOCK TABLE.
  • Es kann nicht auf lokale temporäre Datenbankobjekte zugegriffen werden.
  • Es dürfen keine transaktionalen Anweisungen ausgeführt werden. Insbesondere sind keine Datenbank-Commits und -Rollbacks mit den Anweisungen COMMIT und ROLLBACK erlaubt. Dies gilt auch für aufgerufene Prozeduren. Die Behandlung von LUWs sollte immer im ABAP-Programm erfolgen, um die prozedurübergreifende Konsistenz der Daten sicherzustellen.
  • Es darf nicht schreibend auf Datenbanktabellen zugegriffen werden, für welche die Tabellenpufferung eingeschaltet ist, da ein SQLScript-Zugriff keinen Einfluss auf die Puffersynchronisation hat.

In Abhängigkeit von der Programmiersprache des Datenbanksystems kann es weitere Einschränkungen geben, die in den entsprechenden Abschnitten aufgeführt sind:

Hinweise

  • Es wird dringend empfohlen, für die Implementierung einer AMDP-Methode nur den Zeichensatz 7-Bit-ASCII zu verwenden.
  • Es wird dringend davon abgeraten, dynamische Programmiertechniken zu einzusetzen, auch wenn die verwendete Programmiersprache des Datenbanksystems dies erlauben sollte.
  • Beim dynamischen Zugriff auf andere Datenbankobjekte kann deren Existenz nicht kontrolliert und garantiert werden. Dies betrifft insbesondere den Aufruf anderer AMDP-Methoden.

  • Beim dynamischen Zugriff auf Datenbanktabellen des ABAP Dictionary kann das AMDP-Framework nicht die dort definierte Reihenfolge der Felder berücksichtigen, sondern es wird die eventuell abweichende Reihenfolge auf der Datenbank verwendet. Das kann bei der Zuweisung an ABAP-Datenobjekte, die mit Bezug auf das ABAP Dictionary deklariert sind, zu falschen Werten führen.

  • Bei einem dynamischen Zugriff kann nicht verhindert werden, dass schreibend auf Datenbanktabellen mit eingeschalteter Tabellenpufferung zugegriffen wird, wodurch es zu Schiefständen in der Puffersynchronisation kommen kann.

  • Dynamische Zugriffe können im Zusammenhang mit Eingaben von außen zu SQL-Injections führen.

  • Ein Null-Wert wird bei einer Übergabe an einen Aktualparameter in dessen typabhängigen Initialwert verwandelt.





Vendor Master (General Section)   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 12473 Date: 20240523 Time: 160258     sap01-206 ( 154 ms )