十九、SALV 自定义按钮事件(EVENT)[added_function]
创始人
2024-06-03 08:53:36

自定义按钮事件(EVENT)[added_function]

一、主要功能

  1. 在GUI Status加入自定义按钮后,可以通过注册事件(event) ‘added_function’,并且在对应的handler method中写入相关逻辑,来实现点击按钮后的逻辑。

  2. 事件added_function是在类cl_salv_events中:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s9GbwRNG-1678760212879)(D:\学习计划笔记\SALV\IMAGE\image-20220418152142332.png)]

二、实现与代码

  1. 事件注册代码:

    *... §6 register to the events of cl_salv_tableDATA: lo_events TYPE REF TO cl_salv_events.lo_events = o_alv->get_event( ).CREATE OBJECT o_events.*... §6.1 register to the event USER_COMMANDSET HANDLER o_events->on_user_command FOR lo_events.
    
  2. handler 方法的代码:

    * 事件class
    CLASS lcl_handle_events DEFINITION.PUBLIC SECTION.METHODS:on_user_command FOR EVENT added_function OF cl_salv_eventsIMPORTING e_salv_function.
    ENDCLASS.                    "lcl_handle_events DEFINITIONCLASS lcl_handle_events IMPLEMENTATION.METHOD on_user_command.IF  e_salv_function = '&DIS'.MESSAGE 'dipslay button' TYPE 'I'.ENDIF.ENDMETHOD.                    "on_user_commandENDCLASS.
    
  3. 完整代码如下:参考代码

    *&---------------------------------------------------------------------*
    *& 一个简单的通过类CL_SALV_TABLE生成SALV的例子
    *&---------------------------------------------------------------------*
    REPORT zabap_salv19.*
    *   定义SALV输出内表
    TYPES: BEGIN OF ty_vbak,vbeln TYPE vbak-vbeln,erdat TYPE erdat,auart TYPE auart,kunnr TYPE kunnr,END OF ty_vbak.
    *
    DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.
    * 事件class
    CLASS lcl_handle_events DEFINITION.PUBLIC SECTION.METHODS:on_user_command FOR EVENT added_function OF cl_salv_eventsIMPORTING e_salv_function.
    ENDCLASS.                    "lcl_handle_events DEFINITIONCLASS lcl_handle_events IMPLEMENTATION.METHOD on_user_command.CASE e_salv_function.WHEN  '&DIS'.PERFORM print_data.WHEN  '&COL'.MESSAGE 'dipslay button COL' TYPE 'I'.WHEN OTHERS. MESSAGE 'dipslay button ALL' TYPE 'I'.ENDCASE.
    *      data lv_index type i.
    *      i = lines( o_alv ).
    *       BREAK-POINT.ENDMETHOD.                    "on_user_commandENDCLASS.
    *----------------------------------------------------------------------*
    *       CLASS lcl_report DEFINITION
    *----------------------------------------------------------------------*
    CLASS lcl_report DEFINITION.
    *PUBLIC SECTION.
    *
    *   ALV referenceDATA: o_alv TYPE REF TO cl_salv_table.
    *DATA: o_events TYPE REF TO lcl_handle_events.METHODS:
    *     抽取数据get_data,
    *
    *     生成输出内容generate_output.
    *
    *$*$*.....CODE_ADD_1 - Begin..................................1..*$*$*
    *
    * 定义private method来设定SALV不同特性PRIVATE SECTION.METHODS:set_pf_status CHANGING co_alv TYPE REF TO cl_salv_table.
    *$*$*.....CODE_ADD_1 - End....................................1..*$*$*ENDCLASS.                    "lcl_report DEFINITION*----------------------------------------------------------------------*
    *       CLASS lcl_report IMPLEMENTATION
    *----------------------------------------------------------------------*
    * 类实现
    CLASS lcl_report IMPLEMENTATION.
    *METHOD get_data.
    *   抽取数据SELECT vbelnerdatauartkunnrINTO TABLE t_vbakFROM vbakUP TO 70 ROWS.
    *ENDMETHOD.                    "get_data*.......................................................................METHOD generate_output.
    *   New ALV instance
    *   We are calling the static Factory method which will give back
    *   the ALV object reference.
    *
    * exception classDATA: lx_msg TYPE REF TO cx_salv_msg.TRY.cl_salv_table=>factory(IMPORTINGr_salv_table = o_alvCHANGINGt_table      = t_vbak ).CATCH cx_salv_msg INTO lx_msg.ENDTRY.
    *
    *$*$*.....CODE_ADD_2 - Begin..................................2..*$*$*
    *
    *    In this area we will call the methods which will set the
    *      different properties to the ALV
    *   调用status设置方法CALL METHOD set_pf_statusCHANGINGco_alv = o_alv.
    *$*$*.....CODE_ADD_2 - End....................................2..*$*$*
    *
    *
    *... §6 register to the events of cl_salv_tableDATA: lo_events TYPE REF TO cl_salv_events.lo_events = o_alv->get_event( ).CREATE OBJECT o_events.*... §6.1 register to the event USER_COMMANDSET HANDLER o_events->on_user_command FOR lo_events.*   调用Display方法将数据输出到屏幕上o_alv->display( ).
    *ENDMETHOD.                    "generate_output
    *
    *$*$*.....CODE_ADD_3 - Begin..................................3..*$*$*
    *
    *    In this area we will implement the methods which are defined in
    *      the class definition
    * status设置方法实现METHOD set_pf_status.*   调用自定义pf statusco_alv->set_screen_status(pfstatus      =  'STANDARD_FULLSCREEN'"Status名称report        =  'ZABAP_SALV19'"程序名set_functions = co_alv->c_functions_all ).ENDMETHOD.
    *$*$*.....CODE_ADD_3 - End....................................3..*$*$*
    *
    ENDCLASS.                    "lcl_report IMPLEMENTATIONSTART-OF-SELECTION.DATA: lo_report TYPE REF TO lcl_report.CREATE OBJECT lo_report.
    * 抽取数据lo_report->get_data( ).
    * 生成SALVlo_report->generate_output( ).
    *&---------------------------------------------------------------------*
    *& Form PRINT_DATA
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *& -->  p1        text
    *& <--  p2        text
    *&---------------------------------------------------------------------*
    FORM print_data .data lv_index type i.lv_index = lines( t_vbak ).MESSAGE 'dipslay button COL' && lv_index TYPE 'I'.
    ENDFORM.
    

三、执行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8S9qGceX-1678760212880)(D:\学习计划笔记\SALV\IMAGE\image-20220418162425373.png)]

相关内容

热门资讯

拉普拉斯涨3.98%,成交额4... 1月12日,拉普拉斯涨3.98%,成交额4.67亿元,换手率5.30%,总市值162.90亿元。异动...
舜禹股份涨1.29%,成交额2... 1月12日,舜禹股份涨1.29%,成交额2917.80万元,换手率2.75%,总市值22.84亿元。...
天溯计量涨0.00%,成交额2... 1月12日,天溯计量涨0.00%,成交额2.53亿元,换手率21.68%,总市值54.94亿元。异动...
港迪技术涨0.82%,成交额4... 1月12日,港迪技术涨0.82%,成交额4858.19万元,换手率2.68%,总市值39.86亿元。...
颀中科技涨0.52%,成交额2... 1月12日,颀中科技涨0.52%,成交额2.09亿元,换手率4.27%,总市值160.28亿元。异动...