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

Popular posts from this blog

MDG Derivation (BADI)

MDG Validation (Using BADI)

SAP MDG Process Modelling