通过CL_GUI_SPLITTER_CONTAINER拆分容器,实现OO ALV全屏幕显示。
1.创建屏幕0100 .
代码实现如下:
DATA SPLITTER TYPE REF TO CL_GUI_SPLITTER_CONTAINER.
DATA CONTAINER_1 TYPE REF TO CL_GUI_CONTAINER.
DATA O_ALV_GRID_ITEM_CREATE TYPE CL_GUI_ALV_GRID .
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'.
SET TITLEBAR 'TITLE0100'.
ENDMODULE.
MODULE CREATE_ALV_DISPLAY OUTPUT.
DATA LW_STABLE TYPE LVC_S_STBL.
IF SPLITTER IS INITIAL .
CREATE OBJECT SPLITTER
EXPORTING
PARENT = CL_GUI_CONTAINER=>SCREEN0
ROWS = 1
COLUMNS = 1.
CALL METHOD SPLITTER->GET_CONTAINER
EXPORTING
ROW = 1
COLUMN = 1
RECEIVING
CONTAINER = CONTAINER_1.
ENDIF .
IF O_ALV_GRID_ITEM_CREATE IS INITIAL.
CREATE OBJECT O_ALV_GRID_ITEM_CREATE
EXPORTING
I_PARENT = CONTAINER_1.
*构建ALV GRID的全局布局
PERFORM FRM_PREPARE_CREATE_ITEM_LAYOUT.
*构建ALV显示的field属性
PERFORM FRM_BULID_9001_ITEM_FIELDS.
*为ALV注册事件处理器。
PERFORM FRM_SET_EVENT_ITEM_HANDLER.
*显示数
PERFORM FRM_DISPLAY_9001_ITEM_DATA.
ELSE.
* DATA LW_STABLE TYPE LVC_S_STBL.
LW_STABLE-COL = 'X'.
LW_STABLE-ROW = 'X'.
CALL METHOD O_ALV_GRID_ITEM_CREATE->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LW_STABLE.
ENDIF.
ENDMODULE.
FORM FRM_PREPARE_CREATE_ITEM_LAYOUT .
CLEAR WA_LAYOUT_ITEM_CREATE.
WA_LAYOUT_ITEM_CREATE-ZEBRA = 'X'. "ALV条纹显示
WA_LAYOUT_ITEM_CREATE-CWIDTH_OPT = 'X'. "自适应宽度
* WA_LAYOUT_ITEM_CREATE-INFO_FNAME = 'COLOR'.
ENDFORM.
FORM FRM_BULID_9001_ITEM_FIELDS .
DATA:LS_FIELDCAT TYPE LVC_S_FCAT .
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE =
I_STRUCTURE_NAME = 'ZPPS_COLLN_ALV_DISPLAY'
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
* I_INTERNAL_TABNAME =
CHANGING
CT_FIELDCAT = I_ITEM_CREATE_FIELDCATALOG
* EXCEPTIONS
* INCONSISTENT_INTERFACE = 1
* PROGRAM_ERROR = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT I_ITEM_CREATE_FIELDCATALOG INTO LS_FIELDCAT .
IF LS_FIELDCAT-FIELDNAME EQ 'CHECK' .
LS_FIELDCAT-EDIT = 'X' .
LS_FIELDCAT-CHECKBOX = 'X' .
ENDIF .
IF LS_FIELDCAT-FIELDNAME EQ 'REPOM' .
LS_FIELDCAT-EDIT = 'X' .
ENDIF .
MODIFY I_ITEM_CREATE_FIELDCATALOG FROM LS_FIELDCAT .
ENDLOOP .
ENDFORM .
FORM FRM_SET_EVENT_ITEM_HANDLER .
ENDFORM .
FORM FRM_DISPLAY_9001_ITEM_DATA .
DATA: LI_EXCLUDE TYPE UI_FUNCTIONS.
PERFORM FRM_EXCLUDE_TB_FUNCTIONS CHANGING LI_EXCLUDE.
CLEAR GS_VARIANT.
*设置变式
GS_VARIANT-REPORT = SY-REPID.
* SET HANDLER o_event_receiver->on_data_changed FOR o_alv_grid_item_create.
CALL METHOD O_ALV_GRID_ITEM_CREATE->SET_TABLE_FOR_FIRST_DISPLAY "ALV GRID数据显示
EXPORTING
IS_LAYOUT = WA_LAYOUT_ITEM_CREATE
IT_TOOLBAR_EXCLUDING = LI_EXCLUDE
IS_VARIANT = GS_VARIANT
I_SAVE = 'A'
I_DEFAULT = 'X'
CHANGING
IT_OUTTAB = GT_RESULT_TAB
IT_FIELDCATALOG = I_ITEM_CREATE_FIELDCATALOG
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
CALL METHOD O_ALV_GRID_ITEM_CREATE->SET_READY_FOR_INPUT
EXPORTING
I_READY_FOR_INPUT = 1.
ENDFORM.
FORM FRM_EXCLUDE_TB_FUNCTIONS CHANGING O_EXCLUDE TYPE UI_FUNCTIONS.
* DATA L_EXCLUDE TYPE UI_FUNC.
* L_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
* APPEND L_EXCLUDE TO O_EXCLUDE.
* L_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
* APPEND L_EXCLUDE TO O_EXCLUDE.
*
* L_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
* APPEND L_EXCLUDE TO O_EXCLUDE.
**
* L_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.
* APPEND L_EXCLUDE TO O_EXCLUDE.
*
* L_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
* APPEND L_EXCLUDE TO O_EXCLUDE.
*
* L_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
* APPEND L_EXCLUDE TO O_EXCLUDE.
*
* L_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
* APPEND L_EXCLUDE TO O_EXCLUDE.
*
* L_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
* APPEND L_EXCLUDE TO O_EXCLUDE.
*
* L_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.
* APPEND L_EXCLUDE TO O_EXCLUDE.
*
*
* L_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
* APPEND L_EXCLUDE TO O_EXCLUDE.
*
* L_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
* APPEND L_EXCLUDE TO O_EXCLUDE.
ENDFORM. " FRM_EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100_EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100_EXIT INPUT.
CASE SY-UCOMM.
WHEN 'BACK' OR 'PRE' OR 'EXIT'.
LEAVE TO SCREEN 0 .
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CALL METHOD O_ALV_GRID_ITEM_CREATE->CHECK_CHANGED_DATA
* IMPORTING
* E_VALID =
* CHANGING
* C_REFRESH = 'X'
.
CASE SY-UCOMM .
WHEN 'SAVE' .
PERFORM FRM_CHECK_SAVE .
IF GV_CHECK IS INITIAL .
PERFORM FRM_SAVE_DATA.
ENDIF .
WHEN 'SELALL'.
PERFORM FRM_SELALL .
WHEN 'DISALL' .
PERFORM FRM_DISALL .
ENDCASE .
ENDMODULE.