ABAP开发如何动态的实现任意表的ALV显示

ABAP开发中如何动态的实现任意表的ALV的显示,以下是具体操作步骤:

第一部分:程序框架

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 TYPE STANDARD TABLE.

FIELD-SYMBOLS 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 .

ASSIGN E_TABLE->* TO .

     第三部分:INCLUDE ZALV_EVENT_F01.

  FORM SUB_ALV_DATA_GET .

SELECT * INTO CORRESPONDING FIELDS OF TABLE FROM (P_NAME).

   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

      EXPORTING

        I_STRUCTURE_NAME                  = P_NAME

       TABLES

         T_OUTTAB                          =

      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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值