!--a11y-->

ダイアログ制御の実行のコンセプトを説明するため、パッケージ SABAPDOCU の簡単なサンプルトランザクションDEMO_TRANSACTION を以下に示します。
サンプルトランザクションは、単一のダイアログ画面で構成されます。ユーザは、フライト依頼情報内に航空会社の ID とフライト番号を入力することができます。

ユーザが 照会 を選択すると、要求されたデータがデータベースから検索され、画面に表示されます。
サンプルトランザクションの構造は以下のとおりです。
コンポーネントはすべて、リポジトリブラウザのプログラム名SAPMDEMO_TRANSACTION の下にあります。また、トランザクション内部から、システム → ステータス を選択して、一覧表示されたコンポーネントの 1 つをダブルクリックして ABAP ワークベンチの適切なツールに切り替えることもできます。
各画面には、情報の表示または要求のために使用される項目があります。項目には、テキスト文字列、入出力項目、ラジオボタン、チェックボックス、または押ボタンなどがあります。トランザクションDEMO_TRANSACTION の画面には、テキストと入出力項目のみが含まれています。

キ 画面属性: 画面番号、次画面の番号などの属性の指定
キ レイアウト: テキスト、項目、押ボタンなどの画面上の位置を決定します。
キ 項目属性: 画面上の個別項目のプロパティの定義
キ フロー制御: 画面への ABAP モジュールの呼出
画面のコンポーネントはすべて、
スクリーンペインタを使用して登録します。スクリーンペインタを起動するには、リポジトリブラウザで画面を登録するか、または既存の画面をクリックします。リポジトリブラウザによりスクリーンペインタが呼び出されるので、この中に、登録ないし変更したい画面の制御ロジックを入力することができます。制御ロジックエディタには、レイアウトエディタ、項目一覧、または画面属性画面へ切り替えるのに使用できる押ボタンも含まれています。
トランザクションは、ユーザ側から見ると、順に表示される一連の画面とであるということができます。この順序はどのように決定するのでしょうか。トランザクションの属性により、表示される第一画面が決定します。個別画面の属性により、現在の画面の次に表示される画面が決定します。また、ABAP プログラム内から動的に後続画面の番号を設定することもできます。
たとえば、ここの例では、後続画面の呼出は行われないので、画面属性を変更する必要はありません。
スクリーンペインタでレイアウトエディタを起動するには、全画面を選択します。ここで、画面のレイアウトを設定することができます。トランザクションDEMO_TRANSACTION
においては、希望項目は ABAP
ディクショナリのテーブル SPFLI
からコピーすることができます。追加情報については、
スクリーンペインタ文書を参照してください。
エレメント一覧
において、画面上の各項目の属性を照会または変更することができます。(
入出力項目、必須項目、入力可能値ボタンが表示されるかどうか、項目が非表示かどうかなど)
。
項目航空会社
(SPFLI-CARRID)
およびフライト番号
(SPFLI-CONNID)
は、入出力項目として定義されています。その他の項目はすべてフライトデータの出力用にのみ使用されます。
制御ロジック
ダイアログ画面の制御ロジックは、構文的に ABAP 命令に類似している、いくつかの命令で構成されます。制御ロジックキーワードを ABAP プログラムで使用したり、ABAP 命令を画面の制御ロジックで使用することはできません。フロー制御コードは、画面の 1 コンポーネントとしてスクリーンペインタに入力します。
トランザクションDEMO_TRANSACTION における画面のフロー制御は以下のようになります。
PROCESS BEFORE OUTPUT.
MODULE set_status_0100.
*
PROCESS AFTER INPUT
MODULE user_command_0100.
PROCESS 命令は、2 つのイベント PBO と PAI のための制御ロジックを導入します。MODULE 命令のそれぞれは、関連 ABAP プログラムのダイアログモジュールを 1 つ呼び出します。この例では、PBO および PAI の各イベントごとに 1 つのモジュールのみがあります。ただし、当然ながら、制御ロジックにはより多くの命令が含まれて、各イベントで複数のダイアログモジュールを呼び出すこともあります。また、複数の画面から同じダイアログモジュールを呼び出すこともできます。
制御ロジック構文には、いくつかの命令しか含まれません。最も重要なものは、MODULE 、FIELD 、CHAIN 、LOOP 、および CALL SUBSCREEN です。制御ロジック構文の情報については、制御ロジックエディタから、ユーティリティ ヘルプ... を選択してください。ダイアログボックスが表示されるので、制御ロジックキーワードを選択してから、追加情報を知りたいキーワードを入力します。
この例での ABAP プログラムはタイプ M 、すなわちモジュールプールです。リポジトリブラウザでタイプ M のプログラムを登録すると、ABAP ワークベンチが自動的にプログラムコードを一連のインクルードプログラムに構成します。ABAP プログラムで命名規則 SAPM<name> を遵守している場合、リポジトリブラウザの階層ツリーにおいて、以下のインクルードプログラムを登録することができます。
キ グローバル項目: インクルード M<name>TOP でのグローバルデータ宣言このデータは、プログラム内の全モジュールで表示されます。
キ PBO モジュール: インクルード M<name>O<nn> でのダイアログモジュール。画面が表示される前に呼び出されます。
キ PAI モジュール: インクルード M<name>I<nn> でのダイアログモジュール。画面上でのユーザアクションの後に呼び出されます。
キ サブルーチン: プログラム内のサブルーチン。インクルード M<name>F<nn> で保存されます。これらはプログラムのどこからでも呼び出すことができます。
キ 一覧イベント: 一覧プロセッサイベントのイベントブロック。インクルード M<name>E<nn> で保存されます。これらは一覧処理中に発生します。
インクルードプログラムには複数の処理プログラムを含むことができます。これらは通常すべて同じタイプです ( たとえば、PBO モジュールのみ、または PAI モジュールのみなど). ただし、各処理ブロックに対して異なるインクルードプログラムを登録したり、1 つのインクルードプログラム内にさまざまなタイプの処理ブロックを組み合わせたりすることはできます。
ABAP ワークベンチによって提示された有効なメソッドにしたがえば、個別のインクルードをユーザプログラムに統合している一連の INCLUDE 命令を除くと、ユーザのメインプログラムのソースコードは何もなくなります。
*&---------------------------------------------------------------*
*& Module
pool
SAPMDEMO_TRANSACTION
*
*&
*
*&---------------------------------------------------------------*
*&
*
*& Display data of table
SPFLI *
*&
*
*&---------------------------------------------------------------*
* Global data
INCLUDE mdemo_transactiontop.
* PAI-Module
INCLUDE mdemo_transactioni01.
* PBO-Module
INCLUDE mdemo_transactiono01.
このサンプルプログラムでは、インクルードプログラムは次のようになります。
*&---------------------------------------------------------------*
*& Module
pool SAPMDEMO_TRANSACTION
*
*& FUNCTION:
Display data of table SPFLI
*
*&
*
*&---------------------------------------------------------------*
*----------------------------------------------------------------*
* INCLUDE MDEMO_TRANSACTIONTOP (This is the TOP
include: *
* The TOP module
contains global data declarations) *
*----------------------------------------------------------------*
PROGRAM sapmdemo_transaction.
TABLES: spfli.
DATA ok_code(4).
*----------------------------------------------------------------*
* INCLUDE MDEMO_TRANSACTIONO01 (This is a PBO
include.) *
*----------------------------------------------------------------*
*&---------------------------------------------------------------*
*& Module STATUS_0100
*&---------------------------------------------------------------*
* Define GUI status and title for screen
100
*
*----------------------------------------------------------------*
MODULE status_0100.
SET PF-STATUS ‘
TZ0100’
.
SET TITLEBAR ‘
100’
.
ENDMODULE.
*----------------------------------------------------------------*
* INCLUDE MDEMO_TRANSACTIONI01 (This is a PAI
include.) *
*----------------------------------------------------------------*
*&---------------------------------------------------------------*
*& Module
USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------*
* Get data from SPFLI or leave transaction
*
*----------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE ok_code.
WHEN ‘
SHOW’
.
CLEAR ok_code.
SELECT SINGLE * FROM spfli WHERE carrid = spfli-carrid
AND connid
= spfli-connid.
WHEN space.
WHEN OTHERS.
CLEAR ok_code.
SET SCREEN 0. LEAVE SCREEN.
ENDCASE.
ENDMODULE.
データベーステーブル SPFLI のテーブル作業領域が、TABLES 命令でインクルードプログラムMDEMO_TRANSACTIONTOP に登録されます。テーブル作業領域は、画面と ABAP プログラム間のデータ受け渡しのインタフェースとして機能します。これは、画面上の入出力項目が同じ ABAP ディクショナリ参照により登録されているからです。OK_CODE 項目は、同じ名称の画面項目から機能コードを受信するのに使用されます。
画面 100 の PBO モジュールは、インクルードプログラム MDEMO_TRANSACTIONO1 でダイアログステータスを STATUS_0100 に、および GUI 表題を 100 に設定します。この GUI ステータスとこの GUI 表題は、新たにダイアログステータスや GUI 表題が設定されるまで、すべての後続画面に対して有効になります。ダイアログステータスを設定することは重要です。設定しないと、システムは空のステータスを使用するので、ユーザはプログラムを終了することができなくなります。
インクルードプログラムMDEMO_TRANSACTIONI01 において、PAI モジュール USER_COMMAND_0100 は、ユーザがどの押ボタンを選択するかチェックします (CASE OK_CODE.) 。照会押ボタンには機能コード ‘SHOW’ があります。ユーザがこの機能を選択すると、プログラムは、ユーザが入力した詳細に対応するデータベーステーブル SPFLI からエントリを読み込みます。SELECT 命令の WHERE 条件において、項目 SPFLI-CARRID およびSPFLI-CONNID ( 画面上でユーザにより入力された) が、データベーステーブル SPFLI のキー項目 CARRID および CONNID と比較されます。
次に画面が表示される前にデータがテーブル作業領域から対応する画面項目に転送され、したがって画面に表示されます。
GUI
ステータスと GUI
表題は、画面のインタフェースエレメントです。どちらも、ABAP
ワークベンチの
メニューペインタ
を使用して登録します。タイプダイアログステータスの GUI
ステータスが画面で使用されます。

ダイアログステータスは、画面の対話式インタフェースエレメントのコレクションです。エレメントのセットを画面に適用するには、ABAP 命令 SET PF-STATUS を使用して画面にダイアログステータスをリンクします。トランザクションの画面のダイアログステータスには通常、メニューバー、標準ツールバー、アプリケーションツールバー、およびキー割当など、あらゆるエレメントが含まれています。ユーザがメニューエントリ、押ボタン、または機能キーを選択したとき、これら機能のそれぞれにより、機能コードが現在の画面の PAI モジュールに送信されます。ダイアログボックスとコンテキストメニューのためのステータスと呼ばれる、特別な GUI ステータスもあります。この特別な目的のために、これらに含まれているエレメント数が少なくなっています。ダイアログボックスステータスにはメニューバーや標準ツールバーがありません。コンテキストメニューは、右マウスキーで有効化できる 1 つのコンテキスト固有のメニューです ( SHIFT F10) 。
GUI 表題は、ウィンドウの表題バーに表示される画面表題です。GUI 表題は、GUI ステータスで他のインタフェースエレメントと統合されません。各 GUI 表題は、SET TITLEBAR 命令により個別に設定する必要があります。
最もシンプルなフォームのトランザクションは、画面と ABAP ルーチンの集合で、実行時環境により制御され実行されます。実行時環境は、画面を順序にしたがって処理し、対応する ABAP 処理モジュールを呼び出します。
実行時環境は、画面プロセッサと ABAP プロセッサにより構成されます ( ワークプロセスを参照してください) 。各画面に対し、画面プロセッサが制御ロジックを実行し、この制御ロジックから対応する ABAP 処理が呼び出されます。コントロールが、画面プロセッサと ABAP プロセッサ間において交互に移動し、それにしたがってアプリケーションプログラムのフローが、画面制御ロジックと ABAP 処理ロジックを交互に移動します。ABAP プログラムのイベントと同じように、画面処理においても 2 つのイベント、PBO と PAI を識別することができます。実行時環境 ( この場合は画面プロセッサ) により、イベント ( 画面上のユーザアクション後の PAI など) がトリガされます。
たとえば、トランザクションDEMO_TRANSACTION のイベント順序は、以下のようになります。

...
1. 画面イベント PBO において、命令 MODULE STATUS_0100 が対応するダイアログモジュールを呼び出し、コントロールを ABAP プロセッサに渡します。
2. モジュール STATUS_0100 の処理後、コントロールは制御ロジックに戻ります。画面プロセッサにより画面が表示されます。
3. PAI イベントが画面上のユーザアクションによりトリガされます。命令 MODULE USER_COMMAND_0100 が対応するダイアログモジュールを呼び出し、コントロールを ABAP プロセッサに渡します。
4. モジュール STATUS_0100 の処理後、コントロールは画面プロセッサに戻ります。画面には静的次画面 100 ( 画面属性で定義された) があるので、プログラムフローは再びステップ 1 から始まります。
コントロールが 2 つのプロセッサ間で移動するたびに、プログラムと画面の同一名称項目間でデータが転送されます。コントロールが制御ロジックから処理ロジックに渡されるとき、グローバル ABAP 変数には同一名称画面項目の内容が入ります。コントロールが処理ロジックから制御ロジックに戻されるときには、データは逆方向に転送されます。各画面には、タイプ OK の項目があり、ユーザが選択したアクションの機能コードが含まれます。ユーザの ABAP プログラムからこの値を読み込むには、ABAP プログラムに同一名称のグローバル項目が必要です。