ABAPサブスクリーンチュートリアル:サブスクリーンの呼び出し SAP
⚡ スマートサマリー
ABAPのサブスクリーンは、実行時にフローロジックとともに、ある画面を別の画面の領域内に埋め込みます。このページでは、サブスクリーン領域、PBOおよびPAIのCALL SUBSCREENステートメント、データ転送、および実行時エラーの原因となる制約について説明します。

サブスクリーンとは何ですか SAP ABAP?
このチュートリアルを読む前に、 対話プログラム です。
- サブ画面は、別の(「メイン」)画面の領域に表示される独立した画面です。
- サブ画面を使用すると、実行時に XNUMX つの画面を別の画面に埋め込むことができます。 メイン画面上に複数のサブ画面を含めることができます。
- サブ画面という用語は、埋め込む画面と、それを配置するメイン画面上の領域の両方に適用されます。 このチュートリアルはサブスクリーン領域に関するものです。 SE51 トランザクションを通じて作成される実際の画面を、画面属性で定義されている場合は従属画面と呼びます。
- サブ画面を使用すると、埋め込まれた画面のフロー ロジックもメイン画面のフロー ロジックに埋め込まれます。したがって、画面上でサブ画面を使用することは、 ABAPプログラム.
サブ画面を使用するには、XNUMX つの簡単な手順に従う必要があります。
- 画面上のサブ画面領域を定義します。
- 適切な従属画面を定義する
- 従属画面領域に従属画面を含めます。
また、サブ画面とメイン画面のフレームを調整する必要があります。 フィールド名フィールドに名前を付ける必要があります。
さらに、サブ画面内のフィールドをメイン画面に表示されるように調整する必要もあります。 サブ画面がメイン画面の利用可能な領域より大きく定義されている場合、利用可能な領域に収まるサブ画面の一部のみが表示されます。 面積は常に画面の左上隅から測定されます。 したがって、サブ画面領域を定義し、サブ画面を作成するときは、十分な注意が必要です。
通話サブ画面
実施例
たとえばここでは、メイン画面上に XNUMX つのサブ画面領域を定義し、XNUMX つの異なるサブ画面を対応する領域に接続しています。 メイン画面が呼び出されるたびに、メイン画面の PBO が呼び出されます。 ただし、表示前に、メイン画面上のサブ画面領域に接続された各画面の PBO も呼び出されます。
スクリーンショットには、メイン画面と、それぞれ独立した2つのサブスクリーン領域が表示された2つのサブスクリーン領域が写っています。
メイン画面のフロー ロジックで CALL SUBSCREEN ステートメントを使用して、サブ画面画面を含めることができます。
PBOでサブスクリーンを呼び出す
メイン画面のサブ画面領域にサブ画面画面を含め、その PBO フロー ロジックを呼び出すには、メイン画面の PBO イベントで次のステートメントを使用します。
PROCESS BEFORE OUTPUT. CALL SUBSCREEN <area> INCLUDING [<prog>] <dynp>.
このステートメントは、従属画面に番号を割り当てます。 というサブスクリーン領域に。 従属画面が定義されているプログラムを指定することもできます (オプション)。 プログラムを明示的に指定しない場合、システムはメインプログラムと同じ ABAP プログラム内で従属画面を検索します。 対応する従属画面が見つからない場合は、実行時エラーが発生します。 従属画面の PBO フロー ロジックも同じポイントに含まれます。 これにより、従属画面が定義されている ABAP プログラムの PBO モジュールを呼び出すことができます。 従属画面 PBO の最後に、プログラムのグローバル項目が従属画面内の同じ名前の画面項目に渡されます。 従属画面画面の PBO フロー ロジック自体に、さらに従属画面を含めることができます。
名前従属画面領域の値は、逆カンマを使用せずに直接入力する必要があります。 名前を指定できますそしてリテラルまたは変数として。 変数を使用する場合は、ABAP プログラム内で同じ名前の変数を宣言して設定する必要があります。 画面番号長さは 4 文字である必要があります。 従属画面をエリアに割り当てない場合、そのエリアは空のままになります。
PAIでサブスクリーンを呼び出す
サブ画面の PAI フロー ロジックを呼び出すには、メイン画面の PAI フロー ロジックで次のステートメントを使用します。
PROCESS AFTER INPUT. CALL SUBSCREEN <area>.
このステートメントには、従属画面領域に含まれる従属画面の PAI フロー ロジックが含まれます。 PBOイベントにて。 これにより、従属画面が定義されている ABAP プログラムの PAI モジュールを呼び出すことができます。 データは、PAI イベントのトリガ時、または従属画面の PAI フローロジック内の対応する FIELD ステートメントのいずれかで、従属画面画面内の同じ名前の項目と ABAP プログラムの間で転送されます。
サブスクリーンの作成と埋め込み方法
前述の3つのステップはスクリーン上で実行されます Painter そして、メイン画面のフローロジックにおいて。以下のシーケンスは、単一のサブスクリーン領域を持つ1つのメイン画面を作成します。
- サブスクリーン領域を作成します。 メイン画面(例えば画面100)を開きます。 Painter (SE51) を選択してください サブスクリーン 要素バーから要素を選択し、レイアウト上に描画して、「名前」フィールドに「SUB_AREA」などの名前を入力します。この名前は、後ほど「CALL SUBSCREEN」ステートメントで使用されます。
- サブスクリーン画面を作成します。 例えばスクリーン110という2つ目のスクリーンを作成し、そのスクリーンタイプを サブスクリーン 属性において。サブスクリーンには、OKコードフィールドも独自のGUIステータスもありません。
- フィールドを配置する: 画面110に入力フィールドを描画してください。レイアウトはサブスクリーン領域のサイズ内に収まるようにしてください。左上隅から計測して、収まる部分のみが表示されます。
- グローバルデータを宣言する: モジュールプールの最上位のインクルードファイルにフィールドを配置することで、メイン画面とサブ画面の両方が同じグローバル変数を読み込むようになります。
- サブスクリーンを呼び出す: 以下に示すように、PBOとメイン画面のPAIにCALL SUBSCREENを追加します。
- 有効化してテストする: 画面とプログラムをアクティブ化してから、トランザクションを開始します。サブスクリーン領域には画面110が表示され、そのモジュールは画面100のフローロジック内で実行されます。
* Flow logic of the main screen 100 PROCESS BEFORE OUTPUT. MODULE status_0100. CALL SUBSCREEN sub_area INCLUDING 'SAPMZDEMO' '0110'. PROCESS AFTER INPUT. CALL SUBSCREEN sub_area. MODULE user_command_0100.
💡ヒント: ユーザー入力に応じて異なるサブスクリーンを表示する必要がある場合は、画面番号をリテラル値ではなくグローバル変数に格納してください。変数名は、プログラム内と CALL SUBSCREEN ステートメント内で同じである必要があります。
覚えておくべきポイント
- 画面内のサブ画面の要素の名前は一意である必要があります
- サブ画面に OK_CODE または FCODE を付加しないでください。 メイン画面自体の OK_CODE がサブ画面の OK_CODE になります
- サブ画面には、SET TITLEBAR、SET PF-STATUS、SET SCREEN、LEAVE SCREEN、または LEAVE TO SCREEN を含むダイアログ モジュールを含めることはできません。 これにより実行時エラーが発生します。
- メイン画面のフロー ロジック (PBO と PAI の両方) で呼び出す必要があります。
- CALL SUBSCREEN は CHAIN..ENDCHAIN および LOOP ENDLOOP ステートメントでは使用できません。
- AT EXIT-COMMAND モジュールは使用できません
- 使用するフィールドはグローバル フィールドです。 これらは先頭のインクルードで宣言する必要があります
- 他のサブ画面を使用する場合 ダイアログプログラム 特定のコードを追加しない限り、データ転送は行われません。
⚠️ 警告: CALL SUBSCREEN を CHAIN … ENDCHAIN 内、または screen LOOP 内に配置すると構文エラーが発生し、存在しない画面番号を呼び出すと最初の表示時に実行時エラーが発生します。

