Dynamic Internal Tables

You want to create an internal table, however you don’t have the required specifications viz., the number of columns and the data type of the fields at design time. This is where we need to know about Dynamic Internal tables. Although you might see some knowledge documents about Dynamic tables in SCN, what I have done here is combining different approaches to create the internal tables dynamically. You will see two approaches to create the dynamic internal tables.

Dynamic Internal tables

  • Tables with variable number of rows & columns which can be defined during runtime only.
  • Some of the attributes which can be set dynamically are

      •  Column position

      •  Column width

      •  Field name of internal table field

      •  Data type of the fields

  • Benefits:

      •  Extremely useful when the number of columns/fields are not known at design time.

      •  Avoids redundancy

    Pre-requisites:

  • Field Symbols

      •  Field symbols are placeholders or symbolic names for other fields.

      •  They do not physically reserve space for a field, but point to its 

               contents.

              FIELD-SYMBOLS: TYPE STANDARD TABLE

  • Data references

           •  Data references are pointers to data objects.

      •  Used to create data objects dynamically.

              DATA: dref1 TYPE REF TO data,                  

                     ASSIGN dref1->* TO .

  

Example scenario:

    

To illustrate the usage of Dynamic Internal tables, I have given below a requirement which I came across

    in my project.

  • Select configuration values from various tables (see fig. below) and send it to the partner. The number of tables is not defined at design time. The initial requirement suggested a count of more than 50 tables.   

  • The output layout was fixed as given below

  • Config/Code Values extract:

  • Logic used:
           Data declaration

          •  p_struc            TYPE REF TO cl_abap_structdescr

          •  p_struc_table   TYPE REF TO cl_abap_tabledescr

          •  ls_comp          TYPE              abap_componentdescr

          •  lt_comp           TYPE              cl_abap_structdescr=>component_table

          •  lv_integer         TYPE              I

    Code Snippet

          •  ls_comp-name = wa_object-tab1field [ Table Field ]

          •  lv_integer = ’40‘

          •  ls_comp-type = cl_abap_elemdescr=>get_c( lv_integer )

          •  APPEND ls_comp TO lt_comp

          •  p_struc = cl_abap_structdescr=>create( p_components =  lt_comp ) [ Create Structure ]

                •  p_struc_table = cl_abap_tabledescr=>create( p_struc ) [ Create Table ]

                •  CREATE DATA gt_table TYPE HANDLE p_struc_table. [ Create a data reference ]

                •  ASSIGN gt_table->* TO . [ Assign the contents of the data object ]

              

    Now, I’ll describe the other method to create dynamic internal tables.

  • Dynamic table can also be created using the ALV control lvc_s_fcat
  • Some of the fields contained in this structure are shown in the following figure

  • However, this method has a limitation of 36 dynamic internal tables. Otherwise, it gives a short 

       dump error GENERATE_SUBPOOL_DIR_FULL

    Usage of ALV Control:

        Data declaration

g_container              TYPE scrfname VALUE ‘Container Control on Screen‘

            g_grid                      TYPE REF TO cl_gui_alv_grid

            g_custom_container TYPE REF TO cl_gui_custom_container

            i_alv_cat                  TYPE TABLE OF lvc_s_fcat

            catalog                    TYPE lvc_t_fcat

            table_name              TYPE dd02l-tabname

            new_table                TYPE ref to data

            layout                      TYPE lvc_s_layo

   FIELD-SYMBOLS: TYPE STANDARD TABLE

    Populate the container

          CREATE OBJECT g_custom_container EXPORTING container_name =  g_container

                CREATE OBJECT g_grid EXPORTING i_parent = g_custom_container

Field catalog

CALL FUNCTION ‘LVC_FIELDCATALOG_MERGE’

EXPORTING

i_structure_name         = table_name

CHANGING

ct_fieldcat                   = catalog

EXCEPTIONS

inconsistent_interface  = 1

program_error             = 2

OTHERS                    = 3.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

    Create Dynamic table & assign to Field Symbol

               CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

it_fieldcatalog                     = i_alv_cat

IMPORTING

ep_table                             = new_table

EXCEPTIONS

generate_subpool_dir_full     = 1

OTHERS                            = 2.

ASSIGN new_table->* TO .

         Fetch data

                SELECT * FROM table_name INTO CORRESPONDING FIELDS OF TABLE

ALV Display

                     CALL METHOD g_grid->set_table_for_first_display

EXPORTING

i_structure_name   = table_name

is_layout               = layout

CHANGING

it_outtab                =

it_fieldcatalog         = i_alv_cat.

Thanks,

    Akshay Salunke

New NetWeaver Information at SAP.com

Very Helpfull

 

 

User Rating: Be the first one !

Comments (0)
Add Comment