SAP dialog 客制化容器事件处理

在使用客制化容器的时候,有时候需要在alv上新增按钮,而不是在dialog中 客制化容器外 做按钮事件

我这边就用一下之前的程序来做测试了,程序的构建看这个blog即可 https://www.cnblogs.com/pnj-owowa/p/17984569

结果展示

类构建

一般来说我回放入一个包含文件中去,包含文件(Y_PNJ_DEMO015_CLA)中是 类的定义和实施

CLASS lcl_event_receiverundo DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING e_object e_interactive,

      handle_ucomm FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm.

ENDCLASS.               "LCL_EVENT_RECEIVER

DATA: event_receiverundo TYPE REF TO lcl_event_receiverundo.

CLASS lcl_event_receiverundo IMPLEMENTATION.

  METHOD handle_toolbar.
    DATA: utoolbar TYPE stb_button.

    CLEAR: utoolbar.
    utoolbar-function  = 'TEST'.
    utoolbar-icon      = icon_transport.
    utoolbar-text      = '测试'.
    utoolbar-quickinfo = '测试'.
    APPEND utoolbar TO e_object->mt_toolbar.
  ENDMETHOD.                    "HANDLE_TOOLBAR


  METHOD handle_ucomm.
    DATA rowid_t TYPE lvc_t_row.
    DATA temp TYPE lvc_s_row.
    CASE e_ucomm.
      WHEN 'TEST'.
        PERFORM frm_test.
    ENDCASE.
  ENDMETHOD.                    "HANDLE_UCOMM

ENDCLASS.

屏幕构建

在构建屏幕的时候,新增实例化方法 并且 新增按钮和按钮事件

FORM frm_screen .

  PERFORM frm_set_layout.  "设置ALV输出格式
  PERFORM frm_set_fieldcat.  "设置ALV输出字段
  PERFORM frm_set_toolbar.   "设置alv状态栏

  IF wa_custom_container IS INITIAL .
    CREATE OBJECT wa_custom_container
      EXPORTING
        container_name = wa_container.

    CREATE OBJECT alv_grid
      EXPORTING
        i_parent = wa_custom_container.

    "实例化方法
    CREATE OBJECT event_receiverundo.

    "新增按钮
    SET HANDLER event_receiverundo->handle_toolbar FOR alv_grid.
    SET HANDLER event_receiverundo->handle_ucomm FOR alv_grid.

    CALL METHOD alv_grid->set_table_for_first_display
      EXPORTING
        i_structure_name     = 'GS_MARA'
        is_layout            = gs_layout
        it_toolbar_excluding = gt_ui_func
      CHANGING
        it_outtab            = gt_mara
        it_fieldcatalog      = gt_fieldcat.
  ENDIF.

  PERFORM frm_refresh_alv USING alv_grid.


ENDFORM.

frm_test

类包含文件中的按钮例程,这里做一个简单的弹出提示好了

FORM frm_test .
  DATA: lv_answer    TYPE num4.

  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
*     TITLEBAR       = ' '
*     DIAGNOSE_OBJECT             = ' '
      text_question  = '按钮测试!'
      text_button_1  = '是'(001)
      icon_button_1  = 'ICON_CHECKED'
      text_button_2  = '否'(002)
      icon_button_2  = 'ICON_INCOMPLETE'
    IMPORTING
      answer         = lv_answer
    EXCEPTIONS
      text_not_found = 1
      OTHERS         = 2.
  IF sy-subrc = 0.
    IF lv_answer <> '1'.
      RETURN.
    ENDIF.
  ENDIF.

ENDFORM.
posted @ 2024-01-30 14:29  otowa  阅读(31)  评论(0编辑  收藏  举报