ALV双击弹出新ALV,并响应新ALV事件

一个需求,ALV展示后,双击某行,再弹出一个ALV 某些信息,然后,响应弹出ALV的事件。

然后做了个demo

执行显示spfli数据,双击某行,根据carrid 获取sflight 表数据,弹出alv 展示sflight数据,然后双击sflight数据,弹出message显示双击了第几行。

效果图

ALV双击弹出新ALV,并响应新ALV事件

其实没什么,太久不做这类的了,做个备份吧,以后方便copy

主要代码如下;

ALV双击弹出新ALV,并响应新ALV事件

ALV双击弹出新ALV,并响应新ALV事件

9001空白屏幕

ALV双击弹出新ALV,并响应新ALV事件

&———————————————————————
& 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 .

ALV双击弹出新ALV,并响应新ALV事件

ALV双击弹出新ALV,并响应新ALV事件

Original: https://blog.51cto.com/u_15680210/5578398
Author: sapLiuMeng
Title: ALV双击弹出新ALV,并响应新ALV事件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/508397/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球