abap动态内表

This Tutorial details about creation of dynamic internal table with different scenarios

Internal Tables are local tables within a program containing a series of lines having same data type. ABAPTM Open SQL allows single field, range of fields, entire database table or view into an internal table.  

In technical terms Internal table is a dynamic sequential dataset in which all records have the same data structure and a key.  

static internal table can be declared in an ABAPTM program initially, when the structure of the internal table is fixed and known to the user. 

Dynamic internal table is an extension to internal table concept, used when the number of fields is not known at the design time or until the compile time.

Scenario 1:

Display the table of contents in grid format using the dynamic internal table. 

Creating Dynamic internal table 

  PARAMETERS : p_table(10) TYPE C.

  DATA: w_tabname TYPE w_tabname,            

        w_dref TYPE REF TO data,             

        w_grid TYPE REF TO cl_gui_alv_grid. 

  FIELD-SYMBOLS: <t_itab> TYPE ANY TABLE. 

  w_tabname = p_table. 

  CREATE DATA w_dref TYPE TABLE OF (w_tabname).

  ASSIGN w_dref->* TO <t_itab>.

 Populating Dynamic internal table 

  SELECT *

    FROM (w_tabname) UP TO 20 ROWS

    INTO TABLE <t_itab>.

 Displaying dynamic internal table using Grid. 

  CREATE OBJECT w_grid

    EXPORTING i_parent = cl_gui_container=>screen0. 

  CALL METHOD w_grid->set_table_for_first_display

    EXPORTING

      i_structure_name = w_tabname

    CHANGING

      it_outtab        = <t_itab>. 

  CALL SCREEN 100.

 Scenario 2: 

Create a dynamic internal table with the specified number of columns. 

 Creating Dynamic internal table

TYPE-POOLS: slis.

 FIELD-SYMBOLS: <t_dyntable> TYPE STANDARD TABLE,  “ Dynamic internal table name

               <fs_dyntable>,                     “ Field symbol to create work area

               <fs_fldval> type any.              “ Field symbol to assign values 

PARAMETERS: p_cols(5) TYPE c.                     “ Input number of columns

DATA:   t_newtable TYPE REF TO data,

        t_newline  TYPE REF TO data,

        t_fldcat   TYPE slis_t_fldcat_alv,

        t_fldcat   TYPE lvc_t_fcat,

        wa_it_fldcat TYPE lvc_s_fcat,

        wa_colno(2) TYPE n,

        wa_flname(5) TYPE c. 

* Create fields .

  DO p_cols TIMES.

    CLEAR wa_it_fldcat.

    move sy-index to wa_colno.

    concatenate 'COL'

                wa_colno

           into wa_flname.

    wa_it_fldcat-fieldname = wa_flname.

    wa_it_fldcat-datatype = 'CHAR'.

    wa_it_fldcat-intlen = 10.

    APPEND wa_it_fldcat TO t_fldcat.

  ENDDO. 

* Create dynamic internal table and assign to FS

  CALL METHOD cl_alv_table_create=>create_dynamic_table

    EXPORTING

      it_fieldcatalog = t_fldcat

    IMPORTING

      ep_table        = t_newtable. 

  ASSIGN t_newtable->* TO <t_dyntable>. 

* Create dynamic work area and assign to FS

  CREATE DATA t_newline LIKE LINE OF <t_dyntable>.

  ASSIGN t_newline->* TO <fs_dyntable>.

Populating Dynamic internal table 

  DATA: fieldname(20) TYPE c.

  DATA: fieldvalue(10) TYPE c.

  DATA: index(3) TYPE c. 

  DO p_cols TIMES. 

    index = sy-index.

    MOVE sy-index TO wa_colno.

    CONCATENATE 'COL'

                wa_colno

           INTO wa_flname. 

* Set up fieldvalue

    CONCATENATE 'VALUE' index INTO

                fieldvalue.

    CONDENSE    fieldvalue NO-GAPS. 

    ASSIGN COMPONENT  wa_flname

        OF STRUCTURE <fs_dyntable> TO <fs_fldval>.

    <fs_fldval> =  fieldvalue. 

  ENDDO. 

* Append to the dynamic internal table

  APPEND <fs_dyntable> TO <t_dyntable>.

 Displaying dynamic internal table using Grid. 

DATA: wa_cat LIKE LINE OF fs_fldcat. 

  DO p_cols TIMES.

    CLEAR wa_cat.

    MOVE sy-index TO wa_colno.

    CONCATENATE 'COL'

                wa_colno

           INTO wa_flname. 

    wa_cat-fieldname = wa_flname.

    wa_cat-seltext_s = wa_flname.

    wa_cat-outputlen = '10'.

    APPEND wa_cat TO fs_fldcat.

  ENDDO. 

* Call ABAP List Viewer (ALV)

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

    EXPORTING

      it_fieldcat = fs_fldcat

    TABLES

      t_outtab    = <t_dyntable>.

你可能感兴趣的:(sql,C++,c,C#,UP)