OO ALV 自定义按钮

DATA ok_code TYPE sy-ucomm.
CLASS lcl_event_receiver DEFINITION DEFERRED.
CLASS cl_gui_cfw DEFINITION LOAD.
CLASS cl_gui_container DEFINITION LOAD.

DATA: go_grid TYPE REF TO cl_gui_alv_grid,
      go_container TYPE REF TO cl_gui_custom_container,
      go_receiver TYPE REF TO lcl_event_receiver,
      gs_stbl TYPE lvc_s_stbl,
      gv_soft,
      gs_layout TYPE lvc_s_layo,
      gt_fieldcat TYPE lvc_t_fcat,
      gs_fieldcat TYPE lvc_s_fcat.
*-----------------------------------------------------------


DATA r_pernr TYPE RANGE OF persno WITH HEADER LINE.

*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.

  PUBLIC SECTION.

    METHODS:
    handle_toolbar
        FOR EVENT toolbar OF cl_gui_alv_grid
            IMPORTING e_object e_interactive,

    handle_user_command
        FOR EVENT user_command OF cl_gui_alv_grid
            IMPORTING e_ucomm.

ENDCLASS.                    "lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.

  METHOD handle_toolbar.

    DATA: ls_toolbar  TYPE stb_button.

    CLEAR ls_toolbar.
    MOVE 3 TO ls_toolbar-butn_type.
    APPEND ls_toolbar TO e_object->mt_toolbar.

    CLEAR ls_toolbar.
*    MOVE 'SEND' TO ls_toolbar-function.
    move 'SEL' to ls_toolbar-function.
    MOVE icon_ws_post TO ls_toolbar-icon.
    MOVE '生成员工总体培训计划' TO ls_toolbar-quickinfo.
    MOVE '生成' TO ls_toolbar-text.
*    MOVE ' ' TO ls_toolbar-disabled.
    APPEND ls_toolbar TO e_object->mt_toolbar.

  ENDMETHOD.                    "handle_toolbar
  METHOD handle_user_command.

    DATA: lt_rows TYPE lvc_t_row.
*    DATA lt_error LIKE TABLE OF gs_error.
    DATA LV_SUBRC TYPE SY-SUBRC.

    CASE e_ucomm.
*      WHEN 'SEND'.
      when 'SEL'.
        CALL METHOD go_grid->get_selected_rows
          IMPORTING
            et_index_rows = lt_rows.
        CALL METHOD cl_gui_cfw=>flush.
        IF lt_rows[] IS NOT INITIAL.
*          PERFORM selection_lines TABLES lt_rows
*                                         Gt_error.
          REFRESH GT_ERROR.
          PERFORM selection_lines1 TABLES lt_rows
                                          Gt_error
                                   CHANGING LV_SUBRC.
          IF GT_ERROR[] IS NOT INITIAL.
             CALL SCREEN 300 STARTING AT 5 5
                               ENDING AT 100 20.
          ELSE.
            IF LV_SUBRC = 0.
             MESSAGE '成功' TYPE 'S'.
            ENDIF.
          ENDIF.
*             PERFORM SEND_EMAIL.
        ELSE.
          MESSAGE '请选择有效行' TYPE 'S'.
        ENDIF.
    ENDCASE.
  ENDMETHOD.                           "handle_user_command
*-----------------------------------------------------------------
ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
TABLES: pa0002, hrp1000, pa9602, pa0001, hrp9825.
*PARAMETERS P_PERNR TYPE PERSNO MATCHCODE OBJECT PREM obligatory.
*SELECT-OPTIONS s_pernr FOR pa0001-pernr MATCHCODE OBJECT prem NO INTERVALS.
SELECTION-SCREEN BEGIN OF SCREEN 1100 AS WINDOW.
PARAMETERS: p_begda TYPE begda OBLIGATORY,
            p_year type ZZTEYJND as listbox VISIBLE LENGTH 10,
            p_mon type ZZTEYJYF as listbox VISIBLE LENGTH 8.
SELECTION-SCREEN END OF SCREEN 1100.

START-OF-SELECTION.

GET pernr.

  rp-provide-from-last p0002 space pn-begda pn-endda.
  CHECK pnp-sw-found = 1.
  r_pernr-sign = 'I'.
  r_pernr-option = 'EQ'.
  r_pernr-low = p0002-pernr.
  APPEND r_pernr.

END-OF-SELECTION.
  IF r_pernr[] IS INITIAL.
    MESSAGE '没有数据' TYPE 'S'.
    STOP.
  ENDIF.
  PERFORM get_data.
  CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  status_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STA_0100'.
  CLEAR ok_code.
  SET TITLEBAR 'TIT_0100'.
  IF go_grid IS NOT BOUND.
    CREATE OBJECT go_grid
      EXPORTING
        i_parent = cl_gui_container=>screen0.
    gs_layout-sel_mode = 'A'.
    gs_layout-cwidth_opt = 'X'.

    PERFORM get_fieldcatalog.   "填充标题

    CALL METHOD go_grid->set_table_for_first_display
      EXPORTING
        is_layout       = gs_layout
      CHANGING
        it_outtab       = gt_output[]
        it_fieldcatalog = gt_fieldcat.
    CREATE OBJECT go_receiver.
    SET HANDLER go_receiver->handle_user_command FOR go_grid.
    SET HANDLER go_receiver->handle_toolbar FOR go_grid.
    CALL METHOD go_grid->set_toolbar_interactive.

  ELSE.
    gs_stbl-row = 'X'.
    gs_stbl-col = 'X'.
    gv_soft = 'X'.
    CALL METHOD go_grid->refresh_table_display
      EXPORTING
        is_stable      = gs_stbl
        i_soft_refresh = gv_soft.
  ENDIF.
ENDMODULE.                 " status_0100  OUTPUT
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值