ABAPサブスクリーンチュートリアル:サブスクリーンの呼び出し SAP

⚡ スマートサマリー

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

  • 🪟 コア定義: サブスクリーンとは、メインスクリーン内の定義された領域に表示される独立したスクリーンであり、複数のサブスクリーンが1つのメインスクリーンを共有することも可能です。
  • 🧩 類推を含める: 組み込み画面のフローロジックは、プログラムにインクルードファイルが挿入されるのとまったく同じように、メイン画面のフローロジックに挿入されます。
  • 🪜 XNUMXつのステップ: サブスクリーン領域を定義し、サブスクリーン画面を定義してから、その画面を領域内に含めます。
  • 特選割️ PBOコール: サブスクリーンを呼び出す含むその領域に4文字の画面番号を割り当て、PBOロジックを実行します。
  • 特選割️ PAIコール: サブスクリーンを呼び出すPAIでは、組み込み画面のPAIロジックを実行し、同じ名前のフィールドのデータを転送します。
  • 🚫 制限事項: サブスクリーンでは、SET PF-STATUS、SET TITLEBAR、SET SCREEN、LEAVE SCREEN、独自の OK_CODE、または AT EXIT-COMMAND を使用することはできません。
  • 🌐 グローバル分野: サブスクリーンで使用されるフィールドは、プログラムのTOPインクルードで宣言されたグローバルフィールドです。

ABAPサブスクリーン

サブスクリーンとは何ですか SAP ABAP?

このチュートリアルを読む前に、 対話プログラム です。

  • サブ画面は、別の(「メイン」)画面の領域に表示される独立した画面です。
  • サブ画面を使用すると、実行時に XNUMX つの画面を別の画面に埋め込むことができます。 メイン画面上に複数のサブ画面を含めることができます。
  • サブ画面という用語は、埋め込む画面と、それを配置するメイン画面上の領域の両方に適用されます。 このチュートリアルはサブスクリーン領域に関するものです。 SE51 トランザクションを通じて作成される実際の画面を、画面属性で定義されている場合は従属画面と呼びます。
  • サブ画面を使用すると、埋め込まれた画面のフロー ロジックもメイン画面のフロー ロジックに埋め込まれます。したがって、画面上でサブ画面を使用することは、 ABAPプログラム.

サブ画面を使用するには、XNUMX つの簡単な手順に従う必要があります。

  1. 画面上のサブ画面領域を定義します。
  2. 適切な従属画面を定義する
  3. 従属画面領域に従属画面を含めます。

また、サブ画面とメイン画面のフレームを調整する必要があります。 フィールド名フィールドに名前を付ける必要があります。

さらに、サブ画面内のフィールドをメイン画面に表示されるように調整する必要もあります。 サブ画面がメイン画面の利用可能な領域より大きく定義されている場合、利用可能な領域に収まるサブ画面の一部のみが表示されます。 面積は常に画面の左上隅から測定されます。 したがって、サブ画面領域を定義し、サブ画面を作成するときは、十分な注意が必要です。

通話サブ画面

実施例

たとえばここでは、メイン画面上に XNUMX つのサブ画面領域を定義し、XNUMX つの異なるサブ画面を対応する領域に接続しています。 メイン画面が呼び出されるたびに、メイン画面の PBO が呼び出されます。 ただし、表示前に、メイン画面上のサブ画面領域に接続された各画面の PBO も呼び出されます。

サブスクリーンを呼び出す SAP

スクリーンショットには、メイン画面と、それぞれ独立した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つのメイン画面を作成します。

  1. サブスクリーン領域を作成します。 メイン画面(例えば画面100)を開きます。 Painter (SE51) を選択してください サブスクリーン 要素バーから要素を選択し、レイアウト上に描画して、「名前」フィールドに「SUB_AREA」などの名前を入力します。この名前は、後ほど「CALL SUBSCREEN」ステートメントで使用されます。
  2. サブスクリーン画面を作成します。 例えばスクリーン110という2つ目のスクリーンを作成し、そのスクリーンタイプを サブスクリーン 属性において。サブスクリーンには、OKコードフィールドも独自のGUIステータスもありません。
  3. フィールドを配置する: 画面110に入力フィールドを描画してください。レイアウトはサブスクリーン領域のサイズ内に収まるようにしてください。左上隅から計測して、収まる部分のみが表示されます。
  4. グローバルデータを宣言する: モジュールプールの最上位のインクルードファイルにフィールドを配置することで、メイン画面とサブ画面の両方が同じグローバル変数を読み込むようになります。
  5. サブスクリーンを呼び出す: 以下に示すように、PBOとメイン画面のPAIにCALL SUBSCREENを追加します。
  6. 有効化してテストする: 画面とプログラムをアクティブ化してから、トランザクションを開始します。サブスクリーン領域には画面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 内に配置すると構文エラーが発生し、存在しない画面番号を呼び出すと最初の表示時に実行時エラーが発生します。

よくあるご質問

タブストリップとは、タブページ自体がサブスクリーン領域であるコンテナのことです。サブスクリーンがコンテンツであり、タブストリップはそれらのサブスクリーンのうちどれが現在ユーザーに表示されているかを決定するだけです。

メイン画面には複数のサブ画面領域があり、各領域には一度に1つのサブ画面が表示されます。サブ画面自体にもさらにサブ画面を埋め込むことができるため、階層構造は画面サイズと視認性によってのみ制限されます。

データは、同一の名前を持ち、かつグローバルに宣言されている画面フィールドとプログラムフィールド間でのみ転送されます。別のプログラムから取得したサブスクリーンは、コードによって明示的に値が渡されない限り、何も転送しません。

はい。AIアシスタントはショートダンプとフローロジックを読み取り、画面番号の欠落、サブスクリーン内での禁止されているSET PF-STATUS、またはCHAIN内に配置されたCALL SUBSCREENなど、一般的な原因を指摘します。

AI分析ツールはモジュールプールをスキャンし、レイアウトが重複している画面を検出し、それらを置き換えるCALL SUBSCREENステートメントを含む、再利用可能な単一のサブスクリーンを提案します。提案された内容は、画面が削除される前にレビューされます。