Ein neues Programm dynamisch anlegen 

Um ein neues dynamisches Programm zur Laufzeit eines ABAP-Programms anzulegen, müssen Sie eine interne Tabelle verwenden. Legen Sie zu diesem Zweck die interne Tabelle mit einer einzigen Spalte vom Typ Character und einer Zeilenbreite von 72 Zeichen an. Sie können ein beliebiges unter Interne Tabellen füllen beschriebene Verfahren verwenden, um das Coding Ihres neuen Programms in die interne Tabelle zu schreiben. Sie können vor allem interne Felder verwenden, deren Inhalte vom Ablauf des Programms abhängen, das Sie zum Anlegen des neuen Programms verwenden. Das folgende Beispiel zeigt, wie Sie im allgemeinen vorgehen können:

REPORT demo_special_tech_dyn_insert.
DATA: code TYPE TABLE OF rssource-line.
* type of an editor line: rssource-line

APPEND  'REPORT ZDYN1.'
         TO code.

APPEND  'WRITE / ''Hello, I am dynamically created!''.'
         TO code.

Zwei Zeilen eines einfachen Programms werden in die interne Tabelle CODE geschrieben.

Nun müssen Sie das neue Modul, in diesem Fall ein ausführbares Programm (Report), in die Programmbibliothek übertragen. Dazu können Sie folgende Anweisung verwenden:

Syntax

INSERT REPORT <prog> FROM <itab>.

Das Programm <prog> wird in Ihre aktuelle Entwicklungsklasse in das R/3-Repository aufgenommen. Existiert noch kein Programm mit diesem Namen, wird es mit folgenden Attributen neu angelegt:

Sie können den Namen des Programms <prog> explizit in einfache Hochkommatas stellen oder den Namen eines Character-Feldes angeben, das den Namen enthält. Der Programmname muß nicht notwendigerweise dem im Coding entsprechen, dies ist aber sinnvoll. <itab> ist die interne Tabelle, die den Quelltext enthält. Für das Beispiel oben könnten Sie also schreiben:

INSERT REPORT 'ZDYN1' FROM code.

oder

DATA rep(8) TYPE c.

rep = 'ZDYN1'

INSERT REPORT rep FROM code.

Vom Einstiegsbild des ABAP-Editors können Sie alle Komponenten des neuen Programms aufrufen und ändern.

Sie können den ABAP Editor für obiges Beispiel aufrufen:

 

Existiert bereits ein Programm mit dem Namen <prog>, wird sein Quelltext ohne vorherige Warnung durch einen neuen aus der internen Tabelle <itab> ersetzt.

Gehen Sie deshalb bei der Benennung von dynamisch generierten Programmen vorsichtig vor. Besonders wenn das Programm, das das neue anlegt, von mehr als einem Benutzer gleichzeitig benutzt wird. Verwenden Sie dann an eine benutzerspezifische Namenskonvention, damit ein Benutzer nicht das Programm eines anderen Benutzers ersetzt.

Eine Alternative zu INSERT REPORT bietet die Anweisung GENERATE SUBROUTINE POOL, die temporäre externe Unterprogramme im Hautspeicher anlegt (siehe Temporäre Unterprogramme anlegen und starten).