Dynamic Select Query to get data
TABLES: dd03l.
**********************************************************************
* Selection Screen
**********************************************************************
PARAMETERS:
p_table TYPE tabname,
p_row TYPE sy-dbcnt.
SELECT-OPTIONS: s_field FOR dd03l-fieldname NO INTERVALS.
**********************************************************************
* Data Declaration
**********************************************************************
DATA:
lo_dyn_data TYPE REF TO data,
lv_field TYPE char24,
lt_tab TYPE TABLE OF char24,
lv_success TYPE abap_bool,
lo_structure TYPE REF TO cl_abap_structdescr,
lo_tabletype TYPE REF TO cl_abap_tabledescr,
lt_comp TYPE cl_abap_structdescr=>component_table,
ls_comp LIKE LINE OF lt_comp.
FIELD-SYMBOLS:
<lt_tab> TYPE ANY TABLE,
<lt_table> TYPE ANY TABLE.
* Looping on select-options range and getting the low range to internal table.
LOOP AT s_field.
SELECT tabname, fieldname FROM dd03l INTO TABLE @DATA(lt_field) WHERE tabname = @p_table AND fieldname = @s_field-low.
IF sy-subrc = 0.
lv_field = s_field-low.
APPEND lv_field TO lt_tab.
ls_comp-name = lv_field.
ls_comp-type ?= cl_abap_datadescr=>describe_by_name( 'CHAR50' ).
APPEND ls_comp TO lt_comp.
CLEAR lv_field.
CLEAR ls_comp.
ENDIF.
ENDLOOP.
FIELD-SYMBOLS: <fs_table> TYPE ANY TABLE.
IF p_row < 0.
MESSAGE s015(zin_message_cls) WITH p_row DISPLAY LIKE 'E'.
ELSE.
DATA(lo_table) = NEW zin_cl_tab_data_fetch_dyn( ).
CALL METHOD lo_table->validate_table
EXPORTING
iv_tab = potable
IMPORTING
ev_val = lv_success.
IF lv_success = abap_true.
lo_structure = cl_abap_structdescr=>create( lt_comp ).
lo_tabletype = cl_abap_tabledescr=>create( p_line_type = lo_structure ).
CREATE DATA lo_dyn_data TYPE HANDLE lo_tabletype.
ASSIGN lo_dyn_data->* TO <fs_table>.
IF <fs_table> IS ASSIGNED.
SELECT (lt_tab) FROM (p_table) INTO CORRESPONDING FIELDS OF TABLE <fs_table> UP TO p_row ROWS.
IF sy-subrc = 0.
cl_demo_output=>display_data(
EXPORTING
value = <fs_table>
name = | Table : { p_table } |
).
ENDIF.
ENDIF.
ENDIF.
ENDIF.
Comments
Post a Comment