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個字符,即報如上錯誤。可以做以下設置。

