ABAP/SELECTION-SCREEN
選択画面?のレイアウトを作ったりいじったりする命令。
概要 †
用法 †
基本的に、選択画面?で色々やろうと思ったら、PARAMETERSとSELECT-OPTIONSとこの命令になる。
Dynproでは各パーツをレイアウトエディタで作って調整するが、選択画面?においては、この命令なくては成立しないくらい重要な命令。
凝ったことをやるならDynproで組めよという話になるが、「そこまででもないけど、あんまり見た目がプアなのもねぇ」って場合も多いので、使う機会は多い。
サンプル(選択画面の登録) †
Dynproとしての選択画面の登録 †
SELECTION-SCREEN BEGIN OF SCREEN (Dynpro番号) TITLE (タイトル)
これが最もよくある使い方かと思う。
タイトルは、テキストシンボルを使うのがセオリー。
SELECTION-SCREEN BEGIN OF SCREEN (Dynpro番号) AS WINDOW
モーダルダイアログボックスとして使う場合。
SELECTION-SCREEN BEGIN OF SCREEN 9000 TITLE TEXT-010 AS WINDOW. PARAMETERS P_UNAME TYPE SY-UNAME. SELECTION-SCREEN END OF SCREEN 9000.
CALL SELECTION-SCREEN '9000' STARTING AT 10 10.
こんな感じで予め定義しておき、CALL SELECTION-SCREEN?命令で呼び出す。
従属画面としての選択画面の登録 †
SELECTION-SCREEN BEGIN OF SCREEN (Dynpro番号) AS SUBSCREEN SELECTION-SCREEN END OF SCREEN (Dynpro番号).
「NO INTERVALS」オプションはSELECT-OPTIONSと一緒、「NESTING LEVEL n」オプションはnに0-4を指定しタブストリップを使用する際のオプション。
サンプル(選択画面のレイアウト) †
空白行の挿入 †
SELECTION-SCREEN SKIP.
この記述だと1行飛ばし、行数指定する場合は下記となる。
SELECTION-SCREEN SKIP n.
nには普通の数値を指定し、ブランク行を入れたいときに。
キュッと固めたりゆとりを持たせたり、それだけで人間工学的や与える印象が違うもの。
区切り線の描画 †
SELECTION-SCREEN ULINE /(ポジション) (長さ).
スラッシュ以降は省略可、省略した場合はフルで線が引かれる。
SELECTION-SCREEN ULINE MODIF ID (修正グループID).
修正グループを割り当てることでMODIFY SCREEN?命令で変更できるんだとか。
あまり使わない気もするが、他の選択画面の項目を変更しても線だけ残りっぱなしになっちゃうから消すとか?
他のオプションでも利用可能な記述。
こんな感じ。
SELECTION-SCREEN ULINE. SELECTION-SCREEN ULINE /1(50).
テキストの表示 †
※ポジションと長さの指定とMODIF IDについては上記のULINEと同じ使い方なので割愛
SELECTION-SCREEN COMMENT (テキスト) FOR FIELD (選択項目).
テキストを、選択画面の項目の見出しとして定義する場合。
SELECTION-SCREEN COMMENT (テキスト) VISIBLE LENGTH (長さ).
定義長で出してしまうと長過ぎる場合に、表示長を調整できる。
実際の書き方は、こんな感じ。
SELECTION-SCREEN COMMENT /1(50) comm1 MODIF ID mg1.
押しボタン †
位置と長さの指定、MODIF ID、VISIBLE LENGTHについては上記と同様のため割愛するが、テキストの長さによってVISIBLE LENGTHを調整すること。
SELECTION-SCREEN PUSHBUTTON (ボタンのテキスト)
ちなみに、汎用モジュールICON_CREATEで表示するテキストやアイコンを作ることができる。
動きはテーブルICONTを検索して補足情報を付与する等シンプルなので、読んでみる方が早い。
また、ボタンだけ作っても意味がないので、「ボタンが押されたらxxxをする」という動きが必要となるため、機能コードを割り当てる。
SELECTION-SCREEN PUSHBUTTON 2(10) W_DESC3 USER-COMMAND UCOM4 VISIBLE LENGTH 8.
これにより、ボタンが押されるとAT SELECTION-SCREENがトリガされる。
USER COMMANDと書くが、AT USER-COMMANDじゃなくてAT SELECTION-SCREEN。
同じ行に色々な要素を入れる †
標準・アドオンを問わず、同じ行に2つ以上の入力項目があったりラジオボタンがあったりする選択画面?も多いが、それを実現するための命令。
SELECTION-SCREEN BEGIN OF LINE. PARAMETERS : P_KUNNR TYPE KNA1-KUNNR. SELECTION-SCREEN POSITION 30. ... SELECTION-SCREEN END OF LINE.
こんな感じ。
この書き方をしてPARAMETERSを宣言してもテキストが表示されないので、上述の「SELECTION-SCREEN COMMENT」を使う。
選択画面の中にブロックを設ける †
SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME (テキスト)
...
SELECTION-SCREEN END OF BLOCK B01.
単に見た目だけをまとめるだけでなく、ここで定義したブロックに対してAT SELECTION-SCREEN ON BLOCK (ブロック名)というイベントブロックが定義できる。
例えば、会社コードと管理領域のように相関関係のある項目はソレ自体だけでは必須チェックくらいしかできず相関チェックができないが、かといって色々とAT SELECTION-SCREENに詰め込みすぎるとややこしくなるため、住み分けた方がわかりやすかっ
たりする。
タブを作る †
選択画面?にもタブストリップが定義できる!・・・が、あまり凝ったことをやるなら普通にDynproを組んだ方が。。。という話もある。
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN. PARAMETERS : P1_STR1 TYPE c LENGTH 10, P1_STR2 TYPE c LENGTH 10, P1_STR3 TYPE c LENGTH 10. SELECTION-SCREEN END OF SCREEN 100. SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN. PARAMETERS : P2_STR1 TYPE c LENGTH 10, P2_STR2 TYPE c LENGTH 10, P2_STR3 TYPE c LENGTH 10. SELECTION-SCREEN END OF SCREEN 200. SELECTION-SCREEN BEGIN OF SCREEN 300 AS SUBSCREEN. SELECTION-SCREEN PUSHBUTTON 2(10) W_DESC3 USER-COMMAND UCOM4 visible length 8. SELECTION-SCREEN END OF SCREEN 300. SELECTION-SCREEN : BEGIN OF TABBED BLOCK mytab FOR 5 LINES, TAB (20) W_DESC1 USER-COMMAND UCOM1 DEFAULT SCREEN 100, TAB (20) W_DESC2 USER-COMMAND UCOM2 DEFAULT SCREEN 200, TAB (20) W_DESC4 USER-COMMAND UCOM3 DEFAULT SCREEN 300, END OF BLOCK mytab.
こんな感じで組むと、3つタブのあるタブストリップが定義され、普通のDynproのように切り替えて利用することができる。
GUIステータスなしでメニューにボタンを追加する †
TABLES : SSCRFIELDS.
まず、このようにTABLESでSSCRFIELDSが宣言されていることが条件で、次に選択画面?が表示される前(INITIALIZATIONでよい)に、
SSCRFIELDS-FUNCTXT_01 = '1st'. SSCRFIELDS-FUNCTXT_02 = '2nd'.
このように、宣言したSSCRFIELDSの項目FUNCTXT_0nにボタンのテキストを設定する。
そうすると、メニューにボタンが有効化されるので、
SELECTION-SCREEN FUNCTION KEY n.
この形の命令で、nには1-5までの数字を割り当てる。
そうすると、nで指定した数値とリンクして、「FC0n」という機能コードが有効になる。
この例では、実行ボタンの右隣に「1st」や「2nd」というボタンが追加され、それらを押下すると「FC01」や「FC02」という機能コードがトリガされることとなる。
サンプル(その他の選択画面からのエレメントの使用) †
SELECTION-SCREEN INCLUDE ...
いくつか派生はあるが、基本的にはこんな感じで書いて、文字通りIncludeする。
使い回しをしたいシーンは然程多くはないかもしれないが、複数の画面で入力項目を共有できるというメリットはある。
SELECTION-SCREEN INCLUDE PARAMETERS P_KUNNR.
PARAMETERSのInclude。
SELECTION-SCREEN INCLUDE SELECT-OPTIONS S_KUNNR.
SELECT-OPTIONSSのInclude。
SELECTION-SCREEN INCLUDE COMMENT xxx
テキスト等のInclude。
SELECTION-SCREEN INCLUDE PUSHBUTTON xxx
ボタンのInclude。
SELECTION-SCREEN INCLUDE BLOCKS xxx
ブロックのInclude。
サンプル(論理データベースの選択画面) †
論理データベースでの宣言。
通常の記述とは異なるので注意・・・といっても、今となっては論理データベースを新たに拵えるってこともないか。
標準選択画面のバージョン †
実際の論理データベースKDFより。
SELECTION-SCREEN BEGIN OF VERSION 900 TEXT-900. SELECTION-SCREEN EXCLUDE SELECT-OPTIONS: KD_AUGDT. SELECTION-SCREEN END OF VERSION 900.
項目選択 †
こちらも、KDFより。
SELECTION-SCREEN FIELD SELECTION FOR TABLE LFA1.
FOR NODE xxxの記述法もあり。
動的選択 †
同じく、KDFより。
SELECTION-SCREEN DYNAMIC SELECTIONS FOR TABLE BSIK.
ここで宣言しておくと、動的選択で選べる模様。
上記と同じく、FOR NODEが利用可能。
その他 †
選択画面の定義自体に関連する命令は、PARAMETERSとSELECT-OPTIONSがある。
その他の画面処理に関連する命令は、SET SCREEN、CALL SCREEN、SET PF-STATUS、[[GET PF-STA
TUS>ABAP/GET PF-STATUS]]、SET TITLEBAR、LOOP AT SCREEN、MODIFY SCREEN?、[[SUPPRESS
DIALOG>ABAP/SUPPRESS DIALOG]]、[[SET CURSOR>ABAP/SET CURSOR]]、[[GET CURSOR>ABAP/GET CURSOR]]、[[SET HOLD DATA>ABAP/SET HOLD DATA]]、[[CONTROLS>ABAP/
CONTROLS]]、REFRESH CONROLなどがある。
コメントはありません。 Comments/ABAP/SELECTION-SCREEN?