!--a11y-->

ダイアログ駆動プログラム、すなわちトランザクションコードを使用して開始される任意のプログラムは、SAP トランザクション、または単なるトランザクションとして知られています。"トランザクション" という用語は IT の世界でいくつかの異なるコンテキストで使用されています。1 システムにおいて複数のユーザがダイアログモードで作業している、OLTP (オンライントランザクション処理) では、"トランザクション" という用語はユーザ要求を意味します。データベース更新と共に、これはデータベース内の状態の変更を意味します。
タイプ M のプログラムを起動できるのは、トランザクションコードを使用する場合に限ります。トランザクションコードには第一画面が定義されています。タイプ 1 のプログラムは、トランザクションコードを使用することによっても、あるいはトランザクション SE38 または SA38 のいずれかにプログラム名を入力することによっても起動できます。画面は、制御ロジックから関連 ABAP プログラムのダイアログモジュールを呼び出します。タイプ M のプログラムは主としてダイアログモジュールのコンテナとして働き、モジュールプールとして知られています。タイプ 1 のプログラム、すなわち汎用モジュールも、CALL SCREEN 命令を使用して画面を呼び出すことにより、ダイアログモードに切り替えることができます。すると、対応する実行可能プログラムのプログラムコード、すなわち機能プールには、対応するダイアログモジュールが含まれます。
部分的または全体的にダイアログ駆動のプログラムは、バックグラウンドで実行することができません。したがって、これらをダイアログプログラムと呼ぶこともあります。
ダイアログ駆動のプログラムは、以下の基本コンポーネントで構成されます。
キ トランザクションコード
トランザクションコードは、画面順序として開始します。トランザクションコードの登録は、ABAP ワークベンチのリポジトリブラウザで行うか、またはトランザクション SE93 を使用して行います。トランザクションコードは、ABAP プログラムと第一画面とにリンクされます。画面順序は、トランザクションコードを使用することによっても、あるいは任意の ABAP プログラムから CALL SCREEN 命令を使用することによっても起動できます。
キ 画面
SAP システムの各ダイアログは、1 つまたは複数の画面によって制御されます。これら画面は画面マスクとその制御ロジックにより構成されます。制御ロジックはプログラムフローに影響を与えるので、画面は “動的プログラム” と呼ばれることもあります。ABAP ワークベンチのスクリーンペインタを使用して画面を登録します。各画面は 1 つの ABAP プログラムに属します。
画面のレイアウトでは、入出力項目、およびチェックボックスやラジオボタンなどのグラフィック要素の表示位置が決定します。制御ロジックは 2 つの部分で構成されます。
- 出力前処理 (PBO)ここでは、画面が表示される前に実行する処理が定義されます。
- 入力後処理 (PAI)ここでは、ユーザが画面上で機能を選択した後に実行する処理が定義されます。
ABAP プログラム内で呼び出す画面はすべて、そのプログラムに属している必要があります。プログラムに属している画面には番号が割り当てられます。各画面ごとに、次に通常表示される画面の番号が保存されます。この画面順序は、線形のことも、巡回型のこともあります。1 つの画面チェーンから、別の画面チェーンを呼び出したり、処理が終了した後で元のチェーンに戻ることもできます。また、ABAP プログラムのダイアログモジュール内から静的に定義された次画面を上書きすることもできます。
キ GUI ステータス
各画面には GUI ステータスがあります。これにより、ユーザがアプリケーション内で機能を選択するのに使用する、メニューバー、標準ツールバー、およびアプリケーションツールバーが制御されます。画面と同じく、GUI ステータスは ABAP プログラムの独立コンポーネントです。ABAP ワークベンチのメニューペインタを使用してこれらを登録します。
キ ABAP プログラム
R/3 システムの各画面と GUI ステータスは、1 つの ABAP プログラムに属しています。ABAP プログラムに含まれるダイアログモジュールは、画面制御ロジックによって呼び出されたり、GUI ステータスからのユーザ入力を処理したりします。画面を使用する ABAP プログラムは、ダイアログプログラムとしても知られています。モジュールプール (タイプ M プログラム) においては、呼び出される最初の処理ブロックは常にダイアログモジュールです。ただし、実行可能プログラムや汎用モジュールなどの他の ABAP プログラムでも画面を使用することができます。その場合、最初の処理ブロックは異なる方法で呼び出されます。たとえば、実行時環境やプロシージャコールによって呼び出されます。それから、画面順序が CALL SCREEN 命令を使用して起動されます。
ダイアログモジュールは、PBO モジュールと PAI モジュールに分割されます。PBO イベントで呼び出されるダイアログモジュールを使用すると、コンテキストに応じた項目内容を設定したり、不要な項目を非表示にするなど、画面の準備ができます。PAI イベントで呼び出されるダイアログモジュールを使用すると、ユーザ入力をチェックしたり、更新タスクなどの適切なダイアログステップをトリガすることができます。
ABAP プログラムの項目はどのようにして画面上に表示されるのでしょうか。また、画面上のユーザ入力は、どのようにして ABAP プログラムに転送されるのでしょうか?一覧プログラミングとは異なり、WRITE 命令で項目データを画面に書き込むことはできません。その代りに、画面項目名とプログラム中の ABAP 項目名を比較することにより、システムがデータを転送します。両方の名称が同一であれば、画面と ABAP プログラム間でデータ転送が行われます。これは、画面が表示される直前および直後に行われます。
ダイアログ画面のすべての画面項目には、スクリーンペインタで項目属性が定義されています。画面内の項目名が ABAP ディクショナリ項目の名称と一致する場合は、自動的にこれら 2 つの項目の間の参照が確立されます。したがって、ABAP ディクショナリから多数の項目属性が画面にコピーされます。画面がダイアログで実行する標準的機能 (画面項目に対する自動フォーマットチェック、値の有効範囲の自動チェック、オンラインヘルプなど) は、項目属性、データエレメント、およびディクショナリ項目に割り当てられているドメインを基本として形成されています。
画面プロセッサには、エラー画面を起動する役割もあります。入力データのチェックは、ABAP ディクショナリのチェックテーブルによって自動的に行われるか、または ABAP プログラム自体によって行われます。画面プロセッサは、受信した画面にエラーメッセージを挿入し、その画面をユーザに返します。メッセージはコンテキスト依存にすることができます。つまり、メッセージテキスト内のプレースホルダは現在の項目内容で置換されます。また、エラーに関連する内容の項目や、値を修正してエラーが解決できるような項目だけが入力可能になります。画面のメッセージも参照してください。
複雑なアプリケーションの中でデータの整合性を保つために、ABAP はデータベース更新を最適化するための技術を提供しています。それは当のデータベースとは独立して機能し、ダイアログプログラミングの特殊な要求と対応しています。データベース更新のプログラミングも参照してください。