# ABAP SALV-选择模式、触发事件
原创 猿ABAP [ ABAP猿 ](javascript:void\(0\);)
__ _ _ _ _
点击上方 蓝字 关注我们
Everything that has a beginning has an end.
世间万物有始皆有终。
上篇: [ ABAP SALV-页眉、页脚
](http://mp.weixin.qq.com/s?__biz=Mzg3OTE2Njg0OQ==&mid=2247493492&idx=1&sn=a8a0126ed2adb0f66d073ab2a0d94c31&chksm=cf0a339af87dba8c58811e22511a19917fe000986b772b5e87c1f23040c36ba9e7bb89024bd1&scene=21#wechat_redirect)
本系列将通过模拟用户与开发者之间的对话场景, 来逐步演示SALV的使用。在本篇中,我们将延续前文内容,解决用户最新提出的需求,并同时介绍 SALV部分
事件 的 触发时机 ,为后续新增功能的实现提供必要的知识储备 **。** 让我们一起来探索吧。
赶紧动手试一试 ,以便更好地掌握这些新的知识点。
第 12 天 用户说
现在每次只能复制单行数据,我想选择多行进行复制。
IF p_day12 EQ 'X' .DATA lo_selections TYPE REF TO cl_salv_selections .
lo_selections = go_salv -> get_selections ( ).
lo_selections -> set_selection_mode ( if_salv_c_selection_mode => cell )....
ENDIF .第 13 天 用户说
用户今天啥也没说,你来研究下SALV的触发事件吧!
IF p_day13 EQ 'X' .DATA lo_events_table TYPE REF TO cl_salv_events_table .
lo_events_table = go_salv -> get_event ( ).DATA lo_evt_handler TYPE REF TO lcl_evt_handler .
CREATE OBJECT lo_evt_handler .
SET HANDLER lo_evt_handler -> on_link_click FOR lo_events_table .
SET HANDLER lo_evt_handler -> on_double_click FOR lo_events_table .
SET HANDLER lo_evt_handler -> on_added_function FOR lo_events_table .
SET HANDLER lo_evt_handler -> before_salv_function FOR lo_events_table .
SET HANDLER lo_evt_handler -> after_salv_function FOR lo_events_table .
...
ENDIF .CLASS lcl_evt_handler DEFINITION .PUBLIC SECTION .
METHODS on_link_click "单击(热点)FOR EVENT link_click OF cl_salv_events_table
IMPORTING row column .
METHODS on_double_click "双击FOR EVENT double_click OF cl_salv_events_table
IMPORTING row column .
METHODS on_added_function "新增按钮点击FOR EVENT added_function OF cl_salv_events_table
IMPORTING e_salv_function .
METHODS before_salv_function "标准按钮点击前FOR EVENT before_salv_function OF cl_salv_events_table
IMPORTING e_salv_function .
METHODS after_salv_function "标准按钮点击后FOR EVENT after_salv_function OF cl_salv_events_table
IMPORTING e_salv_function .
ENDCLASS .CLASS lcl_evt_handler IMPLEMENTATION .
METHOD on_link_click .MESSAGE i001 ( 00 ) WITH 'on_link_click:' row ' - ' column .
ENDMETHOD .
METHOD on_double_click .MESSAGE i001 ( 00 ) WITH 'on_double_click:' row ' - ' column .
ENDMETHOD .
METHOD on_added_function .MESSAGE i001 ( 00 ) WITH 'on_added_function:' e_salv_function .
ENDMETHOD .
METHOD before_salv_function .MESSAGE i001 ( 00 ) WITH 'before_salv_function:' e_salv_function .
ENDMETHOD .
METHOD after_salv_function .MESSAGE i001 ( 00 ) WITH 'after_salv_function:' e_salv_function .
ENDMETHOD .
ENDCLASS .SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1 .
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1 ( 79 ) day01 .
SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1 ( 79 ) day02 .
SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1 ( 79 ) day03 .
SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1 ( 79 ) day04 .
SELECTION-SCREEN END OF LINE ....
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1 ( 79 ) day12 .
SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1 ( 79 ) day13 .
SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN END OF BLOCK b1 .SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t2 .PARAMETERS p_day01 AS CHECKBOX DEFAULT 'X' . "01、基本展示
PARAMETERS p_day02 AS CHECKBOX DEFAULT 'X' . "02、外观设置
PARAMETERS p_day03 AS CHECKBOX DEFAULT 'X' . "03、列设置
PARAMETERS p_day04 AS CHECKBOX DEFAULT 'X' . "04、按钮设置
...
PARAMETERS p_day12 AS CHECKBOX DEFAULT 'X' . "12、选择模式
PARAMETERS p_day13 AS CHECKBOX DEFAULT 'X' . "13、触发事件
SELECTION-SCREEN END OF BLOCK b2 .INITIALIZATION .
sy \- title = 'ABAP SALV演示程序-公众号(ABAP猿)' .
t1 = '用户说' .
t2 = '你来做' .
day01 = '01、从表SPFLI获取数据,并进行基本展示。' .
day02 = '02、能否修改下抬头标题文本,并斑马纹展示?' .
day03 = '03、能否优化下列宽?' .
day04 = '04、怎么没有应用工具栏按钮,能加上吗?' .
...
day12 = '12、现在每次只能复制单行数据,我想选择多行进行复制。' .
day13 = '13、用户今天啥也没说,你来研究下SALV的触发事件吧!' .
%_p_day01_%_app_% \- text = '01、基本展示' .
%_p_day02_%_app_% \- text = '02、外观设置' .
%_p_day03_%_app_% \- text = '03、列设置' .
%_p_day04_%_app_% \- text = '04、按钮设置' .
...
%_p_day12_%_app_% \- text = '12、选择模式' .
%_p_day13_%_app_% \- text = '13、触发事件' .
START-OF-SELECTION .
*------------------------------------*
CHECK p_day01 EQ 'X' .
DATA gt_spfli TYPE TABLE OF spfli .
SELECT * FROM spfli INTO TABLE gt_spfli UP TO 30 ROWS .DATA go_salv TYPE REF TO cl_salv_table .
cl_salv_table => factory (IMPORTING
r_salv_table = go_salvCHANGING
t_table = gt_spfli ).
...
*------------------------------------*
IF p_day02 EQ 'X' .DATA lo_display TYPE REF TO cl_salv_display_settings .
lo_display = go_salv -> get_display_settings ( ).lo_display -> set_list_header ( 'ABAP SALV演示程序-公众号(ABAP猿)' ).
lo_display -> set_striped_pattern ( 'X' ).
...
ENDIF .*------------------------------------*
IF p_day03 EQ 'X' .DATA lo_columns TYPE REF TO cl_salv_columns_table .
lo_columns = go_salv -> get_columns ( ).lo_columns -> set_optimize ( 'X' ).
...
IF p_day13 = 'X' .DATA lo_column TYPE REF TO cl_salv_column_table .
lo_column ?= lo_columns -> get_column ( columnname = 'CARRID' ).
lo_column -> set_cell_type ( if_salv_c_cell_type => hotspot ).
ENDIF .
ENDIF .*------------------------------------*
IF p_day04 EQ 'X' .DATA lo_functions TYPE REF TO cl_salv_functions .
lo_functions = go_salv -> get_functions ( ).lo_functions -> set_all ( 'X' ).
...
ENDIF .*------------------------------------*
...
*------------------------------------*
IF p_day12 EQ 'X' .DATA lo_selections TYPE REF TO cl_salv_selections .
lo_selections = go_salv -> get_selections ( ).
lo_selections -> set_selection_mode ( if_salv_c_selection_mode => cell )....
ENDIF .*------------------------------------*
IF p_day13 EQ 'X' .DATA lo_events_table TYPE REF TO cl_salv_events_table .
lo_events_table = go_salv -> get_event ( ).DATA lo_evt_handler TYPE REF TO lcl_evt_handler .
CREATE OBJECT lo_evt_handler .
SET HANDLER lo_evt_handler -> on_link_click FOR lo_events_table .
SET HANDLER lo_evt_handler -> on_double_click FOR lo_events_table .
SET HANDLER lo_evt_handler -> on_added_function FOR lo_events_table .
SET HANDLER lo_evt_handler -> before_salv_function FOR lo_events_table .
SET HANDLER lo_evt_handler -> after_salv_function FOR lo_events_table .
...
ENDIF .*------------------------------------*
go_salv -> display ( ).
• * *
**小贴士:**
• **** 可使用BC_DATA_GEN生成数据,以便查看演示效果;
• 以上纯属个人总结,如有纰漏请联系我,谢谢;
以上是今日分享,希望对你有所帮助~~~
欢迎点赞、留言、分享
.textContent = new Date().getFullYear();