Create Dynamic Selection Screen

By Marcos Munhos, CPM Braxis

Description

This is a demo application to make a dynamic screen in a report.

This change the parameters according a radio button choice: 

1st moment - Click on the radio button Local

-         In the block “Enter Parameters”, we’ll have 2 parameters.

-         The parameter in the block “Path” is named as Local Path and the match code will lead you to a File Open Dialog.

 

2nd moment - Click in the radio button Server

-         In the Enter Parameters, we’ll have just 1 parameter.

 

-         The parameter in the block “Path” is now named as Server Path and the field will be disabled. 

Step by Step Approach:

Create a new report.

 

In the SELECTION SCREEN put all the fields, blocks and parameters necessary, notice that in the radio button have the addiction USER-COMMAND to enable the event AT SELECTION-SCREEN OUTPUT

 

Look that in the Block 2 we have the both parameters p_local and p_sever, at the same time.   

At this time the report is something like this:  

Event AT SELECTION-SCREEN OUTPUT 

In this event you can manipulate all the objects that appears in the screen using LOOP AT SCREEN changing the value of the structure screen the way you want . See below:

All this characteristics in the structure are possible to be changed:

NAME, GROUP1, GROUP2, GROUP3, GROUP4, REQUIRED, INPUT, OUTPUT, INTENSIFIED, INVISIBLE, LENGTH, ACTIVE, DISPLAY_3D, VALUE_HELP, REQUEST, VALUES_IN_COMBO and COLOR. 

Below we have the full source code of our example.
*&---------------------------------------------------------------------*
*& Report  ZDYNAMIC_SCREEN
*&---------------------------------------------------------------------*
REPORT  zdynamic_screen.
* Published at SAPTechnical.com
************************************************************************
* External Tables                                                      *
************************************************************************
TABLES: kna1.
************************************************************************
* Internal Tables                                                      *
************************************************************************
DATA: i_filetable TYPE filetable.
************************************************************************
* Screen Parameters                                                    *
************************************************************************
* Begin - Block 1
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: r_local RADIOBUTTON GROUP rad1 USER-COMMAND flg, "Local
            r_server RADIOBUTTON GROUP rad1 DEFAULT 'X'.     "Server
* Begin - Block 2
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETER: p_local  LIKE rlgrap-filename DEFAULT 'C:\' OBLIGATORY.
PARAMETER: p_server LIKE rlgrap-filename DEFAULT '/default' OBLIGATORY.
* End - Block 2
SELECTION-SCREEN END OF BLOCK b2.
* Begin - Block 3
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
SELECT-OPTIONS: s_kunnr FOR kna1-kunnr, "Customer Number 1
                s_land1 FOR kna1-land1. "Country Key
* End - Block 3
SELECTION-SCREEN END OF BLOCK b3.
* End - Block 1
SELECTION-SCREEN END OF BLOCK b1.
************************************************************************
* At Selection Screen OUTPUT                                           *
************************************************************************
AT SELECTION-SCREEN OUTPUT.
* Check what radiobutton is selected
* Local
  IF r_local = 'X'.
    LOOP AT SCREEN.
      IF "screen-name = 'P_LOCAL'. " OR
         screen-name = '%_P_LOCAL_%_APP_%-TEXT'.
        screen-invisible = '0'.
        screen-input = '1'.
        MODIFY SCREEN.
      ELSEIF screen-name = 'P_SERVER'. " OR
             screen-name = '%_P_SERVER_%_APP_%-TEXT'.
        screen-invisible = '1'.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
* Server
  ELSE.
    LOOP AT SCREEN.
      IF screen-name = 'P_SERVER' OR
         screen-name = '%_P_SERVER_%_APP_%-TEXT'.
        screen-invisible = '0'.
        screen-input = '0'.
        MODIFY SCREEN.
      ELSEIF screen-name = 'P_LOCAL' OR
             screen-name = '%_P_LOCAL_%_APP_%-TEXT' OR
             screen-name = '%_S_KUNNR_%_APP_%-TEXT' OR
             screen-name = '%_S_KUNNR_%_APP_%-OPTI_PUSH' OR
             screen-name = 'S_KUNNR-LOW' OR
             screen-name = '%_S_KUNNR_%_APP_%-TO_TEXT' OR
             screen-name = 'S_KUNNR-HIGH' OR
             screen-name = '%_S_KUNNR_%_APP_%-VALU_PUSH'.             .
        screen-invisible = '1'.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.
************************************************************************
* At Selection Screen ON VALUE REQUEST                                 *
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_local.
  PERFORM filename_local CHANGING p_local.
************************************************************************
START-OF-SELECTION.
************************************************************************
************************************************************************
* Forms                                                                *
************************************************************************
*&---------------------------------------------------------------------*
*&      Form  filename_local
*&---------------------------------------------------------------------*
*&
FORM filename_local CHANGING p_file TYPE rlgrap-filename.
  DATA: vl_rc           TYPE i,
        vl_action       TYPE i.
* Open the File Open Dialog
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      file_filter             = ''
      initial_directory       = 'C:\'
    CHANGING
      file_table              = i_filetable
      rc                      = vl_rc
      user_action             = vl_action
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.
  IF sy-subrc <> 0 OR vl_rc < 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    IF vl_action EQ cl_gui_frontend_services=>action_ok.
      CLEAR p_file.
      READ TABLE i_filetable INDEX 1 INTO p_file.
    ENDIF.
  ENDIF.
ENDFORM.                               " filename_local

Please send us your feedback/suggestions at webmaster@SAPTechnical.COM 

HomeContribute About Us Privacy Terms Of Use • Disclaimer • SafeCompanies: Advertise on SAPTechnical.COM | Post JobContact Us  

Graphic Design by Round the Bend Wizards

footer image footer image