ABAP OOALV程序DEMO
REPORT YYHD_OOALV.
*屏幕名 OOALV
DATA:GT_ALV TYPE STANDARD TABLE OF ZGS_FIELDCATACCOUNT.
DATA:GS_ALV TYPE ZGS_FIELDCATACCOUNT.
DATA GC_CUSTOM_CONTROL_NAME TYPE SCRFNAME VALUE 'OOALV'. "屏幕对象
DATA GR_CCONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER . "存放装ALV的容器
DATA GR_ALVGRID TYPE REF TO CL_GUI_ALV_GRID . "AVL对象
DATA GT_FIELDCAT TYPE LVC_T_FCAT . "存放字段目录的内表
DATA GS_LAYOUT TYPE LVC_S_LAYO . "存放ALV样式的结构
DATA: WA_STBL TYPE LVC_S_STBL.
WA_STBL-COL = ABAP_TRUE.
WA_STBL-ROW = ABAP_TRUE.
DATA OKCODE_9000 TYPE SY-UCOMM.
DATA GT_EXCLUDE TYPE UI_FUNCTIONS."隐藏按钮
TABLES:EKPO,BKPF,BSEG.
*----------------------------------------------------------------------*
* CLASS cl_event_receiver DEFINITION
*----------------------------------------------------------------------*
* OOALV事件声明
*----------------------------------------------------------------------*
CLASS CL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
* " 数据变更
METHODS HANDLE_DATA_CHANGED
FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
IMPORTING ER_DATA_CHANGED
E_ONF4
E_ONF4_BEFORE
E_ONF4_AFTER
E_UCOMM.
*
METHODS HANDLE_DATA_CHANGED_FINISHED
FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
IMPORTING E_MODIFIED
ET_GOOD_CELLS.
" 声明单击事件的方法
METHODS HANDLE_HOTSPOT_CLICK
FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW_ID E_COLUMN_ID ES_ROW_NO.
" 声明双击事件方法
METHODS HANDLE_DOUBLE_CLICK
FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN.
" 声明Toolbar事件方法
METHODS HANDLE_TOOLBAR
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE.
"声明USER-COMMAND 事件方法
METHODS HANDLE_COMMAND
FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM.
METHODS HANDLE_F4_CLICK
FOR EVENT ONF4 OF CL_GUI_ALV_GRID
IMPORTING E_FIELDNAME
E_FIELDVALUE
ES_ROW_NO
ER_EVENT_DATA
ET_BAD_CELLS
E_DISPLAY.
ENDCLASS. "cl_event_receiver DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
* 实例化OOALV事件
*----------------------------------------------------------------------*
CLASS CL_EVENT_RECEIVER IMPLEMENTATION.
" 数据变更
METHOD HANDLE_DATA_CHANGED.
FIELD-SYMBOLS: <FS_MOD_ROWS> TYPE STANDARD TABLE,
<LFS_CELLS> TYPE LVC_T_MODI,
<FS_CELL_WA> TYPE LVC_S_MODI,
<FS> TYPE ZGS_FIELDCATACCOUNT.
IF NOT ER_DATA_CHANGED->MP_MOD_ROWS IS INITIAL.
ASSIGN ER_DATA_CHANGED->MP_MOD_ROWS->* TO <FS_MOD_ROWS>.
ASSIGN ER_DATA_CHANGED->MT_MOD_CELLS TO <LFS_CELLS>.
LOOP AT <LFS_CELLS> ASSIGNING FIELD-SYMBOL(<LFS_CELL>).
READ TABLE <FS_MOD_ROWS> INDEX SY-TABIX ASSIGNING <FS>.
MOVE-CORRESPONDING <FS> TO GS_ALV.
SELECT POSID,
POST1
FROM PRPS
INTO TABLE @DATA(LT_ZWBS_F4)
WHERE POSID = @GS_ALV-ZWBS.
READ TABLE LT_ZWBS_F4 INDEX 1 INTO DATA(LS_ZWBS_F4).
GS_ALV-BKTXT = LS_ZWBS_F4-POST1.
* IF gs_alv-ZWBS = 'T EST'.
* gs_alv-BKTXT = 'TESTTEST'.
* ENDIF.
MODIFY GT_ALV FROM GS_ALV INDEX <LFS_CELL>-ROW_ID.
ENDLOOP.
ENDIF.
*刷新显示
GR_ALVGRID->SET_FRONTEND_LAYOUT( IS_LAYOUT = GS_LAYOUT ).
GR_ALVGRID->REFRESH_TABLE_DISPLAY( IS_STABLE = WA_STBL ).
ENDMETHOD.
METHOD HANDLE_DATA_CHANGED_FINISHED.
ENDMETHOD.
" 单击事件方法的实现
METHOD HANDLE_HOTSPOT_CLICK.
CONDENSE E_ROW_ID NO-GAPS.
CONDENSE E_COLUMN_ID NO-GAPS.