ALV with user defined menu on toolbar

本文介绍了一个使用ABAP编程语言实现的带有自定义菜单工具栏的ALV(Application List Viewer)组件示例。该示例展示了如何在ALV网格视图中集成工具栏,并通过事件处理来响应用户的菜单选择操作。通过定义事件接收器类来处理用户交互,包括点击工具栏按钮和菜单项等行为。

By Swarna S, Tata Consultancy Services

REPORT ZALV_INTMENUTOOL.
*Author : Swarna.S.
*AS : Simple ALV with user defined menu in toolbar
* Published at SAPTechnical.COM
*Class declarations
CLASS lcl_event_receiver DEFINITION DEFERRED.
*type pool declarations
TYPE-POOLS : icon.
*Internal table and work area declarations for dd02l
DATA: it_dd02l   TYPE TABLE OF dd02l,
      wa_dd02l TYPE dd02l.
*Data declaration for alv.
DATA :it_layout   TYPE lvc_s_layo,
      it_toolbar  TYPE stb_button,
      c_alv  TYPE REF TO cl_gui_alv_grid,
      custom_container TYPE REF TO cl_gui_custom_container,
      event_receiver TYPE REF TO lcl_event_receiver.
*Select options multiple values no ranges
SELECT-OPTIONS : s_table FOR wa_dd02l-tabname NO INTERVALS.
*Initialization event
INITIALIZATION.
*Start of selection event
START-OF-SELECTION.
*sUBROUTINE FOR ALV DISPLAY
  PERFORM alvdisplay.
*Class definition
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
*handling toolbar for interactive
     handle_toolbar
        FOR EVENT toolbar OF cl_gui_alv_grid
            IMPORTING e_object e_interactive,
*handling menu button
     handle_menu_button
        FOR EVENT menu_button OF cl_gui_alv_grid
            IMPORTING e_object e_ucomm,
*On click of the menu button
    handle_user_command
        FOR EVENT user_command OF cl_gui_alv_grid
            IMPORTING e_ucomm.
  PRIVATE SECTION.
ENDCLASS.                    "lcl_event_receiver DEFINITION
*Class implementation
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_toolbar.
* handle toolbar
    CLEAR it_toolbar.
    MOVE 'DETAIL' TO it_toolbar-function.
    MOVE icon_detail TO it_toolbar-icon.
    MOVE 2 TO it_toolbar-butn_type.
    APPEND it_toolbar TO e_object->mt_toolbar.
  ENDMETHOD.                    "handle_toolbar
  METHOD handle_menu_button.
* handle own menubuttons
    IF e_ucomm = 'DETAIL'.
      CALL METHOD e_object->add_function
        EXPORTING
          fcode = 'DISPLAY'
          text  = 'DISPLAY'.
    ENDIF.
  ENDMETHOD.                    "handle_menu_button
  METHOD handle_user_command.
*On click
    CASE e_ucomm.
      WHEN 'DISPLAY'.
        MESSAGE 'Menu Clicked' TYPE 'I'.
    ENDCASE.
  ENDMETHOD.                           "handle_user_command
ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
*&-----------------------------------------------------------------*
*&      Module  PBO  OUTPUT
*&-----------------------------------------------------------------*
*       text
*------------------------------------------------------------------*
MODULE pbo OUTPUT.
  IF custom_container IS INITIAL.
* select data from table dd02l
    PERFORM fetch_dd02l.
* create a custom container control for our ALV Control
    CREATE OBJECT custom_container
        EXPORTING
            container_name = 'CCONT'.
* create an instance of alv control
    CREATE OBJECT c_alv
           EXPORTING i_parent = custom_container.
* Set a titlebar for the grid control
    it_layout-grid_title = 'TABLE DETAILS'.
*ALV display
    CALL METHOD c_alv->set_table_for_first_display
      EXPORTING
        i_structure_name = 'dd02l'
        is_layout        = it_layout
      CHANGING
        it_outtab        = it_dd02l.
*Handlers for the events
    CREATE OBJECT event_receiver.
    SET HANDLER event_receiver->handle_user_command
                event_receiver->handle_menu_button
                event_receiver->handle_toolbar FOR ALL INSTANCES.
*Calling the interactive toolbar method of ALV
    CALL METHOD c_alv->set_toolbar_interactive.
  ENDIF.
ENDMODULE.                             " PBO  OUTPUT
*&-----------------------------------------------------------------*
*&      Module  PAI  INPUT
*&-----------------------------------------------------------------*
*       text
*-----------------------------------------------------------------*
MODULE pai INPUT.
ENDMODULE.                             " PAI  INPUT
*&----------------------------------------------------------------*
*&      form fetch_dd02l
*&----------------------------------------------------------------*
*       text
*-----------------------------------------------------------------*
*Subroutine to fetch data
FORM fetch_dd02l.
  SELECT * FROM dd02l INTO CORRESPONDING FIELDS OF TABLE it_dd02l 
  WHERE  tabname IN s_table.
ENDFORM.                               " SELECT_TABLE_dd02l
*&-----------------------------------------------------------------*
*&      Form  ALVDISPLAY
*&-----------------------------------------------------------------*
*       text
*------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*------------------------------------------------------------------*
FORM alvdisplay .
* ALV output
  SET SCREEN 600.
ENDFORM.                    " ALVDISPLAY

Selection screen 

 

On F8, 

 

 

On clicking the DISPLAY

(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值