ALV 显示中默认会调用标准的 ALV GUI,可是有时候我们需要禁止或增加系统中已经有的一些GUI STATUS的功能。
1.首先到SE41中COPY 一个GUI STATUS 到要用的programm中。
可以COPY PROGRAMM : SAPLKKBL STATUS : STANDARD_FULLSCREEN中到需要程序的STATUS中。
2.在程序中做STATUS的替换动作了,也就是在CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 的时候,参数
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS',这里SET_PF_STATUS是form的名字。
*&---------------------------------------------------------------------*
*& Report ZEASYALVTEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZEASYALVLAOUTTEST MESSAGE-ID ZEASYMESSAGE.
INCLUDE <ICON>.
INCLUDE <SYMBOL>.
TABLES : SPFLI.
SELECT-OPTIONS : S_CARR FOR SPFLI-CARRID,
S_CONN FOR SPFLI-CONNID.
PARAMETERS p_layout LIKE disvariant-variant.
TYPES : TY_SPFLI TYPE SPFLI .
DATA : IT_SPFLI TYPE TABLE OF TY_SPFLI WITH HEADER LINE.
TYPES : BEGIN OF TY_ALV_SPFLI. "
INCLUDE TYPE TY_SPFLI.
TYPES : exception TYPE C.
TYPES : CHECKBOX TYPE C.
TYPES : icon TYPE icon_d.
TYPES : symbol TYPE icon_d.
TYPES : END OF TY_ALV_SPFLI.
DATA : ALV_SPFLI TYPE TABLE OF TY_ALV_SPFLI WITH HEADER LINE.
*&------------------------------------*
*&-- DECLARE DATA FOR ALV
*&-----------------------------------*
TYPE-POOLS: slis.
DATA : g_variant LIKE disvariant,
g_save(1) TYPE c,
g_exit(1) TYPE c,
gx_variant LIKE disvariant.
**-------------------------------------*
DATA : G_REPID LIKE SY-REPID.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
gt_events TYPE slis_t_event ,
gt_list_top_of_page TYPE slis_t_listheader,
gs_print TYPE slis_print_alv,
gs_layout TYPE slis_layout_alv .
G_REPID = SY-REPID.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_layout.
PERFORM f_f4_layout CHANGING p_layout.
START-OF-SELECTION.
SELECT * INTO TABLE IT_SPFLI
FROM SPFLI
WHERE CARRID IN S_CARR
AND CONNID IN S_CONN.
CHECK IT_SPFLI[] IS NOT INITIAL.
LOOP AT IT_SPFLI.
MOVE-CORRESPONDING IT_SPFLI TO ALV_SPFLI.
ALV_SPFLI-EXCEPTION = '3'.
ALV_SPFLI-CHECKBOX = 'X'.
ALV_SPFLI-ICON = icon_detail.
ALV_SPFLI-symbol = sym_folder.
*ALV_SPFLI[] = IT_SPFLI[].
APPEND ALV_SPFLI.
ENDLOOP.
PERFORM DISPLAYALV.
*&---------------------------------------------------------------------*
*& Form DISPLAYALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAYALV .
*-- PREPARE ALV DATA
PERFORM EVENTTAB_BUILD USING GT_EVENTS[].
PERFORM COMMENT_BUILD USING GT_LIST_TOP_OF_PAGE[].
*-- LAYOUT SETTING
PERFORM PREPARE_ALV_FIELD USING GT_FIELDCAT[].
*-- ALV DISPLAY
*-- 半自动生产FIELDCAT
* PERFORM AUTO_GET_FIELDCAT.
* PERFORM ALV_FIECAT.
PERFORM CALL_REUSE_ALV_GRID_DISPLAY.
ENDFORM. " DISPLAYALV
*&---------------------------------------------------------------------*
*& Form EVENTTAB_BUILD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_EVENTS[] text
*----------------------------------------------------------------------*
FORM EVENTTAB_BUILD USING PT_EVENTS TYPE SLIS_T_EVENT.
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
*
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = PT_EVENTS.
READ TABLE PT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
INTO LS_EVENT.
IF SY-SUBRC = 0.
LS_EVENT-FORM = 'TOP_OF_PAGE'.
MODIFY PT_EVENTS FROM LS_EVENT INDEX SY-TABIX.
ENDIF.
ENDFORM. " EVENTTAB_BUILD
*&---------------------------------------------------------------------*
*& Form PREPARE_ALV_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_FIELDCAT[] text
*----------------------------------------------------------------------*
FORM PREPARE_ALV_FIELD USING P_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: LS_LINE TYPE SLIS_FIELDCAT_ALV.
DATA: dat type d,
datt(10).
*-- DEFINE MARCO
DEFINE APPEND_ALV_FIELD.
CLEAR LS_LINE.
LS_LINE-FIELDNAME = &1.
LS_LINE-TABNAME = &2.
LS_LINE-REPTEXT_DDIC = &3.
LS_LINE-SELTEXT_L = &3.
LS_LINE-SELTEXT_M = &3.
LS_LINE-SELTEXT_S = &3.
* LS_LINE-QFIELDNAME = &4.
LS_LINE-CHECKBOX = &4.
* LS_LINE-symbol = &4.
* LS_LINE-QTABNAME = &5.
LS_LINE-EDIT = &5.
LS_LINE-NO_OUT = &6.
LS_LINE-NO_ZERO = &7.
* LS_LINE-OUTPUTLEN = &8.
LS_LINE-KEY = &8.
LS_LINE-fix_column = &8.
LS_LINE-lzero = &9. "输出前导0.
APPEND LS_LINE TO P_FIELDCAT.
END-OF-DEFINITION.
APPEND_ALV_FIELD: 'CARRID' 'ALV_SPFLI' '航线承运人ID' "DN
'' ''
'O' 'X' 'X' ''.
APPEND_ALV_FIELD: 'CONNID' 'ALV_SPFLI' '航班连接 Id' "MBLNO
'' ''
'O' '' 'X' 'X'.
APPEND_ALV_FIELD: 'CITYFROM' 'ALV_SPFLI' '起飞城市' "HBLNO
'' ''
'O' 'X' '' ''.
APPEND_ALV_FIELD: 'CITYTO' 'ALV_SPFLI' '目标城市' "SENDTIMES SELLERNAME
'' ''
'O' 'X' '' ''.
APPEND_ALV_FIELD: 'DISTANCE' 'ALV_SPFLI' '距离' "
'' ''
'O' 'X' '' ''.
*"checkbox
*
* CLEAR LS_LINE.
*
* LS_LINE-fieldname = 'CHECKBOX'.
*
* LS_LINE-seltext_l = 'Checkbox'.
*
* LS_LINE-checkbox = 'X'.
*
* LS_LINE-fix_column = 'X'.
*
* APPEND LS_LINE TO P_FIELDCAT.
*
* "icon
*
* CLEAR LS_LINE.
*
* LS_LINE-fieldname = 'ICON'.
*
* LS_LINE-seltext_l = 'Icon'.
*
* LS_LINE-icon = 'X'.
*
* APPEND LS_LINE TO P_FIELDCAT.
*
*
*
* "symbol
*
* CLEAR LS_LINE.
*
* LS_LINE-fieldname = 'SYMBOL'.
*
* LS_LINE-seltext_l = 'Symbol'.
*
* LS_LINE-symbol = 'X'.
*
* APPEND LS_LINE TO P_FIELDCAT.
ENDFORM. " PREPARE_ALV_FIELD
*&---------------------------------------------------------------------*
*& Form CALL_REUSE_ALV_GRID_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CALL_REUSE_ALV_GRID_DISPLAY .
gs_layout-f2code = 'DISPLAY'.
gs_print-no_print_listinfos = 'X'.
gs_layout-colwidth_optimize = 'X'. "列宽度自动根据内容优化
** gs_layout-f2code = '&ETA'. "double check弹出详细信息
** gs_layout-zebra = 'X'. "清单条纹显示
* gs_layout-no_vline = ''. "是否显示列间隔线
* gs_layout-box_fieldname = 'X'. "是否显示checkbox
gs_layout-confirmation_prompt = ''. "推出清单是否提示
gs_layout-detail_titlebar = '详细信息'."详细清单的标题
gs_layout-DETAIL_POPUP = 'X'.
gs_layout-lights_fieldname = 'EXCEPTION'. "报警灯栏位
**-----------选择布局--------------------------------------------------**
DATA:
ls_variant TYPE disvariant.
PERFORM f_variant_build CHANGING ls_variant.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID "SY-CPROG
* I_BACKGROUND_ID = 'ALV_BACKGROUND'
* i_buffer_active = 'X'
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
* I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND'
* I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE' "GT_LIST_TOP_OF_PAGE[]
IT_FIELDCAT = GT_FIELDCAT[]
IT_EVENTS = GT_EVENTS[]
* I_STRUCTURE_NAME = 'SPFLI'
I_SAVE = 'A'
IS_LAYOUT = GS_LAYOUT
* IS_PRINT = GS_PRINT
is_variant = ls_variant
TABLES
T_OUTTAB = ALV_SPFLI
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. " CALL_REUSE_ALV_GRID_DISPLAY
************************************************************************************
*&---------------------------------------------------------------------*
*& Form COMMENT_BUILD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_LIST_TOP_OF_PAGE[] text
*----------------------------------------------------------------------*
FORM COMMENT_BUILD USING LT_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
DATA: LS_LINE TYPE SLIS_LISTHEADER.
*
* LIST HEADING LINE: TYPE H
CLEAR LS_LINE.
LS_LINE-TYP = 'H'.
* LS_LINE-KEY: NOT USED FOR THIS TYPE
LS_LINE-INFO = '航班时刻表'.
APPEND LS_LINE TO LT_TOP_OF_PAGE.
* STATUS LINE: TYPE S
CLEAR LS_LINE.
LS_LINE-TYP = 'S'.
LS_LINE-KEY = '输出时间'. "TEXT-101.
LS_LINE-INFO = SY-DATUM. "TEXT-102.
APPEND LS_LINE TO LT_TOP_OF_PAGE.
LS_LINE-KEY = '查询者'. "TEXT-103.
LS_LINE-INFO = 'EASY'. "TEXT-104.
APPEND LS_LINE TO LT_TOP_OF_PAGE.
* ACTION LINE: TYPE A
CLEAR LS_LINE.
LS_LINE-TYP = 'A'.
* LS_LINE-KEY: NOT USED FOR THIS TYPE
LS_LINE-INFO = '详细信息'. "TEXT-105.
APPEND LS_LINE TO LT_TOP_OF_PAGE.
ENDFORM. " COMMENT_BUILD
FORM TOP_OF_PAGE.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
I_LOGO = 'EASYPICTURE'
IT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ALV_FIECAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ALV_FIECAT .
CLEAR gt_fieldcat.
gt_fieldcat-COL_POS = 1.
gt_fieldcat-FIELDNAME = 'CARRID'.
gt_fieldcat-TABNAME = 'ALV_SPFLI'.
gt_fieldcat-SELTEXT_L = '航线承运人'.
gt_fieldcat-SELTEXT_M = 'MMM'.
gt_fieldcat-SELTEXT_S = 'SSS'.
APPEND gt_fieldcat TO gt_fieldcat.
CLEAR gt_fieldcat.
gt_fieldcat-COL_POS = 2.
gt_fieldcat-FIELDNAME = 'CONNID'.
gt_fieldcat-TABNAME = 'ALV_SPFLI'.
gt_fieldcat-SELTEXT_M = '航班连接'.
*gt_fieldcat-no_out = 'X'.
gt_fieldcat-EDIT = 'X'.
gt_fieldcat-lzero = 'X'.
APPEND gt_fieldcat TO gt_fieldcat.
CLEAR gt_fieldcat.
gt_fieldcat-COL_POS = 3.
gt_fieldcat-FIELDNAME = 'CITYFROM'.
gt_fieldcat-TABNAME = 'ALV_SPFLI'.
gt_fieldcat-SELTEXT_M = '起飞城市'.
APPEND gt_fieldcat TO gt_fieldcat.
CLEAR gt_fieldcat.
gt_fieldcat-COL_POS = 4.
gt_fieldcat-FIELDNAME = 'CITYTO'.
gt_fieldcat-TABNAME = 'ALV_SPFLI'.
gt_fieldcat-SELTEXT_M = '目的城市'.
*gt_fieldcat-EDIT = 'X'.
APPEND gt_fieldcat TO gt_fieldcat.
CLEAR gt_fieldcat.
gt_fieldcat-COL_POS = 5.
gt_fieldcat-FIELDNAME = 'DISTANCE'.
gt_fieldcat-TABNAME = 'ALV_SPFLI'.
gt_fieldcat-SELTEXT_M = '距离'.
gt_fieldcat-EDIT = 'X'.
APPEND gt_fieldcat TO gt_fieldcat.
ENDFORM. " ALV_FIECAT
*&---------------------------------------------------------------------*
*& Form AUTO_GET_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM AUTO_GET_FIELDCAT .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' "不好用啊。。。
EXPORTING
I_PROGRAM_NAME = sy-repid
* I_INTERNAL_TABNAME = 'ALV_SPFLI'
I_STRUCTURE_NAME = 'ALV_SPFLI'
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_INCLNAME =
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = GT_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.
ENDFORM. " AUTO_GET_FIELDCAT
*&---------------------------------------------------------------------*
*& Form f_variant_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LS_VARIANT text
*----------------------------------------------------------------------*
FORM f_variant_build CHANGING p_variant TYPE disvariant.
p_variant-report = sy-repid.
p_variant-variant = p_layout.
ENDFORM. " f_variant_build
*&---------------------------------------------------------------------*
*& Form f_f4_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_P_LAYOUT text
*----------------------------------------------------------------------*
FORM f_f4_layout CHANGING p_variant.
DATA: ls_variant TYPE disvariant,
l_exit TYPE char1.
ls_variant-report = sy-repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = ls_variant
i_save = 'A'
IMPORTING
e_exit = l_exit
es_variant = ls_variant
EXCEPTIONS
not_found = 1.
IF sy-subrc = 1.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF l_exit IS INITIAL.
p_variant = ls_variant-variant.
ENDIF.
ENDIF.
ENDFORM. " f_f4_layout
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZALV_PF_STATUS'.
ENDFORM. "Set_pf_status