Selection Screen Parameter Text by coding using Function Modules SELECTION_TEXTS_MODIFY.
In the last post Dynamic Parameter Texts in Selection Screen (which was so many weeks ago), we discussed how we can change the selection screen parameter by changing the values of some selection screen specific variables. Enno suggested to use the FM SELECTION_TEXTS_MODIFY to handle the selection screen parameters more easily and in standard way.
Some of the readers also left comment on the previous post about the use of this trick. One scenario I came in my mind: Certain Parameter Texts based on the Radio button selection. E.g. We have some radio buttons like Sales Order, Credit Memo, Debit Memo and so on. Based on this radiobutton selection, we want to display the Date’s parameter text.
This code snippet will realize this scenario using the FM SELECTION_TEXTS_MODIFY.
*&---------------------------------------------------------------------*
*& Report ZTEST_NP_HELPER
*&
*&---------------------------------------------------------------------*
REPORT ztest_np_helper.
*----------------------------------------------------------------------*
* Selection Screen Class definition
*----------------------------------------------------------------------*
CLASS lcl_selscr DEFINITION.
PUBLIC SECTION.
CLASS-DATA:
f_date_text TYPE char30.
CLASS-METHODS:
set_text
IMPORTING
if_name TYPE char8
if_type TYPE char1
if_text TYPE char30,
change_screen.
PRIVATE SECTION.
CLASS-DATA:
t_text TYPE STANDARD TABLE OF rsseltexts.
ENDCLASS. "lcl_selscr DEFINITION
*.... Selection Screen
SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE aaa.
PARAMETERS: p_so RADIOBUTTON GROUP rd1 DEFAULT 'X' USER-COMMAND usr1,
p_cre RADIOBUTTON GROUP rd1,
p_deb RADIOBUTTON GROUP rd1.
PARAMETERS: p_date TYPE datum.
SELECTION-SCREEN: END OF BLOCK blk1.
*.... Initialization
INITIALIZATION.
aaa = 'Select an option to continue'.
*.... At Selection-Screen Output
AT SELECTION-SCREEN OUTPUT.
* text for Radiobuttons
lcl_selscr=>set_text( if_name = 'P_SO'
if_type = 'P' if_text = 'Sales Order' ).
lcl_selscr=>set_text( if_name = 'P_CRE'
if_type = 'P' if_text = 'Credit memo' ).
lcl_selscr=>set_text( if_name = 'P_DEB'
if_type = 'P' if_text = 'Debit memo' ).
* determine the text for the P_DATE
CASE 'X'.
WHEN p_so. lcl_selscr=>f_date_text = 'Sales Order Entry Date'.
WHEN p_cre. lcl_selscr=>f_date_text = 'Credit Memo Entry Date'.
WHEN p_deb. lcl_selscr=>f_date_text = 'Debit Memo Entry Date'.
ENDCASE.
lcl_selscr=>set_text( if_name = 'P_DATE'
if_type = 'P'
if_text = lcl_selscr=>f_date_text ).
* Change the Selection Screen
lcl_selscr=>change_screen( ).
*.... Start of selection
START-OF-SELECTION.
WRITE: 'Date Text', lcl_selscr=>f_date_text.
*----------------------------------------------------------------------*
* Selection Screen Class definition
*----------------------------------------------------------------------*
CLASS lcl_selscr IMPLEMENTATION.
METHOD set_text.
DATA: la_text LIKE LINE OF t_text.
la_text-name = if_name.
la_text-kind = if_type.
la_text-text = if_text.
APPEND la_text TO t_text.
ENDMETHOD. "set_text
METHOD change_screen.
CALL FUNCTION 'SELECTION_TEXTS_MODIFY'
EXPORTING
program = sy-cprog
TABLES
seltexts = t_text.
ENDMETHOD. "change_screen
ENDCLASS. "lcl_selscr IMPLEMENTATION
HI Naimesh,
I used this feature for several INCLUDES, which are in use in several different programs.
If you use a parameter in an include, you will have to specify the parameter text in the program, not in the include.
So I put into each INCLUDE:
parameters: P_par1.
initialization.
clear $t_dtel.
$s_dtel-name = 'P_PAR1'.
$s_dtel-kind = 'P'.
$s_dtel-datenelment = 'VBELN'.
append $s_dtel to $t_dtel.
call function 'SELECTION_TEXTS_MODIFY_DTEL'
exporting program = sy-cprog
tables sel_dtel = $t_dtel
exceptions others = 1.
$t_dtel and $s_dtel have to be defined in another include.
INITIALIZATION section can exist mor than one time in a program…
so it helps me to have in every program the same parameters description.
Only reasonable if there are many programs which need the same include…
_.Enno._
thanks
hello… hapi blogging… have a nice day! just visiting here….
a litlle enhancement: The selection type will be retrieved by method itself:
LCL_SELSCR
Hello Enno,
Thanks for adding the method to make it more dynamic 🙂
Btw, when you use the ABAP_CODE short code, you don’t need to convert HTML symbols to its entity. The short code logic should be able to convert it properly.
Regards,
Naimesh Patel