!--a11y-->

画面順序をその制御ロジックおよびアプリケーションロジックとともにカプセル化する場合は、その画面順序のすべての画面が単一の ABAP プログラムにリンクするようにする必要があります。ABAP プログラムには、画面順序内の画面によって呼び出されるすべてのダイアログモジュールが含まれています。
現時点では画面を単一のプロシージャ ( サブルーチン、汎用モジュール、またはメソッド) に割り当てることはできませんが、画面はプロシージャのメインプログラムに所属しています。
画面順序を使用するために (CALL TRANSACTION などを使用して) 新たにメインプログラムを呼び出すと、新しい SAP LUW が開始されます。これは、データベースを更新するトランザクションをモジュール化しようとする場合は特に、不適切な効果をもたらすことがあります。
これに代わる方法は、メインプログラムが画面順序にリンクされていて、かつ該当するダイアログモジュールを含む 外部プロシージャを使用することです。プロシージャは、その呼出元プログラムと同じ SAP LUW および内部セッションで実行されます。
汎用モジュールおよびその汎用グループは、呼出元プログラムと同じ SAP LUW で実行する画面順序を定義し、呼び出すためによく使用されます。
汎用モジュールの画面順序をカプセル化するには、汎用モジュールのソースコードにある CALL SCREEN 命令を使用します。呼び出された画面およびそのすべての後続画面は、汎用モジュールが所属する汎用グループに所属しています。画面の制御ロジックから呼び出すダイアログモジュールは、汎用モジュールのメインプログラムで定義されます。汎用モジュールビルダは、適切なインクルードプログラムを自動登録することによってダイアログモジュールの定義を支援します。

上記のような汎用グループには、1 つの汎用モジュールと 1 つの画面順序だけが含まれます。ただし、同一の汎用グループに、複数の独立した画面順序を持つ複数の汎用モジュールを含めることもできます。
ダイアログモジュールは、汎用モジュールの前のものです。ダイアログモジュールは現在無効であり、新たに登録することはできません。ただし、完全性を期すため、このセクションにはダイアログモジュールの構造に関する簡単な内容説明が含まれています。ダイアログモジュールは、トランザクションコードのように第一画面により ABAP プログラムの画面順序にリンクされたオブジェクトです。ダイアログモジュールを呼び出すと、対応する ABAP プログラムおよびダイアログモジュールの第一画面が呼び出されます。ダイアログモジュールはインタフェースを持つことも可能です。これを実行するには、事前に ABAP プログラムでパラメータをグローバルデ―タとして宣言する必要があります。ダイアログモジュールは、汎用モジュールビルダと類似したツール ( トランザクション SE35) を使用して、ABAP ワークベンチで登録および管理されます。同じ ABAP プログラムに複数のダイアログモジュールを割り当てることができます。

ダイアログモジュールは、CALL DIALOG 命令を使用して呼び出します。
CALL DIALOG <dialog>
[AND
SKIP FIRST SCREEN]
[EXPORTING
f1 FROM a1.... fn FROM an]
[IMPORTING
f1 TO a1.... fn TO an]
[USING
itab].
CALL DIALOG は CALL TRANSACTION と同じ構文を持っています。インタフェースを使用して、呼び出されたプログラムのグローバルデータに値を受け渡すこともできます。
ダイアログモジュールは新しい内部セッションを占有しますが、呼出元プログラムと同じ SAP LUW で実行されます。ただし、新しいセッションを開くため、パフォーマンスの点で汎用モジュールほどの効果は得られません。それでも、これは、新たに SAP LUW を開始せずに内部セッションを切り替える唯一の方法です。呼出元プログラムの SAP LUW 内でトランザクションを完全に実行することができるのは、トランザクションの第一画面をダイアログモジュールにリンクさせた場合にかぎります。
画面順序およびダイアログモジュールを呼出元プログラムの SAP LUW 内で実行し、かつそれらのSAP LUW 内でトランザクションとして実行するには、データの完全性を損なわずにすべてのデータベース更新タスクが実行されるようにする必要があります。以下の特別条件が適用されます。
キ ダイアログモジュールは、呼出元プログラムによって設定されたロックを継承します。
ダイアログモジュールとして画面順序が呼び出されると、特定のオブジェクトに対するロックがすでに存在しているものと認識されます。トランザクションとして画面順序を開始する場合は、ユーザ固有のロックを設定する必要があります。呼び出されたプログラムとしてプログラムが実行されているかどうかを実行時に確認するには、システム変数SY-CALLD を使用します。
キ ダイアログモジュールは、呼出元プログラムの更新キーを継承します。
キ ダイアログモジュールとして画面順序が実行されている場合、COMMIT 命令およびROLLBACK WORK 命令は部分的に無視されます。
呼び出されたプログラムでは、COMMIT WORK 命令および ROLLBACK WORK 命令によってデータベースコミットまたはデータベースロールバックが行われます。ただし、CALL FUNCTION IN UPDATE TASK および PERFORM ON [COMMIT|ROLLBACK] に登録されているプロシージャは、それに対応する命令が呼出元プログラムで指定されるまでは実行されません。
キ IN UPDATE TASK オプションを使用して呼び出された更新汎用モジュールは、画面順序がダイアログモジュールとして実行されている場合は開始されません。
IN UPDATE TASK を使用して呼び出したすべての汎用モジュールは、呼出元プログラムの次のCOMMIT WORK まで遅らせることができるようにする必要があります。
キ PERFORM ON COMMIT ルーチンはダイアログモジュールでは実行されません。
ON COMMIT を使用して呼び出したすべてのサブルーチンは、呼出元プログラムの次の COMMIT WORK まで遅らせることができるようにする必要があります。ダイアログモジュールのグローバルデータは、コントロールが呼出元プログラムに戻る際に、内部セッションとともに廃棄されることに注意してください。したがって、PERFORM ON COMMIT によって呼び出したサブルーチンはこのグローバルデータを使用すべきではありません。
キ トランザクションとして画面順序を実行する場合は、インタフェースの入力パラメータに適切なデフォルト値が設定されるようにする必要があります。