Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

return parameter of a method must be of any table type

Former Member
0 Kudos

I have to make a Dictionary class's method's return parameter type any table !

Is this possible ?

1 ACCEPTED SOLUTION

uwe_schieferstein
Active Contributor

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

2 REPLIES 2

Former Member
0 Kudos

HI,

declare the associate type as STANDARD TABLE.

Check the CL_GUI_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY

for it_outtab declaration

uwe_schieferstein
Active Contributor

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