Anfang des Inhaltsbereichs

Dynamische angelegte Programme starten Dokument im Navigationsbaum lokalisieren

Nachdem Sie ein Programm dynamisch angelegt haben, können Sie es im R/3-System wie gewohnt ausführen. Falls Sie ein Programm aber nicht nur zur Laufzeit anlegen, sondern auch starten wollen, können Sie

So starten Sie das angelegte oder geänderte Programm direkt aus Ihrem laufenden Programm:

Syntax

SUBMIT <prog>.

Näheres zur Anweisung SUBMIT finden Sie unter Ausführbare Programme (Reports) aufrufen.

Beispiel

Ein einfacher Report:

REPORT zdyn3.

WRITE / 'Dynamic Program!'.

Das folgende ausführbare Programm (Report) startet, ändert und startet ZDYN3 erneut:

REPORT zmaster1.

DATA: code TYPE TABLE OF rssource-line.

* type of an editor line: rssource-line

DATA lin TYPE i.

READ REPORT 'zdyn3' INTO code.

SUBMIT zdyn3 AND RETURN.

DESCRIBE TABLE code LINES lin.

MODIFY code INDEX lin FROM
           'WRITE / ''Dynamic Program Changed!''.'.

INSERT REPORT 'zdyn3' FROM code.

SUBMIT zdyn3.

Die Ausgabe des Programms wird auf zwei aufeinander folgenden Bildern angezeigt. Das erste Bild zeigt:

Dynamic Program!

Das zweite Bild zeigt:

Dynamic Program Changed !

Mit SUBMIT werden alle zur Laufzeit eines Programms vorgenommenen Änderungen vor dem Starten sofort wirksam. Im Beispiel oben wird ZDYN3 zuerst in der ursprünglichen, dann in der geänderten Fassung von ZMASTER1 gestartet, woraus sich unterschiedliche Ergebnisse ergeben.

Dies ist jedoch nicht der Fall, wenn Sie die Codes von INCLUDE-Prgrammen oder Unterprogrammen dynamisch ändern.

Beispiel

Ein INCLUDE-Programm:

*** INCLUDE zinclud1.

WRITE / 'Original INCLUDE program!'.

Ein ausführbares Programm (Report), um es zu ändern und aufzunehmen:

REPORT zmaster2.

DATA: code TYPE TABLE OF rssource-line.

* type of an editor line: rssource-line

DATA lin TYPE i.

READ REPORT 'zinclud1' INTO code.

DESCRIBE TABLE code LINES lin.

MODIFY code INDEX lin FROM

            'WRITE / ''Changed INCLUDE program!''.'.

INSERT REPORT 'zinclud1' FROM code.

INCLUDE zinclud1.

Wenn Sie ZMASTER2 ausführen, wird der Quelltext des INCLUDE-Programms ZINCLUD1 geändert und im System ersetzt. In der letzten Zeile von ZMASTER2 wird jedoch die vorherige Version ausgeführt, da das Laufzeitobjekt von ZMASTER2 vor der Änderung von ZINCLUD1 generiert wird! Das System stellt erst beim zweiten Lauf von ZMASTER2 fest, daß ZINCLUD1 geändert wurde. Dies ist auch der Fall, wenn Sie den Quelltext eines Unterprogramms dynamisch ändern und vom gleichen Programm aus aufrufen.

Dieses Hindernis können Sie mit der Anweisung INCLUDE innerhalb eines externen Unterprogramms überwinden, das vom Programm aufgerufen wird. Mit dieser Methode können Sie INCLUDE-Programme oder Unterprogramme anlegen oder ändern und die geänderten Programme direkt im gleichen Programm verwenden.

Beispiel

Ein INCLUDE-Programm:

*** INCLUDE zinclud1.

WRITE / 'Original INCLUDE program!'.

und ein externes Unterprogramm:

PROGRAM zform1.

FORM sub1.
     INCLUDE zinclud1.
ENDFORM.

Das folgende Programm liest das INCLUDE-Programm, ändert es, lädt es wieder ins System zurück und ruft das Unterprogramm auf.

REPORT zmaster3.

DATA: code TYPE TABLE OF rssource-line.

* type of an editor line: rssource-line

READ REPORT 'zinclud1' INTO code.

APPEND 'WRITE / ''Extension of INCLUDE program!''.' TO code.

INSERT REPORT 'zinclud1' FROM code.

PERFORM sub1(zform1).

Die Ausgabe sieht so aus:

Original INCLUDE program!

Extension of INCLUDE program!

Hier wurde die aktualisierte Fassung des INCLUDE-Programms im Unterprogramm verwendet, da der Zeitstempel beim Aufruf des Unterprogramms und nicht während der Generierung des rufenden Programms geprüft wird.

Ende des Inhaltsbereichs