【ABAP】SELECTION-SCREEN―選択画面作成の基本

ABAP

本ページでは、ABAPの基本である「選択画面」の作り方を説明します。

「選択画面」とはそもそも何?

「選択画面」は何が重要なのか?

コーディングはどうするの?SELECTION-SCREENは何をする命令なの?

このような疑問にお答えします。

選択画面に関する質問はある程度手慣れた開発者でもググって調べることが多くあります。

というのも、運用保守の現場では画面を新規開発することはほぼないのに加えて、新規開発の現場でされ他の現場からの流用で開発できてしまうため、作り方を知らないという人が多いという実態があるためです。

とは言え、いざ画面を作ろうとしたときに全く知識がないのは困りものですし、改修・流用だとしても基礎知識を押さえておくのは重要です。

このページでは、SELECTION-SCREENについて体系的に解説することとします。

SELECTION-SCREEN命令

SELECTION-SCREEN命令は、大きく2つの用法に分けて考える必要があります。

1つが、「選択画面」自体の定義に使う場合。

もう1つが、選択画面の「レイアウト」定義に使う場合です。

まずは、前者の「選択画面自体の定義」から解説します。

「選択画面」の定義

SELECTION-SCREENBEGIN OF SCREEN (Dynpro番号) .

・・・・

SELECTION-SCRENN
END OFSCREEN(Dynpro番号) .

この構文で、選択画面が定義されます。

実行可能プログラムについては「Dynpro番号 1000」の標準選択画面が予め用意されているため、この定義は不要です。

実行可能プログラムにおいては、イベント「AT SELECTION-SCREEN」のタイミングで「Dynpro番号 1000」の標準選択画面が表示されます。

※イベントについてはこちらで詳しく解説しています。

したがって、後述しますがポップアップ画面など別の選択画面を表示する必要がない場合、大体の場合上記の構文は用いません。

※実行可能プログラムについてはこちらのページで解説をしておりますので、お時間があれば合わせてご確認下さい。

モーダルダイアログボックスとして定義する場合

SELECTION-SCREENBEGIN OF SCREEN (Dynpro番号) AS WINDOW.

・・・・

SELECTION-SCRENN
END OFSCREEN(Dynpro番号) AS WINDOW.

モーダルダイアログボックスとは、簡単に言えば「ポップアップ画面」です。

「ポップアップ」画面であり、かつ「その画面が表示されている間、他の画面を操作できなくなる画面」がモーダルダイアログボックスです。

定義した選択画面は、「CALL SELECTION-SCREEN命令」で呼び出すことが可能になります。

従属画面として定義する場合

SELECTION-SCREENBEGIN OF SCREEN (Dynpro番号) SUBSCREEN.

・・・・

SELECTION-SCRENN
END OFSCREEN(Dynpro番号) SUBSCREEN.

従属画面とは、ある画面の項目値に応じて表示したりしなかったりする画面です。

メイン画面の入力値に応じて、異なる画面を選択したい場合に用います。

選択画面の呼び出し

定義した選択画面は、「CALL SELECTION-SCREEN」命令で呼び出します。

例)CALL SELECTION-SCREEN (Dynpro番号).

この命令で、モーダルダイアログボックス/従属画面などをどのタイミングで表示するかどうかを制御することが可能になります。

選択画面を作って、それを呼び出す―。たったこれだけです。

が、実際の利用シーンは圧倒的に「レイアウトの定義」が多いです。

ここからは、レイアウトの定義に用いる「SELECTION-SCREEN」について解説します。

レイアウトの定義

さてここからは、選択画面自体の定義ではなく、「レイアウトの定義」です。

早速ですが、以下の画面を見てみましょう。

よくある画面です。

今から作るのは、この標準選択画面(Dynpro番号 1000)のなかの「初めての選択画面」という枠や、アンダーライン、行間などの設定です。

もしレイアウトの定義をせずに、「入力項目」のみを記述すると・・・

どうでしょうか?

上記二つの画像を見比べるとお分かりかと思いますが、SELECTION-SCREENを用いてレイアウトを定義する場合と、そうでない場合はかなり違いますね。

ここからは、枠の作り方や表題の設定方法について解説します。

枠の作り方(BLOCK)

SELECTION-SCREEN BEGIN OF BLOCK B1 
・・・
SELECTION-SCREEN END OF BLOCK B1.

「~BLOCK B1」 のB1はその選択ブロックの名前です。

B1の部分は、コーディング規約に沿って、分かりやすい名称を用いましょう。

ここで「ブロック」とは、これまで見てきた画面の「枠」で囲まれた部分を指します。

「ブロック」に名前を付けるのは、後からブロック単位の一括制御をかける場合に指定できるようにするためです。

枠に囲い線をつける(WITH FRAME)

SELECTION-SCREEN BEGIN OF BLOCK B1 
WITH FRAME
・・・
SELECTION-SCREEN END OF BLOCK B1.

これは、フレーム(囲い)を付けることでどこからどこまでがその「ブロック」なのかを分かりやすくするためのコードです。

書かなくても、もちろんプログラムは動きます。

が、書いておかないと、どこからどこまでがB1の画面なのかがわからなくなりますので、WITH FRAMEは基本的にセットで利用するのが良いでしょう。

枠の表題を付ける(TITEL)

ブロックに表題を付けることができます。

↓の画面で言う「一般選択」「備忘明細の照会」「自分の登録した伝票の検索」と表示されている部分がこれに相当します。

TITLEの後には、テキストシンボルか、最大8文字の項目名を指定します。

枠を定義する二つの利点

SAP社の公式見解ではありませんが、SAPユーザからの視点と、ABAPを書く側の視点からSELECTION-SCREENを利用することの両面でメリットがあります。

見やすい選択画面が作れる

先ほどの2つの画面を比較すると、圧倒的に「区分けされていたほうが見やすい!!!」ですよね。

入力項目が増えるにつれて、画面は見づらくなっていきます。

イメージしやすいように実際のSAP標準機能「会計伝票一覧照会」の機能を見てみましょう。


4つの選択画面に分かれていることが分かります。

一番上は、ブロックが定義されていませんが、2番目に「一般選択」があり、その次に「備忘明細の照会」、最後に「自分の登録した伝票の検索」ときます。

どこに何を入力するか?

項目横の説明だけでは情報が不足してしまうような場合に、SELECTION-SCREENによる枠分けは有効となってきます。

SELECTION-SCREENを使えば、入力の簡便性を高めることが可能になります。

選択画面(枠)ごと操作可能になる

実際のシステム導入の際には、入力項目が10個以上ある、なんてことはざらにあります。

また、ある項目を入力したらこちらの画面には入力できないようにする(条件必須制御)などのユーザに配慮した制御をかける必要性も発生します。

一つひとつの項目ごとに、制御ロジックをかけることもできますが、そうするとメンテナビリティ(保守性)が落ちてしまいますし、かつコーディングも大変です。

選択画面を同じような項目で区分けしておくと、制御ロジックをその選択画面全体にかけることができ、コーディングも楽、保守性も向上します。

上記の2つの観点から、SELECTION-SCREENによる枠の定義は必須と言えます。

選択基準の作成はこちら

選択画面に表示する項目(選択基準と言います)の定義はこちらのページで解説しています。

是非合わせてお読みください。

タイトルとURLをコピーしました