实例一
REPORT ZR_EXAMPLE_16.
TABLES:MARA.
TYPE-POOLS: SLIS.
SELECT-OPTIONS:MATNR FOR MARA-MATNR OBLIGATORY.
DATA:LT_MARA TYPE TABLE OF MARA WITH HEADER LINE,
FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
LAYOUT TYPE SLIS_LAYOUT_ALV,
W_REPID LIKE SY-REPID.
START-OF-SELECTION.
SELECT * FROM MARA INTO TABLE LT_MARA
WHERE MATNR IN MATNR.
W_REPID = SY-REPID.
* 定义热键显示字段,使双击事件有效
FIELDCAT-REF_TABNAME = 'LT_MARA'.
FIELDCAT-FIELDNAME = 'MATNR'.
FIELDCAT-HOTSPOT = 'X'.
APPEND FIELDCAT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = W_REPID "定义回执程序
IS_LAYOUT = LAYOUT
I_STRUCTURE_NAME = 'MARA'
I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND' "定义执行事件
IT_FIELDCAT = FIELDCAT[]
TABLES
T_OUTTAB = LT_MARA.
*---------------------------------------------------------------------*
* 事件触发子程序 *
*---------------------------------------------------------------------*
FORM ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN '&IC1'.
* 获取当前ALV所在行数据
READ TABLE LT_MARA INDEX RS_SELFIELD-TABINDEX.
SET PARAMETER ID: 'MAT' FIELD LT_MARA-MATNR.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDFORM.
实例二
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
"使用此处可以不用给 FIELDCAT-HOTSPOT = 'X'. 赋值
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = gc_grid.
CALL METHOD gc_grid->check_changed_data.
rs_selfield-refresh = 'X'.
CASE r_ucomm.
WHEN '&IC1'.
CLEAR gt_tabc[].
READ TABLE gt_alv INTO gs_alv INDEX rs_selfield-tabindex.
LOOP AT gt_lipstab INTO gs_lips WHERE vgbel = gs_alv-ebeln AND vgpos = gs_alv-ebelp.
gs_tabc-vbeln = gs_lips-vbeln.
gs_tabc-posnr = gs_lips-posnr.
gs_tabc-pstyv = gs_lips-pstyv.
CASE gs_tabc-pstyv.
WHEN 'ELN'.
gs_tabc-zms = '收料'.
WHEN 'NLC'.
gs_tabc-zms = '发料'.
ENDCASE.
gs_tabc-matnr = gs_lips-matnr.
gs_tabc-arktx = gs_lips-arktx.
gs_tabc-lfimg = gs_lips-lfimg.
gs_tabc-meins = gs_lips-meins.
gs_tabc-lgmng = gs_lips-lgmng.
READ TABLE gt_likp INTO gs_likp WITH KEY vbeln = gs_lips-vbeln.
IF sy-subrc IS INITIAL.
gs_tabc-lfdat = gs_likp-lfdat.
ENDIF.
APPEND gs_tabc TO gt_tabc.
CLEAR gs_tabc.
ENDLOOP.
CALL SCREEN 200 STARTING AT 20 3 ENDING AT 160 10.
ENDCASE.
ENDFORM.
实例三
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: lv_ebeln TYPE ebeln.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lc_grid.
CALL METHOD lc_grid->check_changed_data.
rs_selfield-refresh = 'X'.
CASE r_ucomm.
CASE rs_selfield-fieldname. "对某一字段设置事件
WHEN 'EBELN'.
lv_ebeln = rs_selfield-value.
SET PARAMETER ID 'BES' FIELD lv_ebeln.
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
ENDFORM.