12-08-2009 5:47 PM
Hi,
I need help in creating dynamic selections.
I am working on a report program. My requirement is to generate the dynamic selection fields based on the
name of table.
There is a selection parameter as table name. When user enter table name and hit enter first 3 fields in the
table should appear as select-options below the table name.
Am not able to figure it out, plz help me.
Thanks,
12-08-2009 7:44 PM
Are the possible values of the table name limited? Other words, could it be just several tables? If not I would suggest write a FM to call popup or regular screen where you can do dynamic fields assignments like in SE16.
thanks
12-08-2009 7:39 PM
This is sort of dynamic, but not 100%. But still maybe useful to you. Here this program, excepts the table name, user hits F8, and a selection screen in a window will then appear with the first 20 fields of the table as SELECT-OPTIONS. Of course, you could expand this to allow for more fields.
DATA: lt_dd03p TYPE TABLE OF dd03p.
DATA: ls_dd03p LIKE LINE OF lt_dd03p.
DATA: lv_field01 TYPE string.
DATA: lv_field02 TYPE string.
DATA: lv_field03 TYPE string.
DATA: lv_field04 TYPE string.
DATA: lv_field05 TYPE string.
DATA: lv_field06 TYPE string.
DATA: lv_field07 TYPE string.
DATA: lv_field08 TYPE string.
DATA: lv_field09 TYPE string.
DATA: lv_field10 TYPE string.
DATA: lv_field11 TYPE string.
DATA: lv_field12 TYPE string.
DATA: lv_field13 TYPE string.
DATA: lv_field14 TYPE string.
DATA: lv_field15 TYPE string.
DATA: lv_field16 TYPE string.
DATA: lv_field17 TYPE string.
DATA: lv_field18 TYPE string.
DATA: lv_field19 TYPE string.
DATA: lv_field20 TYPE string.
DATA: lv_sgrp TYPE string.
DATA: lv_field_name TYPE string.
DATA: lv_field_number TYPE numc2.
FIELD-SYMBOLS: <lv_field> TYPE ANY.
Regards,
Rich Heilman
Splitting source code
Edited by: Rich Heilman on Dec 8, 2009 2:39 PM
Edited by: Rich Heilman on Dec 8, 2009 2:40 PM
12-08-2009 7:40 PM
Part 2
PARAMETERS: p_table TYPE ddobjname DEFAULT 'T000'.
SELECTION-SCREEN BEGIN OF SCREEN 500 AS WINDOW.
SELECT-OPTIONS: s_fld01 FOR (lv_field01) MODIF ID f01.
SELECT-OPTIONS: s_fld02 FOR (lv_field02) MODIF ID f02.
SELECT-OPTIONS: s_fld03 FOR (lv_field03) MODIF ID f03.
SELECT-OPTIONS: s_fld04 FOR (lv_field04) MODIF ID f04.
SELECT-OPTIONS: s_fld05 FOR (lv_field05) MODIF ID f05.
SELECT-OPTIONS: s_fld06 FOR (lv_field06) MODIF ID f06.
SELECT-OPTIONS: s_fld07 FOR (lv_field07) MODIF ID f07.
SELECT-OPTIONS: s_fld08 FOR (lv_field08) MODIF ID f08.
SELECT-OPTIONS: s_fld09 FOR (lv_field09) MODIF ID f09.
SELECT-OPTIONS: s_fld10 FOR (lv_field10) MODIF ID f10.
SELECT-OPTIONS: s_fld11 FOR (lv_field11) MODIF ID f11.
SELECT-OPTIONS: s_fld12 FOR (lv_field12) MODIF ID f12.
SELECT-OPTIONS: s_fld13 FOR (lv_field13) MODIF ID f13.
SELECT-OPTIONS: s_fld14 FOR (lv_field14) MODIF ID f14.
SELECT-OPTIONS: s_fld15 FOR (lv_field15) MODIF ID f15.
SELECT-OPTIONS: s_fld16 FOR (lv_field16) MODIF ID f16.
SELECT-OPTIONS: s_fld17 FOR (lv_field17) MODIF ID f17.
SELECT-OPTIONS: s_fld18 FOR (lv_field18) MODIF ID f18.
SELECT-OPTIONS: s_fld19 FOR (lv_field19) MODIF ID f19.
SELECT-OPTIONS: s_fld20 FOR (lv_field20) MODIF ID f20.
SELECTION-SCREEN END OF SCREEN 500 .
Regards,
Rich Heilman
Edited by: Rich Heilman on Dec 8, 2009 2:41 PM
Edited by: Rich Heilman on Dec 8, 2009 2:41 PM
12-08-2009 7:41 PM
Part 3
AT SELECTION-SCREEN OUTPUT.
IF sy-dynnr = '0500'.
CALL FUNCTION 'DDIF_TABL_GET'
EXPORTING
name = p_table
TABLES
dd03p_tab = lt_dd03p.
CLEAR lv_field_number.
LOOP AT lt_dd03p INTO ls_dd03p.
lv_field_number = lv_field_number + 1.
CONCATENATE 'LV_FIELD' lv_field_number INTO lv_field_name.
ASSIGN (lv_field_name) TO <lv_field>.
IF sy-subrc = 0.
CONCATENATE ls_dd03p-tabname ls_dd03p-fieldname INTO <lv_field> SEPARATED BY '-'.
ENDIF.
ENDLOOP.
CLEAR lv_field_number .
DO.
lv_field_number = lv_field_number + 1.
CONCATENATE 'F' lv_field_number INTO lv_sgrp.
CONCATENATE 'LV_FIELD' lv_field_number INTO lv_field_name.
ASSIGN (lv_field_name) TO <lv_field>.
IF sy-subrc = 0 .
IF <lv_field> IS INITIAL.
LOOP AT SCREEN.
IF screen-group1 = lv_sgrp.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDDO.
ENDIF.
START-OF-SELECTION.
CALL SELECTION-SCREEN 500 STARTING AT 10 5 ENDING AT 120 30.
* Do all other logic here, and display the report results.
Regards,
Rich Heilman
12-08-2009 7:44 PM
Are the possible values of the table name limited? Other words, could it be just several tables? If not I would suggest write a FM to call popup or regular screen where you can do dynamic fields assignments like in SE16.
thanks
12-08-2009 10:46 PM
Hi Prasad,
check blogs regarding
CALL FUNCTION 'FREE_SELECTIONS_INIT'
Display free selection dialog
CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
Regards,
Clemens