ダイアログプログラミングチュートリアル: モジュールプール SAP ABAP
⚡ スマートサマリー
対話プログラミング SAP ABAPは、画面を通してユーザーと対話し、データベースの内容を変更するモジュールプールプログラムを作成します。このページでは、トランザクションコード、画面、GUIステータス、画面フローロジック、ダイナミックプログラミング(Dynpro)、およびモジュールプール構造について説明します。

ダイアログプログラミングとは何ですか?
SAP-ABAP は、レポート プログラムとダイアログ プログラムの 2 種類のプログラムをサポートしています。
ABAP プログラムがユーザー入力を要求する場合は、ダイアログ プログラミングが使用されます。
ユーザーダイアログとは、ユーザーとプログラム間のあらゆる形式の対話であり、以下のいずれかに該当する可能性がある。
- データの入力
- メニュー項目の選択
- ボタンをクリックする
- エントリをクリックまたはダブルクリックする
ダイアログ プログラムは、画面間を行き来する必要がある場合にも使用されます。
ダイアログ プログラムは、タイプを「M」(モジュール プール)として作成されます。 これらは独立して実行することはできず、第一画面を指定する少なくとも XNUMX つのトランザクション コードに添付する必要があります。
レポート プログラムとダイアログ プログラムの違い
レポートプログラム:
レポートは、通常、データベース テーブル内のデータを変更せずに読み取り、分析するプログラムです。 データベース.
ダイアログプログラム:
ダイアログ プログラムを使用すると、システムと対話的に作業し、データベース テーブルの内容を変更できます。 各ダイアログ プログラムには、システムによって次々に処理される特定の画面シーケンスがあります。
| 基準 | レポートプログラム | 対話プログラム |
|---|---|---|
| プログラムの種類 | タイプ1、実行可能ファイル | タイプM、モジュールプール |
| データベースアクセス | データの読み取りと分析 | データの読み取りと変更 |
| 実行 | 自動で動作します | トランザクションコードを介してのみ実行されます |
| 管理 | 報告書の内容 | 各ダイナミックプログラムの画面フローロジック |
ダイアログトランザクションの画面シーケンスは、例を挙げると理解しやすくなります。
ダイアログ プログラミングのサンプル トランザクション処理
この図は、最初の画面からデータベースの更新までの一連のトランザクションを示しています。ユーザーが画面100でデータを入力すると、PAIが入力内容を検証して次の画面を決定し、画面200で残りのデータを収集し、最後に更新タスクがレコードを書き込みます。これらの各ステップは、以下にリストされているコンポーネントによって実行されます。
ダイアログプログラムのコンポーネント
取消 レポート 通常、他のオブジェクトから独立して実行できる 1 つの自律プログラムの作成を伴いますが、ダイアログ プログラム開発では、単独では実行できない複数のオブジェクトの開発を伴います。 代わりに、すべてのオブジェクトはメインプログラムに階層的にリンクされ、ダイアログメインプログラムによって指示された順序で実行されます。.
ダイアログ プログラムのコンポーネントは次のとおりです。
トランザクションコード
- トランザクション コードによって画面シーケンスが開始されます。
- トランザクション コードは、ABAP ワークベンチのリポジトリ ブラウザで作成するか、トランザクション SE93 を使用して作成します。
- トランザクションコードは、ABAP プログラムおよび第一画面にリンクされています。
- CALL SCREEN ステートメントを使用すると、任意の ABAP プログラムから画面シーケンスを開始できます。
パーテーション類
- 各ダイアログ SAP システムは 1 つ以上の画面によって制御されます。
- Screen を使用して画面を作成します。 Painter トランザクション SE51 を通じて ABAP ワークベンチで
- 各画面は ABAPプログラム.
- これらの画面は、「画面マスク」または「レイアウト」とそのフロー ロジックで構成されます。画面には、入力/出力フィールドや、チェックボックスやラジオ ボタンなどのその他のグラフィック要素の位置を決定するレイアウトがあります。フロー ロジックは、画面内の論理処理を決定します。
GUIのステータス
- 各画面には、プログラムの独立したコンポーネントである GUI ステータスがあります。
- これは、ユーザーがアプリケーションの機能を選択できるメニュー バー、標準ツールバー、アプリケーション ツールバーを制御します。
- ABAP ワークベンチでメニューを使用して作成します。 Painter.
ABAPプログラム
- R/3 システムの各画面および GUI ステータスは、XNUMX つの ABAP プログラムに属します。
- ABAP プログラムには、画面フロー ロジックによって呼び出されるダイアログ モジュールが含まれており、GUI ステータスからのユーザー入力も処理します。
- 画面を使用する ABAP プログラムは、ダイアログ プログラムとも呼ばれます。
- モジュール プール内 (タイプ M プログラム); 呼び出される最初の処理ブロックは常にダイアログ モジュールです。 ただし、実行可能プログラムや汎用モジュールなど、他の ABAP プログラムで画面を使用することもできます。 最初の処理ブロックは別の方法で呼び出されます。 たとえば、ランタイム環境やプロシージャ呼び出しによって行われます。 次に、CALL SCREEN ステートメントを使用して画面シーケンスが開始されます。
画面フローロジック
画面フローロジックは主に 4 つのコンポーネントに分かれています。
- 出力前の処理 (PBO) イベント: 画面が表示される前に処理される
- 入力後の処理(PAI) イベント: 画面上のユーザーアクションの後に処理されます。
- ヘルプリクエスト時のプロセス (P.O.H.): F1 キーが押されたときに処理されます。
- 値リクエストの処理 (ハメ撮り):F4 が押されたときに処理されます
POHとPOVについては、次のページで詳しく説明されています。 値要求の処理とヘルプ要求の処理.
ディンプロ
- 画面とそのフローロジックを合わせたものをDynpro(「動的プログラム」)と呼びます。これは、画面のフローロジックがプログラムの流れに影響を与えるためです。
- 各 Dynpro は、ダイアログ プログラムの XNUMX つのステップを正確に制御します。
- プログラムに属する画面は次のとおりです。 数の画面フローの順序は、直線型または循環型のいずれかになります。画面チェーン内から別の画面チェーンを呼び出し、処理後に元のチェーンに戻ることも可能です。また、ABAPプログラムのダイアログモジュール内から、静的に定義された次の画面をオーバーライドすることもできます。
ABAPモジュールプール
- PBOまたはPAIイベントが発生すると、DynproはABAPダイアログプログラムを呼び出します。このようなプログラムの集合は、ABAPモジュールプールと呼ばれます。
- たとえば、PAI イベントで呼び出されるモジュールは、ユーザー入力を確認し、更新タスクなどの適切なダイアログ ステップをトリガーするために使用されます。
- すべての Dynpro は内部から呼び出されます XNUMXつ トランザクションとは、共通モジュール プールを指します。
ダイアログプログラムの構造
構造図は、トランザクションコード、画面、GUIステータス、およびモジュールプールがどのように同じメインプログラムにリンクされているかを示しています。
ダイアログプログラムの処理フロー
プロセスフロー図は、画面とABAPプログラムの交互の動作を示しています。PBOが画面のフィールドに入力し、ユーザーが操作を行い、PAIが入力内容を処理してから次の画面が呼び出されます。
モジュールプールプログラムの作成方法
上記のコンポーネントは、決まった順序で作成されます。以下の手順では、空のモジュールプールから動作するトランザクションを構築します。
- モジュールプールを作成します。 SE80 または SE38 で、名前が次のように始まるプログラムを作成します。 SAPMZ に設定し、プログラムの種類を M – モジュールプールオブジェクトを削除しない限り、後から型を変更することはできません。
- グローバルデータを宣言する: TABLESステートメントとグローバル変数を、プール内のすべてのダイアログモジュールが読み取れるTOPインクルードファイルに記述してください。
- 画面をデザインする: スクリーン100を作成します Painter (SE51)で入力フィールドをレイアウトに配置し、画面属性に次の画面番号を入力します。
- フローロジックを記述してください。 フローロジックタブで、以下に示すように、PBO用のモジュールとPAI用のモジュールをそれぞれ1つずつ呼び出します。
- GUIステータスの構築: メニューでステータスを作成する Painter (SE41) で設定し、SET PF-STATUS ステートメントを使用して PBO モジュールで設定することで、保存、戻る、終了が機能コードとしてプログラムに渡るようにします。
- 取引コードをリンクする: SE93でダイアログトランザクションを作成し、モジュールプールに名前を付け、初期画面として100を入力します。
* Screen 100, flow logic PROCESS BEFORE OUTPUT. MODULE status_0100. PROCESS AFTER INPUT. MODULE user_command_0100. * Module pool SAPMZDEMO MODULE status_0100 OUTPUT. SET PF-STATUS 'STATUS_100'. SET TITLEBAR 'TITLE_100'. ENDMODULE. MODULE user_command_0100 INPUT. CASE sy-ucomm. WHEN 'SAVE'. PERFORM save_data. WHEN 'BACK' OR 'EXIT'. LEAVE TO SCREEN 0. ENDCASE. ENDMODULE.
💡ヒント: LEAVE TO SCREEN 0 は現在の画面を終了し、呼び出し元に戻ります。これはダイアログ トランザクションを正常に終了するための標準的な方法です。




