本ページでは、ABAPのSELECTION-SCREEN命令を利用して選択画面上に「押しボタン」を実装する方法を解説します。
ABAP初心者の方で、SELECTION-SCREENって何?という方は、まずはこちらから。
押しボタンとは、選択画面に存在する以下のようなボタンのこと。
SAP標準の画面の中には、実は結構多く存在しており、このボタンを設置することで値を入力する以外の様々な動きを画面上で実現することが可能になります。
ABAPエンジニアの中でも、意外と知られていない選択画面の実装方法です。是非、最後までご覧ください。
SELECTION-SCRENNの基本
簡単なおさらいから。
SELECTION-SCREEN命令は、選択画面を作ったり、選択画面のレイアウトを変更したりする場合に利用されます。
この画面は、入力欄とチェック欄の2つのブロックに分かれていますが、これはSELECTION-SREEN命令で実装されています。
さらに詳しくしりたいかたは、SELECTION-SRENN命令をご覧ください。
PUSUBUTTONオプションの利用
SELECTION-SREEN命令で、PUSUBUTTONオプションを利用することで、選択画面上にボタンを設置することができます。
構文ルールは次の通り。
SELECTION-SCREEN PUSHBUTTON (テキスト) USER-COMMAND (ユーザーコマンド).
SELECTION-SREENに続けて、「PUSUBUTTON」と記述するだけでボタンが設置されます。
尚、この際(テキスト)の中に表示させたい文字列はテキストシンボル等で指定することも可能です。
SELECTION-SCREEN PUSHBUTTON /1(30) TEXT-S00 USER-COMMAND CP01.
*--------------------------------------------------------------* *Selection-Screen *--------------------------------------------------------------* SELECTION-SCREEN: PUSHBUTTON /1(40) BUTT001 USER-COMMAND BUT1, PUSHBUTTON /1(40) BUTT002 USER-COMMAND BUT2.
ユーザーコマンド:USER-COMMAND
PUSUBUTTONオプションを付けただけでは、実は押しボタンを作成しているだけで、押しボタンを押した際の挙動は全く定義されていません。
そこで、必要となるのがユーザーコマンド(USER-COMMAND)です。押しボタンにあらかじめ「ユーザーコマンド」を割り当てておき、別途このユーザーコマンドが起動されたときのコーディングを行っておく必要があります。
* プッシュボタン押下時の処理 CASE SY-UCOMM. WHEN 'BUT1'. MESSAGE E001(VL) WITH 'ボタン1が押されました'. ENDIF. WHEN 'BUT2'. MESSAGE E001(VL) WITH 'ボタン2が押されました'. ENDIF. ENDCASE.
ボタンを押した際、割り当てたユーザーコマンドはシステム項目 "SY-UCOMM" に代入される仕組みです。CASE文などで、SY-UCOMMの値に応じた分岐を作成して、それに応じた処理をコーディングしておきます。
例えば押しボタンを押したときにポップアップ画面を表示させたり、別の入力画面を表示させたりと可能性は無限大です。
アイコンの付与 "ICON_CREATE"
押しボタンにはテキストだけでなく、アイコンを設定することが可能です。例えばこんな感じ。
実装方法は以下の通り。
*----------------------------------------------------------------------* * 選択画面 *----------------------------------------------------------------------* * プッシュボタン(抽出条件) SELECTION-SCREEN PUSHBUTTON /1(30) BTN001 USER-COMMAND BUT001. * プッシュボタン(変更項目) SELECTION-SCREEN PUSHBUTTON /1(30) BTN002 USER-COMMAND BUT002. *----------------------------------------------------------------------* * 初期処理 *----------------------------------------------------------------------* INITIALIZATION. * アイコン(押しボタン)の付与 * ボタン1 CALL FUNCTION 'ICON_CREATE' EXPORTING NAME = 'ICON_LOCKED' TEXT = '抽出' IMPORTING RESULT = BTN001 EXCEPTIONS OTHERS = 0. * ボタン2 CALL FUNCTION 'ICON_CREATE' EXPORTING NAME = 'ICON_LOCKED' TEXT = '変更' IMPORTING RESULT = BTN002 EXCEPTIONS OTHERS = 0.
アイコン設定は、SAP標準の汎用モジュール「ICON_CREATE」を利用します。
EXPORTINGのNAMEパラメータにはアイコン名を。TEXTパラメータには、ボタン上に表示させたいテキストを指定します。
汎用モジュールの基本的な使い方を知りたい方はこちらの記事をご覧ください。
尚、実装はイベント "INITIALIZATION" に記述します。それ以外の場所に記述した場合、アイコンもテキストも設定されませんので注意しましょう。
イベントって?という方はこちらの記事をチェック。
サンプルコード:PUSUBUTTONを利用した画面制御
今回解説・紹介した知識を組み合わせて作成したソースコードがこちらです。
*----------------------------------------------------------------------* * 選択画面 *----------------------------------------------------------------------* * プッシュボタン(抽出条件) SELECTION-SCREEN PUSHBUTTON /1(30) BTN001 USER-COMMAND BUT001. * プッシュボタン(変更項目) SELECTION-SCREEN PUSHBUTTON /1(30) BTN002 USER-COMMAND BUT002. *----------------------------------------------------------------------* * 初期処理 *----------------------------------------------------------------------* INITIALIZATION. * アイコン(押しボタン)の付与 * ボタン1 CALL FUNCTION 'ICON_CREATE' EXPORTING NAME = 'ICON_LOCKED' TEXT = '抽出' IMPORTING RESULT = BTN001 EXCEPTIONS OTHERS = 0. * ボタン2 CALL FUNCTION 'ICON_CREATE' EXPORTING NAME = 'ICON_LOCKED' TEXT = '変更' IMPORTING RESULT = BTN002 EXCEPTIONS OTHERS = 0. *----------------------------------------------------------------------* * 画面処理 *----------------------------------------------------------------------* AT SELECTION-SCREEN. * プッシュボタン押下時の処理 CASE SY-UCOMM. WHEN 'BUT1'. MESSAGE E001(VL) WITH 'ボタン1が押されました'. ENDIF. WHEN 'BUT2'. MESSAGE E001(VL) WITH 'ボタン2が押されました'. ENDIF. ENDCASE.
ここのコードってどういう意味?という方は本ページを再度読み直してみましょう。
ABAPを1から勉強したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!