【ABAP】PUSHBUTTON(SELECTION-SCREEN命令)の実装を3分で

ABAP

本ページでは、ABAPのSELECTION-SCREEN命令を利用して選択画面上に「押しボタン」を実装する方法を解説します。

押しボタンとは、選択画面に存在する以下のようなボタンのこと。

SAP標準の画面の中には、実は結構多く存在しており、このボタンを設置することで値を入力する以外の様々な動きを画面上で実現することが可能になります。

検索ヘルプをトリガーする押しボタンの例
このページで学べる内容
  • SELECTION-SCREENの基本
  • PUSUBUTTONオプションの利用方法
    • 構文ルール
    • ボタンテキストの表示方法
    • ユーザーコマンドの基本
    • アイコンの表示方法()
  • PUSUBUTTONを利用したサンプルコード

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"

押しボタンにはテキストだけでなく、アイコンを設定することが可能です。例えばこんな感じ。

画像に alt 属性が指定されていません。ファイル名: image.png

実装方法は以下の通り。

*----------------------------------------------------------------------*
*   選択画面
*----------------------------------------------------------------------*

* プッシュボタン(抽出条件)
   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を1から学習したい方のために、ABAPに関わる基本知識を1つのページにまとめました。

こちらの記事では、ABAPを用いて簡単な機能を実装できるようにするための必須知識を解説しております。今、本サイトで一番人気の記事ですので是非合わせてご覧ください。

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