!--a11y-->

大規模なアプリケーションをプログラムする場合は、単一プログラムが非常に複雑になることがあります。プログラムを読みやすくするため、必要な機能を複数のプログラムに分割する場合もあります。
外部モジュール化によって機能グループなどの特別な非実行可能 ABAP プログラムにプロシージャを格納することができるほか、ABAP プログラム内部から個別プログラムを呼び出すこともできます。
以下の ABAP 命令を使用すれば、実行可能プログラムやトランザクションを開始することができます。呼出元プログラムを終了させることも、または呼び出されたプログラムの実行終了時に呼出元プログラムに戻ることも可能です。
|
|
タイプ 1 プログラム |
トランザクション |
|
呼び出す ( 戻りなし) |
SUBMIT |
LEAVE TO TRANSACTION |
|
呼び出して戻る |
SUBMIT AND RETURN |
CALL TRANSACTION |
これらの命令は任意の ABAP プログラムで使用することができます。たとえば、実行可能プログラムの出力リストのユーザアクションの処理中に、トランザクションを呼び出し、その第一画面に選択された一覧行からのデータが入力されるとします。
このポイントで興味深いのは、実行可能プログラムを実行させるたびに、SUBMIT 命令が発生することです。トランザクションに SE38 または SA38 などのプログラム名を入力して実行を選択すると、SUBMIT 命令がトランザクションで発生します。したがって、ユーザの視点からはフォアグラウンドで開始されるのが主要特性のように見えますが、タイプ 1 プログラムの技術的属性は SUBMIT 命令を使用して呼び出されることです。
アプリケーションサーバ上の 1 セッションの最初のABAP プログラムにより、メインセッション内の独自の内部セッション ( ロール領域) が開かれます。外部呼出のすべてのプロシージャは、呼出元プログラムと同じ内部セッションで実行されます。すなわち、メインプログラムとプロシージャの作業データとは内部セッションの同じメモリ領域にロードされます。
実行可能プログラムまたはトランザクションを呼び出すと、各プログラムのための新しい内部セッションが開かれます。2 つの例をあげてみます。第 2 プログラムが実行終了時に、コントロールを呼出元プログラムに戻さない場合、呼び出されたプログラムが内部セッションにおいて呼出元プログラムに置き換わります。呼出元プログラムのメモリの内容は削除されます。他方、第 2 プログラムが実行終了時に、コントロールを呼出元プログラムに戻す場合には、呼び出されたプログラムのセッションは削除されません。このセッションは無効になり、そのメモリ内容はスタックに置かれます。外部プログラム呼出では最大 9 つの内部セッションを追加で開くことが可能です。ABAP プログラムのメモリ構造 も参照してください。
実行可能プログラムやトランザクションのほか、ダイアログモジュールでも新たな内部セッションを開くことができます。ダイアログモジュールは以前は、画面順序のモジュール化に使用されていました。
SAP LUW は、ダイアログステップで構成される論理ユニットで、その変更は単一データベース LUW 内のデータベースに書き込まれます。さまざまなバンドリング技術を使用して、SAP LUW に所属するデータベース更新のすべてが、同じ単一データベース LUW に必ず行われるようにすることができます。
外部呼び出しされるプロシージャでは、新規の SAP LUW は開かれません。
ただし、新しく実行可能プログラムやトランザクションを開始すると、新規の SAP LUW が開始されます。これらプログラムに属するデータベース更新は、それら独自のデータベース LUW で収集されます。新しいプログラムがコントロールを呼出元プログラムに戻さない場合には、旧プログラムの SAP LUW が新しいプログラムを呼び出すタイミングを決定します。他方、新しいプログラムがコントロールを呼出元プログラムに戻す場合には、新規 SAP LUW が呼出元プログラムの SAP LUW と並行して実行されます。
ダイアログモジュールを呼び出した場合は、新しく SAP LUW は開かれません。ダイアログモジュールのバンドリング技術により、データベース更新は呼出元プログラムのデータベース LUW に追加されます。呼出元プログラムと同じ SAP LUW で実行されているトランザクションを呼び出す必要がでてくることがあります。このための技術の 1 つは、既存トランザクションをダイアログモジュールとして使用することです。そのためには、トランザクションと同じメインプログラムと第一画面を持つ、新規のダイアログモジュールを登録する必要があります。トランザクションおよびダイアログモジュールの双方として使用されるトランザクションは、特定の規則を遵守してプログラミングされる必要があります。追加情報については、画面順序の呼出を参照してください。
外部プログラムがその呼出元プログラムと SAP LUW を共有する ( または共有しない) という事実は、プログラムが更新タスク機能を呼び出したり、COMMIT WORK を使用する場合に、特別な影響をもたらします。追加情報については、LUW についての特別な考慮事項 を参照してください。