一个需求,ALV展示后,双击某行,再弹出一个ALV 某些信息,然后,响应弹出ALV的事件。
然后做了个demo
执行显示spfli数据,双击某行,根据carrid 获取sflight 表数据,弹出alv 展示sflight数据,然后双击sflight数据,弹出message显示双击了第几行。
效果图
其实没什么,太久不做这类的了,做个备份吧,以后方便copy
主要代码如下;
9001空白屏幕
&———————————————————————
& Include ZLM_TEST_001_TOP_
_&———————————————————————*
*–global data
DATA :
GT_SPFLI TYPE TABLE OF SPFLI ,
GT_SFLIGHT TYPE TABLE OF SFLIGHT .
*—alv data
DATA :
GCL_GRID_SPFLI TYPE REF TO CL_GUI_ALV_GRID , “ALV 控件
GCL_GRID_SFLIGHT TYPE REF TO CL_GUI_ALV_GRID , “ALV 控件
GCL_DOC_SPFLI TYPE REF TO CL_GUI_DOCKING_CONTAINER ,
GCL_DOC_SFLIGHT TYPE REF TO CL_GUI_DIALOGBOX_CONTAINER . “ 第二个弹出框alv 容器
*—the first alv event class
CLASS LCL_EVENT_SPFLI_RECEIVER DEFINITION .
PUBLIC SECTION .
METHODS HANDLE_DOUBLE_CLICK
FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN .
METHODS HANDLE_CLOSE
FOR EVENT CLOSE OF CL_GUI_DIALOGBOX_CONTAINER
IMPORTING SENDER .
ENDCLASS .
CLASS LCL_EVENT_SPFLI_RECEIVER IMPLEMENTATION .
METHOD HANDLE_DOUBLE_CLICK .
DATA :LS_SPFLI TYPE SPFLI .
READ TABLE GT_SPFLI INTO LS_SPFLI INDEX E_ROW .
SELECT * FROM SFLIGHT INTO TABLE GT_SFLIGHT
WHERE CARRID = LS_SPFLI -CARRID .
PERFORM FRM_SHOW_SFLIGHT .
ENDMETHOD .
METHOD HANDLE_CLOSE .
CALL METHOD SENDER ->SET_VISIBLE
EXPORTING
VISIBLE = SPACE .
ENDMETHOD .
ENDCLASS .
*—event calss for the second alv
CLASS LCL_EVENT_SFLIGHT_RECEIVER DEFINITION .
PUBLIC SECTION .
METHODS HANDLE_DOUBLE_CLICK
FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN .
ENDCLASS .
CLASS LCL_EVENT_SFLIGHT_RECEIVER IMPLEMENTATION .
METHOD HANDLE_DOUBLE_CLICK .
DATA :LS_SFLIGHT TYPE SFLIGHT .
DATA :LV_MSG TYPE STRING .
READ TABLE GT_SFLIGHT INTO LS_SFLIGHT INDEX E_ROW .
IF SY -SUBRC = 0 .
LV_MSG = E_ROW .
CONCATENATE ‘Row:’ LV_MSG INTO LV_MSG SEPARATED BY SPACE .
MESSAGE LV_MSG TYPE ‘I’.
ENDIF .
ENDMETHOD .
ENDCLASS .
*—event
DATA : EVENT_SPFLI_RECEIVER TYPE REF TO LCL_EVENT_SPFLI_RECEIVER .
DATA : EVENT_SFLIGHT_RECEIVER TYPE REF TO LCL_EVENT_SFLIGHT_RECEIVER .
&———————————————————————
& Form FRM_ALV_SPFLI_
_&———————————————————————
text
———————————————————————-
–> p1 text_
_ 贴屏幕右边,从屏幕右边开始算宽度
SIDE = CL_GUI_DOCKING_CONTAINER =>DOCK_AT_LEFT “ALV 贴屏幕左边,从左边算屏幕宽度,
EXTENSION = 900 “ 屏幕宽度
STYLE = CL_GUI_CONTROL =>WS_CHILD “ 可选参数,设置ALV 是否可用手动拖动大小
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6 .
IF SY -SUBRC <> 0 .
MESSAGE S001 (00 ) WITH ‘屏幕初始化失败’.
LEAVE LIST-PROCESSING .
ENDIF .
CREATE OBJECT GCL_GRID_SPFLI
EXPORTING
I_PARENT = GCL_DOC_SPFLI .
* event 绑定事件
CREATE OBJECT EVENT_SPFLI_RECEIVER .
“ 双击某一单元格事件
SET HANDLER EVENT_SPFLI_RECEIVER ->HANDLE_DOUBLE_CLICK FOR GCL_GRID_SPFLI .
* “ 显示内表数据
CALL METHOD GCL_GRID_SPFLI ->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = ‘SPFLI’
CHANGING
IT_OUTTAB = GT_SPFLI[].
ELSE .
CALL METHOD CL_GUI_CFW =>FLUSH .
ENDIF .
ENDFORM . ” ZFORM_ALV_SHOW
&———————————————————————
& Form FRM_SHOW_SFLIGHT_
_&———————————————————————
text
———————————————————————-
–> p1 text_
_
&——————————————————————— & Include ZLM_TEST_001_PBO_
_&———————————————————————
&———————————————————————
& Module STATUS_9001 OUTPUT
&———————————————————————
text_
_———————————————————————-*
MODULE STATUS_9001 OUTPUT .
SET PF-STATUS ‘TEST_STATUS’.
ENDMODULE .
&———————————————————————
& Module MDL_SHOW OUTPUT_
_&———————————————————————
text
———————————————————————-
MODULE MDL_SHOW OUTPUT .
PERFORM frm_alv_spfli .
ENDMODULE .
&——————————————————————— & Module MDL_EXIT INPUT_
_&———————————————————————
text
———————————————————————-
MODULE MDL_EXIT INPUT .
LEAVE PROGRAM .
ENDMODULE .
Original: https://blog.51cto.com/u_15680210/5578398
Author: sapLiuMeng
Title: ALV双击弹出新ALV,并响应新ALV事件
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/508397/
转载文章受原作者版权保护。转载请注明原作者出处!