03-10-2009 3:37 PM
I have to make a Dictionary class's method's return parameter type any table !
Is this possible ?
03-10-2009 9:20 PM
Hello Trivka
You cannot use generic types for RETURNING parameters. However, you can hide the generic table type using data objects. Have a look at sample report ZUS_SDN_ABAP_OO_RETURN_PARAM.
*&---------------------------------------------------------------------*
*& Report ZUS_SDN_ABAP_OO_RETURN_PARAM
*&
*&---------------------------------------------------------------------*
*& Thread: return parameter of a method must be of any table type
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="1265771"></a>
*&---------------------------------------------------------------------*
REPORT zus_sdn_abap_oo_return_param.
*----------------------------------------------------------------------*
* CLASS lcl_myclass DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_myclass DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
** select_from
** RETURNING value(rt_data) TYPE any table,
" NOTE: Does not work => syntax error
select_from_db
IMPORTING
value(id_tabname) TYPE tabname
RETURNING value(rdo_data) TYPE REF TO data.
ENDCLASS. "lcl_myclass DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_myclass IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_myclass IMPLEMENTATION.
** METHOD select_from.
**
** ENDMETHOD. "select_from
METHOD select_from_db.
" define local data
FIELD-SYMBOLS:
<lt_itab> TYPE table.
CREATE DATA rdo_data TYPE STANDARD TABLE OF (id_tabname).
ASSIGN rdo_data->* TO <lt_itab>.
SELECT * FROM (id_tabname) INTO TABLE <lt_itab>
UP TO 100 ROWS.
ENDMETHOD. "select_from_db
ENDCLASS. "lcl_myclass IMPLEMENTATION
DATA: gt_knb1 TYPE STANDARD TABLE OF knb1,
gs_knb1 TYPE knb1,
gdo_data TYPE REF TO data,
gd_tabname TYPE tabname.
FIELD-SYMBOLS: <gt_itab> TYPE table.
START-OF-SELECTION.
gd_tabname = 'KNB1'.
gdo_data = lcl_myclass=>select_from_db( gd_tabname ).
ASSIGN gdo_data->* TO <gt_itab>.
gt_knb1 = <gt_itab>.
LOOP AT gt_knb1 INTO gs_knb1.
WRITE: / gs_knb1-bukrs, gs_knb1-kunnr.
ENDLOOP.
END-OF-SELECTION.
Regards
Uwe
03-10-2009 3:44 PM
HI,
declare the associate type as STANDARD TABLE.
Check the CL_GUI_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
for it_outtab declaration
03-10-2009 9:20 PM
Hello Trivka
You cannot use generic types for RETURNING parameters. However, you can hide the generic table type using data objects. Have a look at sample report ZUS_SDN_ABAP_OO_RETURN_PARAM.
*&---------------------------------------------------------------------*
*& Report ZUS_SDN_ABAP_OO_RETURN_PARAM
*&
*&---------------------------------------------------------------------*
*& Thread: return parameter of a method must be of any table type
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="1265771"></a>
*&---------------------------------------------------------------------*
REPORT zus_sdn_abap_oo_return_param.
*----------------------------------------------------------------------*
* CLASS lcl_myclass DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_myclass DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
** select_from
** RETURNING value(rt_data) TYPE any table,
" NOTE: Does not work => syntax error
select_from_db
IMPORTING
value(id_tabname) TYPE tabname
RETURNING value(rdo_data) TYPE REF TO data.
ENDCLASS. "lcl_myclass DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_myclass IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_myclass IMPLEMENTATION.
** METHOD select_from.
**
** ENDMETHOD. "select_from
METHOD select_from_db.
" define local data
FIELD-SYMBOLS:
<lt_itab> TYPE table.
CREATE DATA rdo_data TYPE STANDARD TABLE OF (id_tabname).
ASSIGN rdo_data->* TO <lt_itab>.
SELECT * FROM (id_tabname) INTO TABLE <lt_itab>
UP TO 100 ROWS.
ENDMETHOD. "select_from_db
ENDCLASS. "lcl_myclass IMPLEMENTATION
DATA: gt_knb1 TYPE STANDARD TABLE OF knb1,
gs_knb1 TYPE knb1,
gdo_data TYPE REF TO data,
gd_tabname TYPE tabname.
FIELD-SYMBOLS: <gt_itab> TYPE table.
START-OF-SELECTION.
gd_tabname = 'KNB1'.
gdo_data = lcl_myclass=>select_from_db( gd_tabname ).
ASSIGN gdo_data->* TO <gt_itab>.
gt_knb1 = <gt_itab>.
LOOP AT gt_knb1 INTO gs_knb1.
WRITE: / gs_knb1-bukrs, gs_knb1-kunnr.
ENDLOOP.
END-OF-SELECTION.
Regards
Uwe