点击上方 蓝字 关注我们
Cherish forever what makes you unique, cuz you’re really a yawn if it goes.
感恩让能你与众不同的一切,因为失去这些差异你将会过的索然无味。
功能说明
上篇: [ ABAP SALV-刷新、弹框
](http://mp.weixin.qq.com/s?__biz=Mzg3OTE2Njg0OQ==&mid=2247493898&idx=1&sn=80f4a87920a0deda2906c932e7cbd111&chksm=cf0a3de4f87db4f2a83bdf6318d30d95fbdd1ce68195ab988a8648d01d8027183cf32a050d07&scene=21#wechat_redirect)
本系列将通过模拟用户与开发者之间的对话场景, 来逐步演示SALV的使用。在本篇中,我们将延续前文内容,解决用户最新提出的需求。
今天我们将探讨SALV模 型中另一个非常实用的功能:直接读取其它程序ALV展示的结果,这是一个非常 方便的技巧。为了方便演示这个功能,提供了一个单
独的测试程序,供你亲自尝试。
让我们一起动手,探索这个实用的技巧吧!
功能效果
第 22 天 用户说
航班信息不直接从底表SFLIGHT取了,改从报表xxx直接读取ALV结果。
"读取ALV数据
IF p_day22 = 'X' .
cl_salv_bs_runtime_info => set (EXPORTING
display = ''
metadata = ''
data = 'X'
).
SUBMIT zsalv_test01 WITH r_rb1 = 'X'WITH r_rb2 = '' WITH r_rb3 = ''
WITH r_rb4 = '' WITH r_rb5 = ''
WITH s_carrid IN rt_carrid
WITH s_connid IN rt_connid
AND RETURN .
TRY .DATA lo_data TYPE REF TO data .
FIELD-SYMBOLS <data> LIKE lt_sflight .
cl_salv_bs_runtime_info => get_data_ref (IMPORTING
r_data = lo_data).
ASSIGN lo_data -> * TO <data> .
IF <data> IS ASSIGNED .
APPEND LINES OF <data> TO lt_sflight .
ENDIF .
CATCH cx_salv_bs_sc_runtime_info .
ENDTRY .cl_salv_bs_runtime_info => clear_all ( ).
cl_salv_bs_runtime_info => clear_error ( ).
ENDIF .源码分享
REPORT zsalv_deom NO STANDARD PAGE HEADING .BEGIN OF gty_spfli_incl ,
cbox TYPE c ,
END OF gty_spfli_incl .BEGIN OF gs_spfli .
INCLUDE TYPE spfli .
INCLUDE TYPE gty_spfli_incl .END OF gs_spfli ,gt_spfli LIKE TABLE OF gs_spfli ,
go_salv TYPE REF TO cl_salv_table .
*----------------------------------------------------------------------*
• CLASS lcl_evt_handler DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
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_added_function "新增按钮点击FOR EVENT added_function OF cl_salv_events_table
IMPORTING e_salv_function .
ENDCLASS . "lcl_evt_handler DEFINITION*----------------------------------------------------------------------*
• CLASS lcl_evt_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_evt_handler IMPLEMENTATION .
METHOD on_link_click .MESSAGE i001 ( 00 ) WITH 'on_link_click:' row ' - ' column .
CASE column .
WHEN 'CBOX' .
FIELD-SYMBOLS <spfli> LIKE gs_spfli .
READ TABLE gt_spfli ASSIGNING <spfli> INDEX row .
IF <spfli> \- cbox = 'X' .<spfli> \- cbox = '' .
ELSE .
<spfli> \- cbox = 'X' .
ENDIF ."刷新ALV
DATA ls_stable TYPE lvc_s_stbl .
ls_stable \- row = 'X' .
ls_stable \- col = 'X' .go_salv -> refresh (
EXPORTING
s_stable = ls_stable
refresh_mode = if_salv_c_refresh => soft).
WHEN OTHERS .
ENDCASE .
ENDMETHOD . "on_link_click
METHOD on_added_function .MESSAGE i001 ( 00 ) WITH 'on_added_function:' e_salv_function .
CASE e_salv_function .
WHEN 'DISP' .
DATA lt_sflight TYPE TABLE OF sflight .
rt_carrid TYPE RANGE OF sflight \- carrid ,
rs_carrid LIKE LINE OF rt_carrid ,
rt_connid TYPE RANGE OF sflight \- connid ,
rs_connid LIKE LINE OF rt_connid .
LOOP AT gt_spfli INTO gs_spfli WHERE cbox = 'X' .CLEAR rs_carrid .
rs_carrid \- sign = 'I' .
rs_carrid \- option = 'EQ' .
rs_carrid \- low = gs_spfli \- carrid .
APPEND rs_carrid TO rt_carrid .CLEAR rs_connid .
rs_connid \- sign = 'I' .
rs_connid \- option = 'EQ' .
rs_connid \- low = gs_spfli \- connid .
APPEND rs_connid TO rt_connid .
ENDLOOP .*------------------------------------*
"读取ALV数据
cl_salv_bs_runtime_info => set (EXPORTING
display = ''
metadata = ''
data = 'X'
).
SUBMIT zsalv_test01 WITH r_rb1 = 'X'WITH r_rb2 = '' WITH r_rb3 = ''
WITH r_rb4 = '' WITH r_rb5 = ''
WITH s_carrid IN rt_carrid
WITH s_connid IN rt_connid
AND RETURN .
TRY .DATA lo_data TYPE REF TO data .
FIELD-SYMBOLS <data> LIKE lt_sflight .
cl_salv_bs_runtime_info => get_data_ref (IMPORTING
r_data = lo_data).
ASSIGN lo_data -> * TO <data> .
IF <data> IS ASSIGNED .
APPEND LINES OF <data> TO lt_sflight .
ENDIF .
CATCH cx_salv_bs_sc_runtime_info .
ENDTRY .cl_salv_bs_runtime_info => clear_all ( ).
cl_salv_bs_runtime_info => clear_error ( ).*------------------------------------*
DATA lo_salv TYPE REF TO cl_salv_table .
DATA lo_functions_list TYPE REF TO cl_salv_functions_list .
DATA lo_columns_table TYPE REF TO cl_salv_columns_table .
TRY .
cl_salv_table => factory (IMPORTING
r_salv_table = lo_salvCHANGING
t_table = lt_sflight).
CATCH cx_salv_msg .
ENDTRY .lo_salv -> set_screen_popup (
EXPORTING
start_column = 5
end_column = 100
start_line = 5
end_line = 25
).
lo_functions_list = lo_salv -> get_functions ( ).
lo_columns_table = lo_salv -> get_columns ( ).lo_functions_list -> set_default ( 'X' ).
lo_columns_table -> set_optimize ( 'X' ).
lo_salv -> display ( ).
WHEN OTHERS .
ENDCASE .
ENDMETHOD . "on_added_function
ENDCLASS . "lcl_evt_handler IMPLEMENTATIONINITIALIZATION .
sy \- title = 'ABAP SALV演示程序-公众号(ABAP猿)' .
START-OF-SELECTION .
SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_spfli UP TO30 ROWS .
cl_salv_table => factory (EXPORTING
r_container = cl_gui_container => default_screenIMPORTING
r_salv_table = go_salvCHANGING
t_table = gt_spfli
).
*------------------------------------*
DATA lo_display TYPE REF TO cl_salv_display_settings .
lo_display = go_salv -> get_display_settings ( ).lo_display -> set_striped_pattern ( 'X' ).
*------------------------------------*
DATA lo_functions TYPE REF TO cl_salv_functions .
lo_functions = go_salv -> get_functions ( ).lo_functions -> set_all ( 'X' ).
lo_functions -> add_function (
EXPORTING
name = 'DISP'
icon = '@7T@'
text = '航班信息'
tooltip = '所选航线的航班信息'
position = if_salv_c_function_position => right_of_salv_functions).
*------------------------------------*
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_added_function FOR lo_events_table .
*------------------------------------*
DATA lo_columns TYPE REF TO cl_salv_columns_table .
DATA lo_column TYPE REF TO cl_salv_column_table .
lo_columns = go_salv -> get_columns ( ).lo_columns -> set_optimize ( 'X' ).
lo_columns -> set_column_position ( columnname = 'CBOX' position = 1).
lo_column ?= lo_columns -> get_column ( columnname = 'CBOX' ).lo_column -> set_short_text ( '选择' ).
lo_column -> set_medium_text ( '选择' ).
lo_column -> set_long_text ( '选择' ).
lo_column -> set_alignment ( if_salv_c_alignment => centered ).
lo_column -> set_cell_type ( if_salv_c_cell_type => checkbox_hotspot ).*------------------------------------*
go_salv -> display ( ).
cl_abap_list_layout => suppress_toolbar ( ).
WRITE : space .
REPORT zsalv_test01 NO STANDARD PAGE HEADING .TABLES sflight .
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE f1 .
SELECT-OPTIONS :s_carrid FOR sflight \- carrid , "航线
s_connid FOR sflight \- connid . "航班号
SELECTION-SCREEN END OF BLOCK b1 .SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE f2 .r_rb1 RADIOBUTTON GRO
...