记录ABAP开发的日常——cl_salv_table的使用案例


前言:遇到一个需求,双击汇总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的功能还有很多,这里面只写了目前我所需要的,有空的话后续还可以继续研究。