前言:遇到一个需求,双击汇总ALV的某一行,穿透到第二屏显示明细ALV界面,之前是通过调用两次ALV函数实现该效果,但是这次想换另一种方式实现,恰好在网上看到cl_salv_table的使用案例,于是研究了下,正好在我的项目中用到,下面说下用法。
cl_salv_table使用
1.简单使用步骤:
"只需要简单的几行代码,就可实现如下效果"
CALL METHOD cl_salv_table=>factory
* EXPORTING
* LIST_DISPLAY = IF_SALV_C_BOOL_SAP=>FALSE
* R_CONTAINER =
* CONTAINER_NAME =
IMPORTING
r_salv_table = DATA(lo_salv) "方法生成的ALV容器对象"
CHANGING
t_table = gt_data5. "alv展示的数据"
lo_salv->get_functions_base( )->set_all( ). "设置默认按键
lo_salv->display( ). "调用显示方法"
2.效果
当然现在你所看到的效果肯定不是这么简单的几行代码的作用,列颜色、抬头都需要单独设置。
3.设置列颜色
DATA:color TYPE lvc_s_colo . "列颜色
DATA:lr_cols TYPE REF TO cl_salv_columns_table, "所有列实例"
lr_col TYPE REF TO cl_salv_column_table. "单个列实例"
"设置字段目录
"获取所有列实例对象
lr_cols = lo_salv->get_columns( ).
"设置自适应宽度"
lr_cols->set_optimize( 'X' ).
"获取EQUNR 的列实例"
lr_col ?= lr_cols->get_column('EQUNR').
"设置列EQUNR的属性"
lr_col->set_long_text( '设备号' ).
lr_col->set_medium_text( '设备号' ).
lr_col->set_short_text( '设备号' ).
color-col = '1'.
color-int = '0'.
color-inv = '0'.
"设置列颜色"
lr_col->set_color( color ).
4.隐藏列
"有时候有些列是不需要显示在ALV界面上的,可以使用下面代码,隐藏掉它(但是在布局中还是可以看见)"
lr_col->set_visible( value = if_salv_c_bool_sap=>false ).
"如果在布局中也不想看见,则使用下面这段代码"
lr_col->set_technical( 'X' ).
5.设置表头
"设置表头
DATA: lo_header TYPE REF TO cl_salv_form_layout_grid,
lo_h_header TYPE REF TO cl_salv_form_header_info,
lo_h_flow TYPE REF TO cl_salv_form_layout_flow.
* header object
CREATE OBJECT lo_header.
lo_h_header = lo_header->create_header_information( row = 1 column = 1 ).
IF p_r1 EQ 'X'.
lo_h_header->set_text( '根据设备号统计-明细' ).
ELSE.
lo_h_header->set_text( '根据计划员组统计-明细' ).
ENDIF.
lo_h_flow = lo_header->create_flow( row = 2 column = 1 ).
lo_h_flow->create_text( text = '领料成本根据领料过账日期统计,委外服务成本根据委外服务采购订单发票过账日期统计' ).
lo_salv->set_top_of_list( lo_header ).
lo_salv->set_top_of_list_print( lo_header ).
6.其他
当然cl_salv_table的功能还有很多,这里面只写了目前我所需要的,有空的话后续还可以继续研究。