二维码

[动态alv] 使用Field Symbols创建一个简单的动态ALV

Twilight发表于 2015-08-20 09:40Twilight 最后回复于 2015-08-20 09:40 [复制链接] 7918 0

主要的知识点就是动态内表的创建和使用。动态ALV的优点的界面显示大量的数据也不会卡顿,因为select抽数时不会一次性全取出,会根据界面显示的多少动态的取出。

程序代码:
  1. *"Type-pool............................................................
  2. TYPE-POOLS : slis.
  3. DATA:w_dref TYPE REF TO data,          " w_dref reference variable
  4.      t_line TYPE c LENGTH 20.          " w_line to hold a line
  5. DATA:t_fcat  TYPE slis_t_fieldcat_alv.
  6. FIELD-SYMBOLS: <t_itab> TYPE STANDARD TABLE.

  7. *"Parameters elements..................................................
  8. PARAMETERS : p_table TYPE tabname OBLIGATORY,       " Table Name
  9.              p_no    TYPE i .                       " No of Records to be displayed

  10. START-OF-SELECTION.
  11.   SELECT SINGLE
  12.          tabname                       " Table Name
  13.     FROM dd02l
  14.     INTO t_line
  15.    WHERE tabname   EQ p_table
  16.      AND as4vers   EQ ' '
  17.      AND as4local  EQ 'A'
  18.      AND tabclass  NE 'INTTAB'
  19.      AND tabclass  NE 'APPEND'.

  20.   IF sy-subrc EQ 0.
  21.     CREATE DATA w_dref TYPE STANDARD TABLE OF (p_table).
  22.     ASSIGN w_dref->* TO <t_itab>.
  23.     IF sy-subrc EQ 0.
  24.       SELECT *                         " All Fields
  25.         FROM (p_table)
  26.         INTO TABLE <t_itab> UP TO p_no ROWS.

  27.       IF sy-subrc EQ 0.
  28.         PERFORM fill_catalog.
  29.         PERFORM display.
  30.       ELSE.
  31.         MESSAGE text-002 TYPE 'S'.
  32.         EXIT.
  33.       ENDIF.                           " IF sy-subrc EQ 0...
  34.     ELSE.
  35.       MESSAGE text-003 TYPE 'S'.
  36.       EXIT.
  37.     ENDIF.
  38.   ELSE.
  39.     MESSAGE text-003 TYPE 'S'.
  40.     LEAVE LIST-PROCESSING.
  41.   ENDIF.                               " IF sy-subrc EQ 0...

  42. FORM display .
  43.   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  44.     EXPORTING
  45.       it_fieldcat   = t_fcat
  46.     TABLES
  47.       t_outtab      = <t_itab>
  48.     EXCEPTIONS
  49.       program_error = 1
  50.       OTHERS        = 2.
  51.   IF sy-subrc <> 0.
  52.     MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'
  53.             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  54.     EXIT.
  55.   ENDIF.                               " IF sy-subrc <> 0...
  56. ENDFORM.                               " DISPLAY

  57. FORM fill_catalog .
  58.   CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  59.     EXPORTING
  60.       i_program_name         = sy-repid
  61.       i_structure_name       = p_table
  62.     CHANGING
  63.       ct_fieldcat            = t_fcat
  64.     EXCEPTIONS
  65.       inconsistent_interface = 1
  66.       program_error          = 2
  67.       OTHERS                 = 3.
  68.   IF sy-subrc <> 0.
  69.     MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'
  70.             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  71.     EXIT.
  72.   ENDIF.                               " IF sy-subrc <> 0...
  73. ENDFORM.                               " FILL_CATALOG
复制代码

执行效果:
dynamically alv 1.jpg
dynamically alv 2.jpg

扩展阅读:ABAP动态生成内表的三种方法
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表