2009 Dec 08 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,
2009 Dec 08 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
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
2009 Dec 08 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
2009 Dec 08 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
2009 Dec 08 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
2009 Dec 08 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
2009 Dec 08 10:46 PM
Hi Prasad,
check blogs regarding
CALL FUNCTION 'FREE_SELECTIONS_INIT'
Display free selection dialog
CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
Regards,
Clemens
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |