ABAP 动态的实现任意表的ALV显示

程序没有什么实用性,就是把一个表的内容全部显示出来了,仅用于看看数据都是什么样子的,但是其中的动态的方法还是值得研究学习的。这些方法是从我的前辈身上学到的,我小小的实践了一下,本来认为在编写程序的可以尽可能的实现程序的可配置型,然后这种想法是虽然好,不过自己没有办法实现。例如

我想 DATA 内表 TYPE TABLE OF 任意表的名称。

开始 简单的认为 DATA GR_TABNAME TYPE TABNAME.

DATA  内表 TYPE TABLE OF (GR_TABNAME).

然而这是行不通的。于是采用了动态的方式实现了类似的思想。

 

第一部分:程序框架

REPORT  ZALV_20090304_EVENT.


INCLUDE ZALV_DATA_INTI.
INCLUDE ZALV_EVENT_F01.

START-OF-SELECTION.

PERFORM SUB_ALV_DATA_GET.

第二部分:INCLUDE ZALV_DATA_INTI.

  TYPE-POOLS:ABAP.
PARAMETERS P_NAME TYPE OBJNAME.
DATA LT_TABLE TYPE TABLE OF DFIES.
DATA LS_TABLE TYPE DFIES.

CALL FUNCTION 'DDIF_NAMETAB_GET'
  EXPORTING
    TABNAME           P_NAME
 TABLES
  X031L_TAB         =
   DFIES_TAB         LT_TABLE
 EXCEPTIONS
   NOT_FOUND         1
   OTHERS            2
          .
IF SY-SUBRC <> 0.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

DATA LR_STRUC TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA LR_TABLE TYPE REF TO CL_ABAP_TABLEDESCR.
DATA LR_TYPE TYPE REF TO CL_ABAP_TYPEDESCR.
DATA LR_DATA  TYPE REF TO CL_ABAP_DATADESCR.
DATA L_STRING TYPE STRING.
DATA LT_COMP TYPE  ABAP_COMPONENT_TAB.
DATA LS_COMP LIKE LINE OF  LT_COMP.
DATA E_WA TYPE REF TO DATA.
DATA E_TABLE TYPE REF TO DATA.


FIELD-SYMBOLS <FS_TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <FS_STRUC> TYPE ANY.

LOOP AT LT_TABLE INTO LS_TABLE.
  CONCATENATE LS_TABLE-TABNAME '-' LS_TABLE-FIELDNAME INTO L_STRING.
 L_STRING LS_COMP-NAME.
  LS_COMP-NAME LS_TABLE-FIELDNAME.
  CALL METHOD CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME
    EXPORTING
      P_NAME         L_STRING
    RECEIVING
      P_DESCR_REF    LR_TYPE
    EXCEPTIONS
      TYPE_NOT_FOUND 1
      OTHERS         2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


  LS_COMP-TYPE ?= LR_TYPE.
  APPEND LS_COMP TO LT_COMP.
  CLEAR LS_COMP.
ENDLOOP.

CALL METHOD CL_ABAP_STRUCTDESCR=>CREATE
  EXPORTING
    P_COMPONENTS LT_COMP
  RECEIVING
    P_RESULT     LR_STRUC
    .

CALL METHOD CL_ABAP_TABLEDESCR=>CREATE
  EXPORTING
    P_LINE_TYPE  LR_STRUC
  RECEIVING
    P_RESULT     LR_TABLE
    .

CREATE DATA E_WA    TYPE HANDLE LR_STRUC.
CREATE DATA E_TABLE TYPE HANDLE LR_TABLE.


ASSIGN E_WA->* TO <FS_STRUC>.
ASSIGN E_TABLE->* TO <FS_TABLE>.

第三部分:INCLUDE ZALV_EVENT_F01.

 FORM SUB_ALV_DATA_GET .

SELECT INTO CORRESPONDING FIELDS OF TABLE <FS_TABLE> FROM (P_NAME).
   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        I_STRUCTURE_NAME                  P_NAME
       TABLES
         T_OUTTAB                          <FS_TABLE>
      EXCEPTIONS
        PROGRAM_ERROR                     1
        OTHERS                            2
               .
     IF SY-SUBRC <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
     ENDIF.
ENDFORM.                    SUB_ALV_DATA_GET


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值