ABAP OOALV实现 TOP_OF_PAGE事件

相关类: CL_GUI_ALV_GRID , CL_GUI_SPLITTER_CONTAINER, CL_DD_DOCUMENT, CL_GUI_HTML_VIEWER

               CL_GUI_CONTAINER

事    件: TOP_OF_PAGE

DATA: GO_SPLIT_LEFT         TYPE REF TO CL_GUI_SPLITTER_CONTAINER,
      GO_HEADER_LEFT        TYPE REF TO CL_GUI_CONTAINER,
      GO_ALVCONTAINER_LEFT  TYPE REF TO CL_GUI_CONTAINER,
      GREF_DOC_LEFT    TYPE REF TO CL_DD_DOCUMENT,
      GREF_VIEWER_LEFT TYPE REF TO CL_GUI_HTML_VIEWER.
DATA: GO_ALVGRID_LEFT  TYPE REF TO CL_GUI_ALV_GRID,
      GO_DOCKING       TYPE REF TO CL_GUI_DOCKING_CONTAINER.

CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED .
DATA EVENT_HANDLER_LEFT  TYPE REF TO LCL_EVENT_RECEIVER .

1.先初始化屏幕使用类CL_GUI_SPLITTER_CONTAINER 将屏幕分为上下两屏,上面置入TOP_OF_PAGE的内容,下面置入ALV

  CREATE OBJECT GO_DOCKING
     EXPORTING
*      PARENT                =
       REPID                 = SY-REPID
       DYNNR                 = GC_SCREEN_0100
       SIDE                  = CL_GUI_DOCKING_CONTAINER=>DOCK_AT_BOTTOM
*      EXTENSION             = 50
*      STYLE                 =
*      LIFETIME              = lifetime_default
*      CAPTION               =
*      METRIC                      = 0
       RATIO                       = 90
*      NO_AUTODEF_PROGID_DYNNR     =
*      NAME                        =
     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 ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
   CREATE OBJECT GO_SPLIT_LEFT 
     EXPORTING
       PARENT            = GO_DOCKING
       ROWS              = 2
       COLUMNS           = 1
*      NO_AUTODEF_PROGID_DYNNR =
*      NAME              =
    EXCEPTIONS
      CNTL_ERROR        = 1
      CNTL_SYSTEM_ERROR = 2
      OTHERS            = 3
      .
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
   CALL METHOD GO_SPLIT_LEFT->GET_CONTAINER
    EXPORTING
      ROW       = 1
      COLUMN    = 1
    RECEIVING
      CONTAINER = GO_HEADER_LEFT. "放置top of pag的容器

  CALL METHOD GO_SPLIT_LEFT->GET_CONTAINER
    EXPORTING
      ROW       = 2
      COLUMN    = 1
    RECEIVING
      CONTAINER = GO_ALVCONTAINER_LEFT. " 放置alv的容器

  CALL METHOD GO_SPLIT_LEFT->SET_ROW_HEIGHT
    EXPORTING
      ID     = 1
      HEIGHT = 10.
  CREATE OBJECT GO_ALVGRID_LEFT  "将ALV置入底层容器
    EXPORTING
*      I_SHELLSTYLE      = 0
*      I_LIFETIME        =
      I_PARENT          = GO_ALVCONTAINER_LEFT
*      I_APPL_EVENTS     = SPACE
*      I_PARENTDBG       =
*      I_APPLOGPARENT    =
*      I_GRAPHICSPARENT  =
*      I_NAME            =
*      I_FCAT_COMPLETE   = SPACE
*      O_PREVIOUS_SRAL_HANDLER =
     EXCEPTIONS
       ERROR_CNTL_CREATE = 1
       ERROR_CNTL_INIT   = 2
       ERROR_CNTL_LINK   = 3
       ERROR_DP_CREATE   = 4
       OTHERS            = 5
      .
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

2.实现TOP_OF_PAGE事件

*&---------------------------------------------------------------------*
*& 类声明
*&---------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER DEFINITION .
  PUBLIC SECTION.

    METHODS:
      HANDLE_TOP_OF_PAGE_LEFT FOR EVENT TOP_OF_PAGE  OF CL_GUI_ALV_GRID
                            IMPORTING E_DYNDOC_ID,

ENDCLASS .
*&---------------------------------------------------------------------*
*& 类实现
*&---------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.

  METHOD HANDLE_TOP_OF_PAGE_LEFT.
    PERFORM FRM_TOP_OF_PAGE_LEFT USING E_DYNDOC_ID.
  ENDMETHOD.                    "handle_top_of_page

ENDCLASS .



FORM FRM_TOP_OF_PAGE_LEFT USING P_EREF_DOC TYPE REF TO CL_DD_DOCUMENT.
  DATA: LV_BACK TYPE SDYDO_KEY VALUE SPACE.
  DATA: LV_HTML TYPE STRING,
        M_P  TYPE I.
  DATA: L_LINE   TYPE I,
        L_LINE_S TYPE I,
        L_LINE_E TYPE I.

  LV_HTML = '<html><h3>凭证明细</h3>'.

  P_EREF_DOC->HTML_INSERT(
    EXPORTING
      CONTENTS = LV_HTML
    CHANGING
      POSITION = M_P
  ).

  IF GREF_VIEWER_LEFT IS INITIAL.
    CREATE OBJECT GREF_VIEWER_LEFT
      EXPORTING
        PARENT = GO_HEADER_LEFT.
  ENDIF.

  CALL FUNCTION 'REUSE_ALV_GRID_COMMENTARY_SET'
    EXPORTING
      DOCUMENT = GREF_DOC_LEFT
      BOTTOM   = SPACE.

  CALL METHOD GREF_DOC_LEFT->MERGE_DOCUMENT.
  CALL METHOD GREF_DOC_LEFT->SET_DOCUMENT_BACKGROUND
    EXPORTING
      PICTURE_ID = LV_BACK.
  GREF_DOC_LEFT->HTML_CONTROL = GREF_VIEWER_LEFT.
  CALL METHOD GREF_DOC_LEFT->DISPLAY_DOCUMENT
    EXPORTING
      REUSE_CONTROL = 'X'
      PARENT        = GO_HEADER_LEFT.

3. 把TOP_OF_PAG事件注册到ALV上面

CREATE OBJECT EVENT_HANDLER_LEFT.  
SET HANDLER EVENT_HANDLER_LEFT->HANDLE_TOP_OF_PAGE_LEFT
          FOR GO_ALVGRID_LEFT.

4.初始化DOCUMENT,实现TOP OF PAGE

    CREATE OBJECT GREF_DOC_LEFT.
    CALL METHOD GREF_DOC_LEFT->INITIALIZE_DOCUMENT.

    CALL METHOD GO_ALVGRID_LEFT->LIST_PROCESSING_EVENTS
      EXPORTING
        I_EVENT_NAME = 'TOP_OF_PAGE'
        I_DYNDOC_ID  = GREF_DOC_LEFT.

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ABAP OOALV 中,可以使用 CL_GUI_ALV_GRID 类来实现菜单下拉栏按钮。首先,需要创建一个继承自 CL_GUI_ALV_GRID 的子类,并重写其 GET_TOP_OF_PAGE 方法。在该方法中,可以使用以下代码来创建菜单下拉栏按钮: ```abap METHOD get_top_of_page. DATA: lr_functions TYPE REF TO cl_salv_functions_list, lr_function TYPE REF TO cl_salv_function, lr_menu TYPE REF TO cl_gui_context_menu, lr_submenu TYPE REF TO cl_gui_context_menu. super->get_top_of_page( ). IF me->alv_functions IS INITIAL. lr_functions = me->get_functions( ). lr_function = lr_functions->add_function( function_name = 'MY_FUNCTION' icon_name = 'ICON_NAME' text = 'MY_TEXT' ). lr_menu = lr_function->get_context_menu( ). lr_submenu = lr_menu->create_submenu( text = 'MY_SUBMENU' ). lr_submenu->add_function( function_name = 'MY_SUBFUNCTION' icon_name = 'ICON_NAME' text = 'MY_SUBTEXT' ). ENDIF. ENDMETHOD. ``` 以上代码中,我们首先获取了 ALV 的函数列表对象,并添加了一个自定义的函数 MY_FUNCTION。然后,我们通过该函数的 get_context_menu 方法获取了一个菜单对象 lr_menu,并创建了一个子菜单 lr_submenu。最后,我们在子菜单中添加了一个自定义的函数 MY_SUBFUNCTION。 需要注意的是,在以上代码中,MY_FUNCTION、MY_SUBFUNCTION、ICON_NAME、MY_TEXT、MY_SUBTEXT 都需要根据实际情况进行替换。此外,如果需要在菜单下拉栏按钮上显示图标,还需要提供相应的图标名称。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gong JX

多谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值