天天看点

调用REUSE_ALV_FIELDCATALOG_MERGE函数来获取FIELDCAT

  REPORT  ZZWEI_ALV_DEMO.

  *ALV START

  TYPE-POOLS:SLIS. "调用该类型池

  *定义FIELDCAT与LAYOUT

  DATA:fieldCat TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,

        layout TYPE SLIS_LAYOUT_ALV,

        w_repid LIKE SY-REPID.

  TABLES:SPFLI.

  DATA:LSPFLI LIKE STANDARD TABLE OF SPFLI WITH HEADER LINE.

  *屏幕开始事件

  START-OF-SELECTION.

    PERFORM GETDATA.

    PERFORM CATALOG.

    PERFORM ALVSHOW.

  

  *The Function Of GETDATA

  FORM GETDATA.

    SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF TABLE LSPFLI.

  ENDFORM.

  *FORM CATALOG 根据结构体获取FIELDCAT

  FORM CATALOG.

    w_repid = SY-REPID.

    CLEAR fieldCat.

    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

     EXPORTING

       I_PROGRAM_NAME               = w_repid

      *I_INTERNAL_TABNAME           =

       I_STRUCTURE_NAME             = 'SPFLI'

     *I_CLIENT_NEVER_DISPLAY       = 'X'

     *I_INCLNAME                   =

     *I_BYPASSING_BUFFER           =

     *I_BUFFER_ACTIVE              =

     CHANGING

        CT_FIELDCAT                  = fieldCat[] "导出FIELDCAT内表数据

      EXCEPTIONS

        INCONSISTENT_INTERFACE       = 1

        PROGRAM_ERROR                = 2

      OTHERS                       = 3

          .

    IF SY-SUBRC <> 0.

       MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    "对fieldcat属性的修改

    *READ TABLE fieldCat INDEX 2. "将第二列设为热点显示

    *fieldCat-HOTSPOT = 'X'.

    *MODIFY fieldCat INDEX 2.

    *

    *READ TABLE fieldCat INDEX 4. "将第四列设为KEY值字段

    *fieldCat-KEY = 'X'.

    *MODIFY fieldCat INDEX 4.

    *READ TABLE fieldCat INDEX 5. "将第五列设为CHECKBOX

    *fieldCat-CHECKBOX = 'X'.

    *MODIFY fieldCat INDEX 5.

    layout-COLWIDTH_OPTIMIZE = 'X'. "设置LAYOUT输出格式最优化

  *The Function Of Show ALV

  FORM ALVSHOW.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

        I_CALLBACK_PROGRAM                = w_repid

        I_GRID_TITLE                      = 'ALV REPORT TEST' "ALV显示标题

        IS_LAYOUT                         = layout

        IT_FIELDCAT                       = fieldCat[]

      TABLES

        T_OUTTAB                          = LSPFLI

        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.

  最终运行结果如下:

  错误排查:

  有的时候写好代码调用 REUSE_ALV_FIELDCATALOG_MERGE 时会莫名的出错提示为 READ_REPORT_LINE_TOO_LONG 下面列出的错误信息有这么一句.

  The internal table "/FUNCTION=K_KKB_FIELDCAT_MERGE/DATA=L_ABAP_SOURCE[]" is 72

     characters wide. The program line is 99 characters wide.

   该FM会把整个程序代码拷贝至其内表中,如果程序的行超过72个字符,即报如上错误。可以做以下设置。

调用REUSE_ALV_FIELDCATALOG_MERGE函数来获取FIELDCAT

继续阅读