コンテンツフレーム起動

動的に生成されるプログラムの実行 文書を SAP ライブラリストラクチャに組み込む

プログラムを動的に作成した後、それらを R/3 システムから通常通り開始することができます。ただし、プログラムの作成だけではなく、プログラムの開始も実行時に行うことが適切です。この目的のため、以下を行うことができます。

登録または修正されたプログラムを、実行中のプログラムから直接実行させるときは次の構文を使います。

構文

SUBMIT < プログラム >.

SUBMIT 命令に関する詳細が必要な場合は、 実行可能プログラム(レポート)の呼出を参照してください。

例

次のような簡単なプログラムがあるとします。

REPORT ZDYN3.

WRITE / 'Dynamic Program!'.

以下の実行可能プログラム(レポート)は ZDYN3 を開始、修正および再開します。

REPORT ZMASTER1.

DATA CODE(72) OCCURS 10.

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.

このプログラムの出力は、後続の2つの出力画面に現れます。最初の画面は次のように表示されます。

Dynamic Program!

2画面目は次のように表示されます。

Dynamic Program Changed!

SUBMIT 命令を使用するとき、実行時にプログラムにおいて行われたすべての修正は、実行依頼される前にただちに有効となります。上の例では、 ZDYN3 ZMASTER1 から、最初は元の形式で、次に修正された形式で実行依頼され、それぞれ異なる結果を生成します。

しかし、インクルードプログラムやサブルーチンプログラムのコードを動的に変更するときは、これと異なります。

例

次のような別のインクルードプログラムを考えます。

*** INCLUDE ZINCLUD1.

WRITE / 'Original INCLUDE program!'.

そして、これを修正して取り入れるための実行可能プログラム(レポート)を考えます。

REPORT ZMASTER2.

DATA CODE(72) OCCURS 10.

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.

ZMASTER2 を実行すると、インクルードプログラム ZINCLUD1 のソースコードは変更され、置き換えられます。しかし、 ZMASTER2 の最終行では、前のプログラムバージョンが実行されます。その理由は、 ZMASTERS2 の実行時バージョンが ZINCLUD1 が修正される前に生成されているためです。 ZINCLUD1 が変更されたことをシステムが検知するのは、 ZMASTER2 を2回目に開始するときです。全く同じことが、サブルーチンプログラムのソースコードを修正し、それを同じプログラム内で呼び出す場合にもあてはまります。

この障害を克服できる方法としては、プログラムによって呼び出される外部サブルーチン内における、 INCLUDE 命令の使用があります。この方法なら、インクルードプログラムやサブルーチンを登録あるいは変更してから、変更後のバージョンを同一プログラムの中で直接使うことができます。

例

次のような別のインクルードプログラムを考えます。

*** INCLUDE ZINCLUD1.

WRITE / 'Original INCLUDE program!'.

外部サブルーチンを次に示します。

PROGRAM ZFORM1.

FORM SUB1.
     INCLUDE ZINCLUD1.
ENDFORM.

次のプログラムは、インクルードプログラムを読み込んで変更してからシステムに入れ、最後にサブルーチンをコールします。

REPORT ZMASTER3.

DATA CODE(72) OCCURS 10.

READ REPORT 'ZINCLUD1' INTO CODE.

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

INSERT REPORT 'ZINCLUD1' FROM CODE.

PERFORM SUB1(ZFORM1).

出力は次のようになります。

Original INCLUDE program!

Extension of INCLUDE program!

今度は、インクルードプログラムの変更後のバージョンがサブルーチンで使われています。理由は、タイムスタンプのチェックはサブルーチンのコール時に行われ、呼出側プログラムの生成時には行われないからです。

 

 

 

 

コンテンツフレーム終了