!--a11y-->
ABAP
プログラムの実行中に、新しい動的なプログラムを作成するには、内部テーブルを使用する必要があります。この目的においては、タイプ C の項目が1列、1行の長さが 72 の内部テーブルを登録する必要があります。そして新しいプログラムのコードを内部テーブルに書き入れる方法は、 内部テーブルへの値挿入で説明する方法が使えます。特に、登録する側のプログラムのフローによって内容が決まる内部項目を使用することで、新しいプログラムのコーディングを動的に行うことができます。次の例はこの方法の原理を説明するものです。

DATA CODE(72) OCCURS 10.
APPEND 'REPORT ZDYN1.'
TO CODE.
APPEND 'WRITE / ''Hello, I am dynamically created!''.'
TO CODE.
2行の非常に簡単なプログラムが内部テーブル
CODE に書き込まれます。次に、新しいモジュールをライブラリに入れる必要があります。前記の例では新しいモジュールは実行可能プログラム(レポート)です。この目的のため、以下の命令を使用することができます。
構文
INSERT REPORT <
プログラム > FROM < 内部テーブル >.この文では、現在の
R/3 リポジトリ開発クラスにプログラム < プログラム > が挿入されます。指定する名前のプログラムが存在しないときは、次の属性で新しく登録されます。プログラム
<prog> の名称を引用符の間に明示的に指定するか、プログラム名を含む文字項目の名前を書くことができます。このプログラム名は、コーディングの中で指定する名前と違っていてもかまいませんが、なるべく同じにすることをお奨めします。 < 内部テーブル > は、ソースコードの入った内部テーブルです。いまの例では、次のように書くことができます。

INSERT REPORT 'ZDYN1' FROM CODE.
または
DATA REP(8).
REP = 'ZDYN1'
INSERT REPORT REP FROM CODE.
この新しいプログラムのすべてのコンポーネントは、
ABAP エディタ:第一画面から参照および変更することができます。

上記の例で作成されたプログラムに対して、
ABAP エディタをコールします。


もし
< プログラム > を名前とするプログラムが別に存在していれば、そのソースコードは、内部テーブル < 内部テーブル > からの新しいコードによって警告メッセージなしに上書きされてしまいます。このため、動的に生成されるプログラムに名前を付けるときは細心の注意が必要です。特に、新しいプログラムを登録するプログラムが2人以上のユーザに平行して使われる場合には注意してください。この場合には、各ユーザ固有の命名規則を検討する必要があります。それによって、あるユーザによって別のユーザのプログラムが置き換えられないようにすることができます。

GENERATE SUBROUTINE POOL
命令により、メインメモリに一時的な外部サブルーチンを登録できるので、動的プログラムを生成する代わりにこの命令を使用できます( 一時的サブルーチンの登録と実行参照)。