zoukankan      html  css  js  c++  java
  • ABAP动态创建类型和变量的使用程序样例

    1)6.40以前可以使用代码

     REPORT  Z_dyn_attribute LINE-SIZE 500..
    *       Dynamische Attributbeschaffung
    *================================================================
    PARAMETERS     tabnam(10) TYPE c  DEFAULT 'SFLIGHT'.

    DATA           objekt     TYPE REF TO data.
    FIELD-SYMBOLS  <aber>     TYPE ANY.
    FIELD-SYMBOLS  <feld>     TYPE ANY.

    DATA           tab        TYPE i VALUE 1.

    *================================================================
    START-OF-SELECTION.
      CREATE DATA objekt TYPE (tabnam).
      ASSIGN objekt->* TO <aber>.

      SELECT * FROM (tabnam) INTO <aber>.
        NEW-LINE.
        tab = 1.
        DO.
          ASSIGN COMPONENT sy-index OF STRUCTURE <aber> TO <feld>.
          IF sy-subrc NE 0. EXIT. ENDIF.
          WRITE AT tab(10) <feld>.
          ADD 11 TO tab.
        ENDDO.
      ENDSELECT.

    TOP-OF-PAGE.
      DATA  struktur   TYPE REF TO cl_abap_structdescr.
      DATA  beschrieb  TYPE abap_compdescr.
      struktur ?= cl_abap_typedescr=>describe_by_data( <aber> ).

      NEW-LINE.
      tab = 1.
      LOOP AT struktur->components INTO beschrieb.
        WRITE AT tab(10) beschrieb-name.
        ADD 11 TO tab.
      ENDLOOP.
      ULINE.
      tab = 1.

    2)6.40以后可以使用代码

    REPORT zdany_dynamic_select.
    * We use some parameters to dynamically control the select, this is not very
    * clever but this is just a test program !!
    PARAMETER : p_tabnam TYPE tabname DEFAULT 'SFLIGHT',
                p_selfl1 TYPE edpline DEFAULT 'CARRID',
                p_selfl2 TYPE edpline DEFAULT 'CONNID',
                p_selfl3 TYPE edpline DEFAULT 'FLDATE',
                p_selfl4 TYPE edpline DEFAULT 'PRICE',
                p_selfl5 TYPE edpline DEFAULT 'CURRENCY',
                p_where1 TYPE edpline DEFAULT 'PRICE > 300',
                p_where2 TYPE edpline DEFAULT 'AND CURRENCY = ''EUR'''.
         
    FIELD-SYMBOLS : <lt_outtab> TYPE ANY TABLE,
                    <ls_outtab> TYPE ANY,
                    <l_fld> TYPE ANY.
         
    DATA: lt_where    TYPE TABLE OF edpline,
          lt_sel_list TYPE TABLE OF edpline,
          lt_group    TYPE TABLE OF edpline,
          l_having    TYPE string,
          l_wa_name   TYPE string,
          l_sel_list  TYPE edpline,
          dref        TYPE REF TO data,
          itab_type   TYPE REF TO cl_abap_tabledescr,
          struct_type TYPE REF TO cl_abap_structdescr,
          elem_type   TYPE REF TO cl_abap_elemdescr,
          comp_tab    TYPE cl_abap_structdescr=>component_table,
          comp_fld    TYPE cl_abap_structdescr=>component.
         
    TYPES: f_count TYPE i.
         
    * Creation of the output table including a non standard field, f_count
    * see ABAP FAQ #14 for more information on this topic
    struct_type ?= cl_abap_typedescr=>describe_by_name( p_tabnam ).
    elem_type   ?= cl_abap_elemdescr=>describe_by_name( 'F_COUNT' ).
    comp_tab = struct_type->get_components( ).
         
    * We remove the unnecessary fields
    LOOP AT comp_tab INTO comp_fld.
       IF comp_fld-name <> p_selfl1 AND
          comp_fld-name <> p_selfl2 AND
          comp_fld-name <> p_selfl3 AND
          comp_fld-name <> p_selfl4 AND
          comp_fld-name <> p_selfl5.
             DELETE TABLE comp_tab WITH TABLE KEY name = comp_fld-name.
       ENDIF.
    ENDLOOP.
         
    comp_fld-name = 'F_COUNT'.
    comp_fld-type = elem_type.
    APPEND comp_fld TO comp_tab.
         
    struct_type = cl_abap_structdescr=>create( comp_tab ).
    itab_type   = cl_abap_tabledescr=>create( struct_type ).
         
    l_wa_name = 'l_WA'.
    CREATE DATA dref TYPE HANDLE itab_type.
    ASSIGN dref->* TO <lt_outtab>.
    CREATE DATA dref TYPE HANDLE struct_type.
    ASSIGN dref->* TO <ls_outtab>.
         
    * Creation of the selection fields and the "group by" clause
    APPEND p_selfl1 TO lt_sel_list.
    APPEND p_selfl1 TO lt_group.
    APPEND p_selfl2 TO lt_sel_list.
    APPEND p_selfl2 TO lt_group.
    APPEND p_selfl3 TO lt_sel_list.
    APPEND p_selfl3 TO lt_group.
    APPEND p_selfl4 TO lt_sel_list.
    APPEND p_selfl4 TO lt_group.
    APPEND p_selfl5 TO lt_sel_list.
    APPEND p_selfl5 TO lt_group.
    APPEND 'COUNT(*) AS F_COUNT' TO lt_sel_list.
         
    * creation of the "where" clause
    APPEND p_where1 TO lt_where.
    APPEND p_where2 TO lt_where.
         
    * Creation of the "having" clause
    l_having = 'count(*) >= 1'.
         
    * THE dynamic select
    SELECT          (lt_sel_list)
           FROM     (p_tabnam)
           INTO CORRESPONDING FIELDS OF TABLE <lt_outtab>
           WHERE    (lt_where)
           GROUP BY (lt_group)
           HAVING   (l_having)
           ORDER BY (lt_group).
         
    * display of the results
    LOOP AT <lt_outtab> ASSIGNING <ls_outtab>.
       LOOP AT comp_tab INTO comp_fld.
          ASSIGN COMPONENT comp_fld-name OF STRUCTURE <ls_outtab> TO <l_fld>.
          WRITE: <l_fld>.
       ENDLOOP.
       SKIP.
    ENDLOOP.
  • 相关阅读:
    Coursera Algorithm II PA2 Q2
    Coursera Algorithm Part II PA2
    实现 memcpy 函数
    超人
    Proxy 模式
    【6】锋利的 jQuery 笔记
    【3】Chrome 的一些常用操作
    HTML 待解决与已解决问题
    CSS 待解决问题
    JS 一些常用技巧
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157042.html
Copyright © 2011-2022 走看看