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

网友投稿 313 2022-11-14

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

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

然后做了个demo

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

效果图

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

主要代码如下;

9001空白屏幕

*&---------------------------------------------------------------------**&  Include           ZLM_TEST_001_TOP*&---------------------------------------------------------------------**--global dataDATA:  GT_SPFLI   TYPE TABLE OF SPFLI,  GT_SFLIGHT TYPE TABLE OF SFLIGHT.*---alv dataDATA:  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 classCLASS 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 alvCLASS 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.*---eventDATA: 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*  <--  p2        text*----------------------------------------------------------------------*FORM FRM_ALV_SPFLI .  IF GCL_GRID_SPFLI IS INITIAL.    CREATE OBJECT GCL_DOC_SPFLI      EXPORTING        REPID                       = SY-REPID        DYNNR                       = '9001'*       side                        = cl_gui_docking_container=>dock_at_right      "ALV贴屏幕右边,从屏幕右边开始算宽度        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*  <--  p2        text*----------------------------------------------------------------------*FORM FRM_SHOW_SFLIGHT .  IF GCL_GRID_SFLIGHT IS INITIAL.    CREATE OBJECT EVENT_SFLIGHT_RECEIVER.    CREATE OBJECT GCL_DOC_SFLIGHT      EXPORTING        TOP      = 150        LEFT     = 150        LIFETIME = CNTL_LIFETIME_DYNPRO        CAPTION  = 'SFLIGHT'        WIDTH    = 800        HEIGHT   = 200.    CREATE OBJECT GCL_GRID_SFLIGHT      EXPORTING        I_PARENT = GCL_DOC_SFLIGHT.    SET HANDLER EVENT_SPFLI_RECEIVER->HANDLE_CLOSE FOR GCL_DOC_SFLIGHT.    SET HANDLER EVENT_SFLIGHT_RECEIVER->HANDLE_DOUBLE_CLICK FOR GCL_GRID_SFLIGHT.    CALL METHOD GCL_GRID_SFLIGHT->SET_TABLE_FOR_FIRST_DISPLAY      EXPORTING        I_STRUCTURE_NAME = 'SFLIGHT'      CHANGING        IT_OUTTAB        = GT_SFLIGHT.    CALL METHOD CL_GUI_CONTROL=>SET_FOCUS      EXPORTING CONTROL = GCL_GRID_SFLIGHT.  ELSE.    CALL METHOD GCL_DOC_SFLIGHT->SET_VISIBLE      EXPORTING        VISIBLE = 'X'.    CALL METHOD GCL_GRID_SFLIGHT->REFRESH_TABLE_DISPLAY.  ENDIF.ENDFORM.

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java类的组成结构详解
下一篇:单片机开关量的输出接口
相关文章

 发表评论

暂时没有评论,来抢沙发吧~