ABAPSALV 数据读取不限于 SALV

作者:ABAP猿 约 6 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
目录
ABAPSALV 数据读取不限于 SALV - 封面图
ABAPSALV 数据读取不限于 SALV - 封面图
ABAPSALV 数据读取不限于 SALV - 封面图
ABAPSALV 数据读取不限于 SALV - 封面图

点击上方 蓝字 关注我们

ABAPSALV 数据读取不限于 SALV - 封面图
ABAPSALV 数据读取不限于 SALV - 封面图
ABAPSALV 数据读取不限于 SALV - 封面图
ABAPSALV 数据读取不限于 SALV - 封面图

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展示的结果,这是一个非常 方便的技巧。为了方便演示这个功能,提供了一个单

独的测试程序,供你亲自尝试。

让我们一起动手,探索这个实用的技巧吧!

功能效果

ABAPSALV 数据读取不限于 SALV - 封面图
ABAPSALV 数据读取不限于 SALV - 封面图

第 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 .
ABAPSALV 数据读取不限于 SALV - 封面图
ABAPSALV 数据读取不限于 SALV - 封面图
ABAPSALV 数据读取不限于 SALV - 封面图
ABAPSALV 数据读取不限于 SALV - 封面图

源码分享

REPORT zsalv_deom NO STANDARD PAGE HEADING .

TYPES

BEGIN OF gty_spfli_incl ,

cbox TYPE c ,

END OF gty_spfli_incl .

DATA

BEGIN OF gs_spfli .

INCLUDE TYPE spfli . INCLUDE TYPE gty_spfli_incl .

DATA

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 .

DATA

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_salv

CHANGING

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 IMPLEMENTATION

INITIALIZATION .

sy \- title = 'ABAP SALV演示程序-公众号(ABAP猿)' .

START-OF-SELECTION .

SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_spfli UP TO

30 ROWS .

cl_salv_table => factory (

EXPORTING

r_container = cl_gui_container => default_screen

IMPORTING

r_salv_table = go_salv

CHANGING

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 .

PARAMETERS

r_rb1 RADIOBUTTON GRO

...

ABAP猿

关于作者:ABAP猿

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「ABAPSALV数据读取不限于SALV.md」整理生成,仅用于内部技术分享与学习交流。