Ansicht
Dokumentation

ABAPGENERATE_SUBROUTINE_POOL - GENERATE SUBROUTINE POOL

ABAPGENERATE_SUBROUTINE_POOL - GENERATE SUBROUTINE POOL

BAL Application Log Documentation   rdisp/max_wprun_time - Maximum work process run time  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

GENERATE SUBROUTINE POOL

Kurzreferenz



GENERATE SUBROUTINE POOL itab NAME prog $[error_handling$].

Wirkung

Diese Anweisung generiert einen temporären Subroutinen-Pool. Der Quelltext des Subroutinen-Pools wird der internen Tabelle itab entnommen. Der generierte Subroutinen-Pool wird intern im aktuellen internen Modus abgelegt. Der Variablen prog wird der achtstellige Name des temporären Subroutinen-Pools zugewiesen. Für prog kann angegeben werden:

  • Eine vorhandene zeichenartige Variable

Für itab ist eine Standardtabelle ohne sekundäre Tabellenschlüssel erlaubt. Der Zeilentyp von itab muss zeichenartig sein. Eine Quelltextzeile in itab darf maximal 255 Zeichen enthalten, wobei schließende Leerzeichen bei Zeilentypen fester Länge nicht berücksichtigt werden. In einer internen Sitzung können maximal 36 temporäre Subroutinen-Pools erzeugt werden.

Wenn der in itab enthaltene Quelltext einen Syntaxfehler hat, wird der Subroutinen-Pool nicht generiert und prog wird initialisiert. Mit den Zusätzen error_handling können Syntax- und Generierungsfehler analysiert werden. Für die Syntaxprüfung wird die Schalterkonfiguration des Switch Frameworks verwendet, wie sie bei Aufruf der aktuellen Transaktion vorlag.

Wenn es beim Generieren des Subroutinen-Pools zu einer Ausnahme kommt, wird der dabei auftretende Laufzeitfehler intern so behandelt, dass es nicht zum Programmabbruch kommt sondern sy-subrc auf den Wert 8 gesetzt wird. Es kommt aber dennoch zu einem Datenbank-Rollback und der zugehörige Kurzdump wird wie üblich gespeichert. Mit dem Zusatz SHORTDUMP-ID kann die Kennung des Laufzeitfehlers festgestellt werden.

Im Quelltext des Subroutinen-Pools definierte Unterprogramme können unter Angabe des Programmnamens prog mit der Anweisung PERFORM aus allen Programmen aufgerufen werden, die in den gleichen internen Modus geladen sind, in dem der Subroutinen-Pool generiert wurde. Beim ersten Aufruf eines Unterprogramms des Subroutinen-Pools wird dieser in die interne Sitzung geladen, wobei das Ereignis LOAD-OF-PROGRAM ausgelöst wird.

Systemfelder

sy-subrc Bedeutung
0 Die Generierung war erfolgreich.
4 Der Quelltext enthält einen Syntaxfehler.
8 Es trat ein Generierungsfehler auf. Der dabei auftretende Laufzeitfehler wurde intern behandelt.

Wenn es beim Generieren zu einem Laufzeitfehler kommt (sy-subrc hat den Wert 8), wird wie üblich ein Datenbank-Rollback durchgeführt.

Generische Programmierung Siehe ABAP Command Injections.

Hinweise

  • Da Unterprogramme als Mittel der Programmmodularisierung obsolet sind, sollte ein mit GENERATE SUBROUTINE POOL angelegter temporärer Subroutinen-Pool nur ein einziges Einstiegs-Unterprogramm enthalten, das eine Methode einer lokalen Klasse aufruft und ansonsten kein funktionales Coding enthält.
  • Die Syntaxregeln der ABAP-Sprachversion des erzeugenden Programms gelten auch für den erzeugten Subroutinen-Pool.
  • Durch die Verwendung der bei Aufruf der aktuellen Transaktion vorliegenden Schalterkonfiguration für die Syntaxprüfung wird die Zusicherung des Switch Frameworks gewahrt, dass die gesamte Ausführung einer Transaktion unter der gleichen Schalterkonfiguration erfolgt.
  • In einem temporären Subroutinen-Pool können die gleichen globalen Deklarationen und Verarbeitungsblöcke definiert werden wie in den statischen Subroutinen-Pools des Repository (siehe Tabelle der Programmtypen).
  • Der Zusatz REDUCED FUNCTIONALITY der programmeinleitenden Anweisung PROGRAM wirkt auch in temporären Subroutinen-Pools und wird zur Verringerung deren Ressourcenverbrauchs empfohlen.
  • Temporär erzeugte Subroutinen-Pools können im ABAP Debugger in Einzelschritten ausgeführt werden.
  • Ein zu einer internen Sitzung erzeugter temporärer Subroutinen-Pool kann nicht explizit gelöscht werden. Er ist ab seiner Erzeugung bis zum Abbau der internen Sitzung vorhanden.
  • Der achtstellige interne Name eines temporären Subroutinen-Pools beginnt mit "%_T". Dieser Präfix ist für temporäre Subroutinen-Pools reserviert.
  • GENERATE SUBROUTINE POOL sollte nur in Ausnahmefällen in Anwendungsprogrammen verwendet werden. ABAP bietet viele andere Mittel der dynamischen Programmierung, welche eine dynamische Quelltexterstellung in der Regel unnötig machen (siehe Aufzählung unter Dynamische Programmbearbeitung).

Beispiel

Erstellung und dynamische Generierung eines Subroutinen-Pools, der den Ereignisblock LOAD-OF-PROGRAM und zwei Unterprogramme implementiert. Abhängig vom Rückgabewert sy-subrc wird ein Unterprogramm aufgerufen oder eine Nachricht ausgegeben.

Beispiel

Erstellung und dynamische Generierung eines Subroutinen-Pools, der eine lokale Klasse implementiert. Die statische Methode meth der Klasse ist über den absoluten Typnamen der Klasse aufrufbar.

Beispiel

Erstellung und dynamische Generierung eines Subroutinen-Pools, der eine lokale Klasse implementiert. Die Klasse wird über ihren absoluten Typnamen instanziert und die Instanzmethode meth wird dynamisch aufgerufen.

Programmgenerierung

Ausnahmen

Behandelbare Ausnahmen

CX_SY_GENERATE_SUBPOOL_FULL

  • Ursache: Es kann kein weiterer temporärer Subroutinen-Pool generiert werden.
    Laufzeitfehler: GENERATE_SUBPOOL_DIR_FULL

CX_SY_GEN_SOURCE_TOO_WIDE

  • Ursache: Der Quelltext steht in einer Tabelle aus Strings, welche Zeilen mit mehr als 255 Zeichen enthält.
    Laufzeitfehler: GEN_SOURCE_TOO_WIDE






Vendor Master (General Section)   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 9971 Date: 20240426 Time: 133758     sap01-206 ( 149 ms )