前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ALV面向对象方法研究:添加自定义工具栏(三)

ALV面向对象方法研究:添加自定义工具栏(三)

作者头像
SAP梦心
发布2022-05-10 14:08:07
6280
发布2022-05-10 14:08:07
举报
文章被收录于专栏:SAP梦心的SAP分享

      本文主要讲解添加自定义工具栏。

      跟双击一样,添加自定义的工具栏其实也是在CLASS里面添加方法并实现之。

      引进图标:      

代码语言:javascript
复制
INCLUDE <ICON>.

      定义:

代码语言:javascript
复制
* 定义事件属性跟方法
  CLASS LCL_EVENT_RECEIVER DEFINITION.
    PUBLIC SECTION.
      METHODS:
*     双击方法
      HANDLE_DOUBLE_CLICK
      FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
      IMPORTING E_ROW E_COLUMN,
*     按钮处理方法
      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

实现:

代码语言:javascript
复制
*----------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
  CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
* 双击方法实现
    METHOD HANDLE_DOUBLE_CLICK.
      PERFORM GETRECORD USING E_ROW-INDEX E_COLUMN-FIELDNAME.
    ENDMETHOD.                    "HANDLE_DOUBLE_CLICK
* 处理按钮事件
    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 'SHOW_DETA' TO LS_TOOLBAR-FUNCTION.
*图标,可以用SHOWICON系统程序查阅使用的图标
      MOVE ICON_PPE_ENODE TO LS_TOOLBAR-ICON.
*按钮文本和提示
      MOVE '明细显示' TO LS_TOOLBAR-QUICKINFO.
      MOVE '明细显示'(112) 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.
      CASE E_UCOMM.
* 定义的按钮事件
        WHEN 'SHOW_DETA'.
*取得所有选择行
          CALL METHOD GR_ALVGRID->GET_SELECTED_ROWS
            IMPORTING
              ET_INDEX_ROWS = LT_ROWS.
          CALL METHOD CL_GUI_CFW=>FLUSH.
          IF SY-SUBRC EQ 0.
* 提示成功
            MESSAGE  '已经选择行!' TYPE 'S'.
*调用子程序显示行内容
            PERFORM  READDATA TABLES LT_ROWS.
          ENDIF.
      ENDCASE.
    ENDMETHOD.                    "HANDLE_USER_COMMAND                   "HANDLE_DOUBLE_CLICK
  ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION


* 显示选择行内容模版
  FORM READDATA TABLES P_ET_INDEX_ROWS STRUCTURE LVC_S_ROW.
* 定义选择行
    DATA: LS_SELECTED_LINE LIKE LVC_S_ROW,
          LF_ROW_INDEX TYPE LVC_INDEX.
*定义合并字段及分割字段
    DATA: S1(200) TYPE C,
          S2(3)  TYPE C.
    S2 = '-'.
*读取所有选择行
    LOOP AT P_ET_INDEX_ROWS INTO LS_SELECTED_LINE.
      LF_ROW_INDEX = LS_SELECTED_LINE-INDEX.
* 从内表中按顺序读取内容
      READ TABLE IT_SFLIGHT INDEX LF_ROW_INDEX.
      S1 = '选择行内容:'.
*  合并
      CONCATENATE S1 IT_SFLIGHT-CONNID IT_SFLIGHT-CARRID
      INTO S1 SEPARATED BY S2.
* 弹出窗口提示
      MESSAGE S1 'I'.
    ENDLOOP.
  ENDFORM.                   

当然,最后还得在刷新alv前添加:

代码语言:javascript
复制
*   将用户交互事件分配ALV
      SET HANDLER EVENT_RECEIVER->HANDLE_USER_COMMAND FOR GR_ALVGRID.
*   将按钮相关事件分配ALV
      SET HANDLER EVENT_RECEIVER->HANDLE_TOOLBAR FOR GR_ALVGRID.
*   调用处理工具条处理方法,使自定义工具条生效
      CALL METHOD GR_ALVGRID->SET_TOOLBAR_INTERACTIVE.
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档