当前位置: 首页 > news >正文

SAP-ABAP-SLAV用法

SALV 是 SAP ALV 显示的第三代技术,第一代 REUSE_ALV_LIST_DISPLAY / REUSE_GRID__DISPLAY 是基于函数的,第二代 cl_gui_alv_grid 使用面向对象的方式,但必须有一个 container (使用dialog screen),第三代 cl_salv_table 也是基于面向对象,使用起来更加简单。756版本之前不能编辑,这是它的一个缺点,756 版本之后可以编辑。

1、使用 SALV 显示数据

使用 SALV 显示数据,需要两个步骤:

1)通过 cl_salv_table 的 factory 方法构建一个 salv 对象,传入内表

2)通过 cl_salv_table 的实例方法 display() 显示数据

image

 

REPORT ztest01.SELECT * FROM spfli UP TO 20 ROWS
INTO TABLE @DATA(lt_spfli).TRY.cl_salv_table=>factory(IMPORTINGr_salv_table   = DATA(lo_salv)CHANGINGt_table        = lt_spfli).lo_salv->display(  ).CATCH cx_salv_msg INTO DATA(lo_exception).DATA(lv_msg) = lo_exception->get_text(  ).MESSAGE lv_msg TYPE 'I'.
ENDTRY.

image

 

2、工具栏

上图的 SALV 没有工具栏,这是因为 cl_salv_table 在面向对象的思想下,工具栏被实现为单独的对象 cl_salv_functions_list 。

image

 

image

 在程序的 display()之前,添加下面的代码:

REPORT ztest01.SELECT * FROM spfli UP TO 20 ROWS
INTO TABLE @DATA(lt_spfli).TRY.cl_salv_table=>factory(IMPORTINGr_salv_table   = DATA(lo_salv)CHANGINGt_table        = lt_spfli).
"___________________________________________________________" 显示工具栏lo_salv->get_functions( )->set_all(  ).
"___________________________________________________________lo_salv->display(  ).CATCH cx_salv_msg INTO DATA(lo_exception).DATA(lv_msg) = lo_exception->get_text(  ).MESSAGE lv_msg TYPE 'I'.
ENDTRY.

3、显示设置

SALV 显示设置的类是 CL_SALV_DISPLAY_SETTINGS,cl_salv_table 的 get_display_settings() 方法获取。CL_SALV_DISPLAY_SETTINGS 的重要方法包括:

  • 是否显示垂直线 (SET_VERTICAL_LINES)
  • 是否显示水平线 (SET_HORIZONTAL_LINES)
  • 条纹显示(SET_STRIPED_PATTERN)
  • 设置 ALV 标题 (SET_LIST_HEADER)
" 条纹显示
data(lo_display_settings) = lo_salv->get_display_settings(  ).
lo_display_settings->set_striped_pattern( abap_true ).

4、字段设置

cl_salv_table 的 get_columns() 方法获取所有列(类型为 cl_salv_columns_table),cl_salv_columns_table 的 get_column() 方法得到某一列。

" 字段名设置data(lo_column) = lo_salv->get_columns(  )->get_column( 'CONNID' ).lo_column->set_short_text( '航班' ).lo_column->set_medium_text( '航班' ).lo_column->set_long_text( '航班' )." 自适应列宽lo_salv->get_columns(  )->set_optimize( 'X' )." 隐藏某列data(lo_hide_col) = lo_salv->get_columns(  )->get_column( 'PERIOD' ).lo_hide_col->set_visible( abap_false ).

5、字段排序

字段排序通过类 CL_SALV_SORTS 来实现。

" 按列排序
lo_salv->get_sorts( )->add_sort( 'CONNID' ).

6、允许保存布局

*     Layut saving
*----------------------------------------------data(lo_layout) = lo_salv->get_layout( )." set layout keylo_layout->set_key( value #( report = sy-repid ) )." Allow variant saving" remove restriction on saving layoutslo_layout->set_save_restriction( if_salv_c_layout=>restrict_none )." Set initial layoutlo_layout->set_initial_layout( 'Z01' )." Allow setting layouts as default layoutslo_layout->set_default( abap_true ).

7、热点

热点的列在下面有超链接的下划线,通过事件可以设置点击的动作。

" Register hotspot columndata(lo_hotspot_col) = lo_salv->get_columns(  )->get_column( 'CARRID' ).data(lo_hotspot_table) = cast cl_salv_column_table( lo_hotspot_col ).lo_hotspot_table->set_cell_type( if_salv_c_cell_type=>hotspot ).

现在在 CARRID 列,已经有了下划线的超链接,但点击没有反应。我们还需要定义类来处理 cl_salv_events_table 的 link_click 事件。

第一步:定义事件处理类

class lcl_event_handler definition.public section.methods on_link_clickfor event link_click of cl_salv_events_tableimporting row column.
endclass.class lcl_event_handler implementation.method on_link_click." Handle hotspot clickdata(lv_msg) = | Row: { row } Column: { column } |.message lv_msg type 'I'.endmethod.
endclass.

第二步:实例化 lcl_event_hander

data(lo_event_handler) = new lcl_event_handler(  ).

第三步:将 lo_event_hander 注册为处理 CL_SALV_EVENTS_TABLE 的 link_click 事件处理器

data(lo_events) = lo_salv->get_event( ).
set handler lo_event_handler->on_link_click for lo_events.

8、设置合计列

" 合计列
lo_salv->get_aggregations( )->add_aggregation(columnname  = 'DISTANCE'aggregation = if_salv_c_aggregation=>total ).

 

http://www.jsqmd.com/news/522143/

相关文章:

  • 从零实现富文本编辑器#12-React可编辑节点的组件预设
  • 2026 年贵州 PE 管优质实力厂家盘点 靠谱可靠品牌选购指南 - 深度智识库
  • 立足成都,服务四川:2026年辐射防护铅门、铅玻璃、硫酸钡板实力厂家口碑盘点与推荐 - 速递信息
  • 2026年GEO优化服务商深度技术测评:五家厂商全链路解决方案拆解 - 品牌推荐
  • 常州编织袋自动切缝机口碑好的厂家有哪些 - myqiye
  • 2026中小企业CRM深度横评:从客户管理到外勤管理的全维度对决 - jfjfkk-
  • 聊聊2026年佛山口碑好的蜂鸣器厂家,靠谱之选怎么选择 - 工业品网
  • 2026年给袋式包装机选购攻略,推荐好用的厂商 - 工业品网
  • 回收新手指南:让瑞祥卡变现更实惠 - 团团收购物卡回收
  • 分析广东优质开箱机厂家,哪家品牌靠谱且性价比高? - mypinpai
  • 2026年GEO行业深度观察:AI流量争夺下的五大服务商实力解析 - 品牌推荐
  • 2026年办理分离压力容器制造许可证,好用的公司有哪些 - 工业推荐榜
  • 办公室、学校、企业彩色复印机短期租赁哪家靠谱?2026年四川本地实力供应商排名与选择指南 - 速递信息
  • 分析2026年松万机械设备,服务水平怎样产品精度高不高有答案 - 工业推荐榜
  • 2026年2月国内较优陀螺仪生产厂家推荐及分析,MEMS惯性传感器/惯性导航系统(INS),陀螺仪源头厂家有哪些 - 品牌推荐师
  • 2026年年度排名,乌鲁木齐靠谱的防腐木隔音木屋 - 工业设备
  • 2026客户管理系统选型指南:10款CRM从销售全链路到自动化运营对比 - jfjfkk-
  • 题集:洛谷 P1843 奶牛晒衣服
  • 在 SAP Fiori 开发里理解 Atom 与 JSON:看懂 OData 数据表达方式的取舍逻辑
  • 本地商家别做“无效种草”!3个常见错误,避开立刻提升转化 - Redbook_CD
  • 聊聊2026年吐鲁番防腐木木屋定制,靠谱的厂家怎么选择 - 工业品牌热点
  • 拒绝隐患!贵州PE管怎么选?这6家本地源头厂家闭眼入(附案例) - 深度智识库
  • 2026八大品牌深度解析:企业级CRM全链路选型指南 - jfjfkk-
  • 从产品到服务:贵州钢丝网骨架管企业竞争力榜单与采购参考 - 深度智识库
  • FreeRTOS在3D打印固件中的实时性工程实践
  • Redis 面试题(最新版)
  • 上海修表地址汇总|2026高端奢华腕表维修科普,六城正规门店全攻略(含故障解析) - 时光修表匠
  • 还有哪些招聘网站比较好?2026靠谱平台热搜榜单 - 博客万
  • 2026年选制袋机看这里,半自动、来图定制和培训服务靠谱吗 - myqiye
  • 北京高端腕表洗油推荐:从百达翡丽到欧米茄的科学养护与品牌专属方案 - 时光修表匠