Add buttons with icon to selection screen

The following code demonstrates how to add user defined push buttons which contain icons to a standard report selection screen.Push buttons are used to trigger user functions with in the program to make them interactive with the user. The example below shows how buttons can allow you to dynamically alter a selection screen depending on which button is pressed. But they can be used for many other applications from displaying a window to calling other reports.


*&----------------------------------------------------*
*& Report  ZSSCRBUTTONS2                              *
*&----------------------------------------------------*
*&  Adds buttons to selection screen.                 *
*&  Demonstrates alteration of selection screen layout*
*&  depending on which button is pressed.             *
*&                                                    *
*&  Additional Info:                                  *
*&    TEXT-FY1 = 'Fiscal Year'                        *
*&    Selection text for SO_DATES = 'Date Period'     *
*&----------------------------------------------------*
REPORT  zsscrbuttons2.
TABLES: sscrfields.
DATA: gd_ucomm TYPE sy-ucomm.
SELECTION-SCREEN BEGIN OF BLOCK period WITH FRAME TITLE text-t02.
SELECT-OPTIONS: so_dates FOR sy-datum NO-EXTENSION.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 01(20) text-fy1.  "= Fiscal Year
SELECTION-SCREEN POSITION 33.
PARAMETERS: p_period LIKE qppnp-pabrp.
SELECTION-SCREEN POSITION 36.
PARAMETERS: p_year LIKE qppnp-pabrj.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN PUSHBUTTON  /01(29) but1 USER-COMMAND but1.
SELECTION-SCREEN PUSHBUTTON  /01(29) but2 USER-COMMAND but2.
SELECTION-SCREEN END OF BLOCK period.
************************************************************************
*INITIALIZATION.
INITIALIZATION.
* MOVE 'Fiscal Year' TO BUT1.
  MOVE 'Date Period' TO but2.
  DATA: icon_name TYPE iconname,
        button_text(20) TYPE c,
        quickinfo LIKE smp_dyntxt-quickinfo,
        icon_str(255) TYPE c.
* Setup button 1 (Fiscal year)
  icon_name = 'ICON_ARROW_RIGHT'.    " 'ICON_DISPLAY_MORE'.
  button_text = 'Fiscal Year'.
  CONCATENATE button_text text-akt
              INTO quickinfo
              SEPARATED BY space.
  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      name                        = icon_name
      text                        = button_text
      info                        = quickinfo
*       ADD_STDINF                  = 'X'
    IMPORTING
      RESULT                      = icon_str
    EXCEPTIONS
      OTHERS                      = 0. "not interested in errors
* place text and icon on button
  but1 = icon_str.
* Setup button 2 (Date period)
  icon_name = 'ICON_ARROW_LEFT'.    " 'ICON_DISPLAY_MORE'.
  button_text = 'Date Period'.
  CONCATENATE button_text text-akt
              INTO quickinfo
              SEPARATED BY space.
  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      name                        = icon_name
      text                        = button_text
      info                        = quickinfo
*       ADD_STDINF                  = 'X'
    IMPORTING
      RESULT                      = icon_str
    EXCEPTIONS
      OTHERS                      = 0. "not interested in errors
* place text and icon on button
  but2 = icon_str.
************************************************************************
*AT SELECTION-SCREEN.
AT SELECTION-SCREEN.
* Check if buttons have been
  IF sscrfields-ucomm EQ 'BUT1'.
    gd_ucomm = 'BUT1'.
  ELSEIF sscrfields-ucomm EQ 'BUT2'.
    gd_ucomm = 'BUT2'.
  ENDIF.
************************************************************************
*AT SELECTION-SCREEN.
AT SELECTION-SCREEN OUTPUT.
  IF gd_ucomm IS INITIAL.
    LOOP AT SCREEN.
      IF screen-name CS 'P_PERIOD' OR
         screen-name CS 'P_YEAR' OR
         screen-name CS 'FY1' OR
         screen-name EQ 'BUT2'.
        screen-active = 0.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ELSEIF gd_ucomm EQ 'BUT1'.
    LOOP AT SCREEN.
      IF screen-name CS 'P_PERIOD' OR
         screen-name CS 'P_YEAR' OR
         screen-name CS 'FY1' OR
         screen-name EQ 'BUT2'.
        screen-active = 1.
        MODIFY SCREEN.
      ENDIF.
      IF screen-name CS 'SO_DATES' OR
         screen-name EQ 'BUT1'.
        screen-active = 0.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ELSEIF gd_ucomm EQ 'BUT2' .
    LOOP AT SCREEN.
      IF screen-name CS 'P_PERIOD' OR
         screen-name CS 'P_YEAR' OR
         screen-name CS 'FY1' OR
         screen-name EQ 'BUT2'.
        screen-active = 0.
        MODIFY SCREEN.
      ENDIF.
      IF screen-name CS 'SO_DATES' OR
         screen-name EQ 'BUT1'.
        screen-active = 1.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.

Related Articles

Adding buttons to an ABAP report selection screen within SAP
Add buttons to Application toolbar of selection screen
Add buttons to dynamically change the selection screen entry fields
ABAP parameter as checkbox plus initiate 'AT selection-screen' EVENT to unselect other checkboxes
Initiate the 'AT selection-screen' EVENT from a checkbox
Dynamically alter a selection screen based on user
SAP dropdown list box for an ABAP report selection screen
Initiate the 'AT selection-screen' EVENT from a LISTBOX within an ABAP report sel screen
ABAP Radiobutton to Initiate the 'AT selection-screen' EVENT on SAP report
ABAP Begin of Block to group selection-screen fields plus add title and frame
Report Selection Screen - Example code and information on various sel screen processing techniques
Selection screen push buttons
F4 search help manually called from report selection screen
Modify Selection Screen(LOOP AT SCREEN)
Restrict select-options to only allow specific restrictions
Radiobutton (inc desc) and entry field on same line of SAP selection screen
Add blank line to SAP report selection screen
Add Tab strip to Selection Screen