調用REUSE_ALV_FIELDCATALOG_MERGE函數來獲取FIELDCAT


  REUSE_ALV_FIELDCATALOG_MERGE函數可根據內表結構返回FIELDCAT字段結構信息,具體的參數等信息請查看ALV調用的幾個標准函數里相關的介紹,好的,那么讓我們開始學習如何使用此函數。

  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輸出格式最優化
  ENDFORM.

  

  *The Function Of Show ALV
  FORM ALVSHOW.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
        I_CALLBACK_PROGRAM                = w_repid
        I_GRID_TITLE                      = 'ALV REPORT TEST'
"ALV顯示標題

        IS_LAYOUT                         = layout
        IT_FIELDCAT                       = fieldCat[]
      TABLES
        T_OUTTAB                          = LSPFLI
      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.

  最終運行結果如下:
  

  錯誤排查:
  有的時候寫好代碼調用 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個字符,即報如上錯誤。可以做以下設置。
  
  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM