ABAPGENERATE_SUBROUTINE_POOL - GENERATE SUBROUTINE POOL

General Material Data   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.

GENERATE SUBROUTINE POOL

Kurzreferenz



Syntax

GENERATE SUBROUTINE POOL itab NAME prog [error_handling].

Wirkung

Diese Anweisung generiert einen temporärenSubroutinen-Pool.Der Quelltext des Subroutinen-Pools wird der internen Tabelle itab entnommen. Der generierte Subroutinen-Pool wird intern im aktuelleninternenModus abgelegt. Der Variablen prog wird der achtstellige Name des temporären Subroutinen-Pools zugewiesen.

Für itab ist eine Standardtabelle ohnesekundäreTabellenschlüssel erlaubt. Der Zeilentyp von itab muss zeichenartig sein. Eine Quelltextzeilein itab darf maximal 255 Zeichen enthalten. Das Datenobjekt prog muss ebenfalls zeichenartig sein. In einem internen Modus können maximal 36 temporäre Subroutinen-Pools erzeugt werden.

Wenn der in itab enthaltene Quelltext einen Syntaxfehler hat, wird der Subroutinen-Pool nichtgeneriert und prog wird initialisiert. Mit den Zusätzen error_handlingkönnen Syntax- und Generierungsfehler analysiert werden. Für die Syntaxprüfung wird die Schalterkonfiguration desSwitch 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 Laufzeitfehlerintern so behandelt, dass es nicht zum Programmabbruch kommt sondern sy-subrc auf den Wert 8 gesetzt wird. Es kommt aber dennoch zu einemDatenbank-Rollback und der zugehörigeKurzdumpwird wie üblich gespeichert. Mit dem Zusatz SHORTDUMP-IDkann die Kennung des Laufzeitfehlers festgestellt werden.

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

Systemfelder

sy-subrcBedeutung
0Die Generierung war erfolgreich.
4Der Quelltext enthält einen Syntaxfehler.
8Es 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.

Hinweise

  • Da Unterprogramme als Mittel der Programmmodularisierung obsolet sind, sollte ein mit GENERATE SUBROUTINEPOOL 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.

  • Wenn das erzeugende Programm ein Unicode-Programm ist, gelten die entsprechenden Syntaxregeln auch für den erzeugten Subroutinen-Pool.

  • Durch die Verwendung der bei Aufruf der aktuellen Transaktion vorliegenden Schalterkonfiguration fürdie Syntaxprüfung wird die Zusicherung des Switch Frameworks gewahrt, dass die gesamte Ausführung einer Transaktion unter der gleichen Schalterkonfiguration erfolgt.

  • Der Quelltext in der internen Tabelle itab muss ein vollständiges ABAP-Programm inklusive derprogrammeinleitenden Anweisung enthalten.

  • 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 (sieheTabelle der Programmtypen).

  • Der Zusatz REDUCED FUNCTIONALITY der programmeinleitenden Anweisung PROGRAMwirkt 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 einem internen Modus erzeugter temporärer Subroutinen-Pool kann nicht explizit gelöscht werden. Er ist ab seiner Erzeugung bis zum Abbau des internen Modus vorhanden.

  • GENERATE SUBROUTINE POOL sollte nur in Ausnahmefällen in Anwendungsprogrammen verwendetwerden. ABAP bietet viele andere Mittel der dynamischen Programmierung, welche eine dynamische Quelltexterstellung in der Regel unnötig machen (siehe Aufzählung unterDynamische Programmbearbeitung).


Beispiel

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

DATA: prog TYPE string,
      tab  TYPE STANDARD TABLE OF string,
      mess TYPE string,
      sid  TYPE string.

APPEND 'PROGRAM subpool.'                        TO tab.
APPEND `DATA spfli_tab TYPE TABLE OF spfli.`     TO tab.
APPEND `LOAD-OF-PROGRAM.`                       TO tab.
APPEND `  SELECT *` &
       `         FROM spfli` &
       `         INTO TABLE spfli_tab.`          TO tab.
APPEND `FORM loop_at_tab.`                       TO tab.
APPEND `  DATA spfli_wa TYPE spfli.`             TO tab.
APPEND `  LOOP AT spfli_tab INTO spfli_wa.`      TO tab.
APPEND `    PERFORM evaluate_wa USING spfli_wa.` TO tab.
APPEND `  ENDLOOP.`                             TO tab.
APPEND `ENDFORM.`                               TO tab.
APPEND `FORM evaluate_wa USING l_wa TYPE spfli.` TO tab.
APPEND `  WRITE: / l_wa-carrid, l_wa-connid.`    TO tab.
APPEND `ENDFORM.`                               TO tab.

GENERATE SUBROUTINE POOL tab NAME prog
         MESSAGE mess
         SHORTDUMP-ID sid.

IF sy-subrc = 0.
  PERFORM ('LOOP_AT_TAB') IN PROGRAM (prog) IF FOUND.
ELSEIF sy-subrc = 4.
  MESSAGE mess TYPE 'I'.
ELSEIF sy-subrc = 8.
  MESSAGE sid TYPE 'I'.
ENDIF.

Beispiel

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

DATA itab  TYPE TABLE OF string.
DATA prog  TYPE string.
DATA class TYPE string.

APPEND `program.`                     TO itab.
APPEND `class main definition.`       TO itab.
APPEND `  public section.`            TO itab.
APPEND `    class-methods meth.`      TO itab.
APPEND `endclass.`                   TO itab.
APPEND `class main implementation.`   TO itab.
APPEND `  method meth.`               TO itab.
APPEND `    message 'Test' type 'I'.` TO itab.
APPEND `  endmethod.`                TO itab.
APPEND `endclass.`                    TO itab.

GENERATE SUBROUTINE POOL itab NAME prog.

class = `\PROGRAM=` && prog && `\CLASS=MAIN`.

CALL METHOD (class)=>meth.

Beispiel

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

DATA itab  TYPE TABLE OF string.
DATA prog  TYPE string.
DATA class TYPE string.
DATA oref  TYPE REF TO object.

APPEND `program.`                     TO itab.
APPEND `class main definition.`       TO itab.
APPEND `  public section.`            TO itab.
APPEND `    methods meth.`            TO itab.
APPEND `endclass.`                    TO itab.
APPEND `class main implementation.`   TO itab.
APPEND `  method meth.`               TO itab.
APPEND `    message 'Test' type 'I'.` TO itab.
APPEND `  endmethod.`                TO itab.
APPEND `endclass.`                    TO itab.

GENERATE SUBROUTINE POOL itab NAME prog.

class = `\PROGRAM=` && prog && `\CLASS=MAIN`.

CREATE OBJECT oref TYPE (class).

CALL METHOD oref->('METH').

Ausnahmen

Behandelbare Ausnahmen

CX_SY_GENERATE_SUBPOOL_FULL

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

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







Fill RESBD Structure from EBP Component Structure   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.


Length: 14889 Date: 20120526 Time: 201507     triton ( 235 ms )