SAPにおける選択画面の作成を行うSELECTION-SCREEN命令の使い方を初心者向けに1から解説します。
選択画面を作成する際に、利用するABAP命令は主に3つ。
単一の入力項目を作成するPARAMETERS命令。
そして、最大値・最小値を指定可能な項目を作成するSELECT-OPTIONS命令。
そして3つ目が本ページで解説する、主にレイアウト定義を行う、SELECTION-SCREEN命令です。このページでは、SELECTION-SCREEN命令の役割と使い方を1から解説します。
ABAPエンジニアを目指す方であれば、絶対に知っておきたい超・基本知識ですので、是非最後までご覧ください。
それでは早速解説を始めます。
SELECTION-SCREEN命令とは
SELECTION-SCREEN命令は、大きく分けて2つの用途に分けて利用されます。
1つが、選択画面の定義を行う場合。もう1つが、選択画面のレイアウトを定義する場合です。実務では、後者のレイアウト定義で用いられることがほとんどですが、本ページでは体系的に、選択画面定義から解説していきます。
選択画面の定義
選択画面の定義というと混乱する方もいらっしゃる方もいるかもしれません。
ただ、これは単に「第1選択画面」「第2選択画面」、F4ヘルプを押したときに出す「ポップアップ画面」などのこと。
ポップアップ画面などは、SAPで事前に用意されているわけではないので、必ずABAPのコードで1から定義を行う必要があります。この章では、メインの選択画面の作り方、ポップアップ画面の作り方などを1から解説します。
メイン画面/スタンドアロン
SELECTION-SCREEN BEGIN OF SCREEN (Dynpro番号) .
・・・・
SELECTION-SCRENN END OF SCREEN (Dynpro番号) .
SELECTION-SCREEN BEGIN OF SCREEN (Dynpro番号) . ・・・・ SELECTION-SCRENN END OF SCREEN (Dynpro番号) .
Dynpro番号というのは、選択画面を管理するIDのようなもの。選択画面と一言にいっても、メインの選択画面だけではなく、ポップアップで表示される選択画面や、第2選択画面など、複数の画面を持つ場合があります。
そのような場合に、どの選択画面を定義しているのか?どの選択画面に対する処理なのか?を区別するために、ABAPではDynpro番号を利用します。
メイン画面・・・Dynpro番号1000
第2選択画面・・・Dynpro番号500
第3選択画面2・・・Dynpro番号700
実行可能プログラムにおいては、イベント「AT SELECTION-SCREEN」のタイミングで「Dynpro番号 1000」の標準選択画面が表示されるため、メインの選択画面以外に第2選択画面などを定義する必要がない場合は、このメイン選択画面自体の定義は不要になります。
汎用モジュールやインクルードプログラムの中で選択画面を定義したい場合に、任意のDynpro番号を指定します。
イベントとは、ユーザによるキーボードの操作、マウスのクリックなどによって、システムに何らかの変更が加えられシステムの状態が変化する出来事のことです。
実行可能プログラムとは、それ単体で実行することが可能なプログラムのこと。
ABAPでは、他のプログラムから呼び出されて利用することを前提にしたプログラムなども存在しており、それらはそれ単体で利用することができません。
ABAPのプログラム分類については以下の記事で詳しく解説しておりますので、合わせてご覧ください。
モーダルダイアログボックスとして定義する場合
SELECTION-SCREEN BEGIN OF SCREEN (Dynpro番号) AS WINDOW.
・・・・
SELECTION-SCRENN END OF SCREEN (Dynpro番号) AS WINDOW.
SELECTION-SCREEN BEGIN OF SCREEN (Dynpro番号) AS WINDOW. ・・・・ SELECTION-SCRENN END OF SCREEN (Dynpro番号) AS WINDOW.
モーダルダイアログボックスとは、簡単に言えば「ポップアップ画面」のこと。
F4ヘルプなどで呼び出され、メインの選択画面の前面に出てくるようなイメージでOK。ただし、モーダルダイアログボックスという場合は、その画面が表示されている間、他の画面を操作できなくなるという点に注意です。
モーダルダイアログボックスを定義する場合は、上記のようにオプションとして「AS WINDOW」と記述するだけ。
定義した選択画面は、「CALL SELECTION-SCREEN命令」で呼び出して利用します。
従属画面として定義する場合
SELECTION-SCREEN BEGIN OF SCREEN (Dynpro番号) SUBSCREEN.
・・・・
SELECTION-SCRENN END OF SCREEN (Dynpro番号) SUBSCREEN.
SELECTION-SCREEN BEGIN OF SCREEN (Dynpro番号) SUBSCREEN. ・・・・ SELECTION-SCRENN END OF SCREEN (Dynpro番号) SUBSCREEN.
従属画面とは、ある画面の項目値に応じて表示したりしなかったりする画面です。(別の言い方をすれば、画面の中に埋め込まれる画面のようなもの。)
メイン画面の入力値に応じて、異なる画面を選択したい場合に用います。
従属画面として定義した画面は、CALL SELECTION-SCREEN命令で呼び出すことができないという点に注意が必要です。
選択画面の呼び出し:CALL SELECTION-SCREEN
定義した選択画面を「CALL SELECTION-SCREEN」命令で呼び出す方法について。
CALL SELECTION-SCREEN (Dynpro番号).
モーダルダイアログボックス をどのタイミングで表示するかどうかを制御することが可能になります。
レイアウトの定義
ここからはレイアウトの定義として利用する方法を解説していきます。
レイアウト定義は、下記赤枠を定義していくようなイメージです。複数の入力項目を1つにまとめたり、線を引いたり、スペースを空けたり。または、入力項目の表題を定義したりなど。
もしレイアウトの定義をせず(SELECTION-SCREEN命令を使わずに)、PARAMETERS命令だけで入力項目を作成するとこんな感じです。
上記二つの画像を見比べるとお分かりかと思いますが、SELECTION-SCREENを用いてレイアウトを定義する場合と、そうでない場合とでレイアウトが異なります。
SELECTION-SCREEN命令を用いて枠を作ったり表題の設定したりする方法について解説していきます。
枠の作り方:BLOCK
SELECTION-SCREEN BEGIN OF BLOCK (ブロック名)
・・・
SELECTION-SCREEN END OF BLOCK (ブロック名).
ここでいう「ブロック」とは、これまで見てきた画面でいうと以下の赤枠囲まれた部分を指します。
BLOCKオプションを利用することで入力項目をグループ化することができます。
ブロック単位で何かしらの制御を行うことが可能になるため非常に便利なオプションです。
基本的にはこのオプションはほぼ必ず利用しますので必ず処理内容を理解しておきましょう。
SELECTION-SCREEN BEGIN OF BLOCK B1. PARAMETERS : A TYPE C, B TYPE C. SELECTION-SCREEN END OF BLOCK B1.
ただこれだけでは、ブロックを定義しただけで、見た目上の変化は起こりません。
以下の画像の通り、項目Aと項目Bを囲むような線は引かれていません。
画面上、どこからどこまでが1つのブロックかを分かりやすくするには、WITH FRAMEオプションを利用します。
枠に囲い線をつける:WITH FRAME
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME
・・・
SELECTION-SCREEN END OF BLOCK B1.
これは、定義したブロックがどこからどこまでなのか?を分かりやすくするためのオプションです。
もちろんこのオプションを利用しなくてもブロック定義はされている状態ですが、どこからどこまでがB1の画面なのかがわからなくなりますので、WITH FRAMEとBLOCKオプションは基本的にセットで利用するのが良いでしょう。
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME. PARAMETERS : A TYPE C, B TYPE C. SELECTION-SCREEN END OF BLOCK B1.
上記サンプルコードを実行した結果がこちらです。
全体に枠線が引かれます。
枠の表題を付ける:TITEL
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-S01
・・・
SELECTION-SCREEN END OF BLOCK B1.
TITLEオプションを利用することで、ブロックに表題を付けることができます。
TITLEの後には、テキストシンボルか、最大8文字の項目名を指定します。
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-S01 . PARAMETERS : A TYPE C, B TYPE C. SELECTION-SCREEN END OF BLOCK B1.
上記サンプルコードを実行した結果がこちら。
枠線の外側にブロックのタイトル「テスト」という文字が出力されます。
線を引く:ULINE
SELECTION-SCREEN ULINE.
ULINEオプションを利用すると、選択画面上に線を引くことができます。
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-S01. SELECTION-SCREEN ULINE. PARAMETERS : A TYPE C, B TYPE C. SELECTION-SCREEN END OF BLOCK B1.
上記サンプルコードを実行した結果がこちら。
このオプションはあくまでも見た目の変更ですので、利用頻度は高くありません。
文字を出力する:COMMENT
COMMENTオプションを利用することで、任意の文字列を出力させることができます。
SELECTION-SCREEN COMMENT /10(13) TEXT-S02. SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-S01. SELECTION-SCREEN ULINE. PARAMETERS :A TYPE C, B TYPE C. SELECTION-SCREEN END OF BLOCK B1.
上記サンプルコードを実行した結果がこちら。
任意の場所に、コメントを付与することができます。
ABAPを1から学習したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!