ALV的欄位屬性是SAP提供的ALV功能的比較重要的一個,詳細的功能包括異常狀態圖標、圖標、符號、複選框、按鈕、熱點、超鏈接、單元格類型、單元格顏色、某一欄位顏色、某一行顏色,欄位隱藏等等。ALV的欄位功能主要是通過CL_SALV_COLUMN_TABLE和CL_SALV_COLUMNS_TABLE這兩個類的實現的。<?xml:namespace prefix = o />
1. 首先我們要取得類CL_SALV_COLUMNS_TABLE的實例。
DATA lr_columns TYPE REF TO cl_salv_columns_table.
lr_columns = gr_table->get_columns( ).
2然後通過類CL_SALV_COLUMNS_TABLE的方法get_column(value)取得指定的欄位的CL_SALV_COLUMN_TABLE的實例,取指定的欄位的實例之後,你就可以對這個欄位的相關屬性進行設置。
DATA lr_column TYPE REF TO cl_salv_column_table
lr_column ?= lr_columns->get_column( 'MANDT' ).
2. 取得指定的欄位的實例之後,在這個實例的基礎上進行相關的屬性設置。
a) 異常狀態圖標
lr_columns->set_exception_column( 'EXCEPTION' ).
lr_column ?= lr_columns->get_column( 'EXCEPTION' ).
lr_column->set_short_text( 'except' ).
b) 圖標
lr_column ?= lr_columns->get_column( 'ICON' ).
lr_column->set_icon( 'X' ).
lr_column->set_long_text( 'ICON' ).
c) 符號
lr_column ?= lr_columns->get_column( 'SYMBOL' ).
lr_column->set_symbol( 'X' ).
lr_column->set_long_text( 'SYMBOL' ).
d) 複選框
lr_column ?= lr_columns->get_column( 'CHECKBOX' ).
lr_column->set_cell_type( if_salv_c_cell_type=>checkbox ).
lr_column->set_long_text( 'CHECKBOX' ).
e) 熱點
lr_column ?= lr_columns->get_column( 'HOTSPOT' ).
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
lr_column->set_long_text( 'HOTSPOT' ).
f) 欄位不可見
lr_column ?= lr_columns->get_column( 'MANDT' ).
lr_column->set_visible( '' ).
g) 超鏈接
lr_columns->set_hyperlink_entry_column( 'T_HYPERLINK' ).
lr_column ?= lr_columns->get_column( 'HYPERLINK' ).
lr_column->set_cell_type( if_salv_c_cell_type=>link ).
lr_column->set_long_text( 'HYPERLINK' ).
lr_hyperlinks = lr_functional_settings->get_hyperlinks( ).
LOOP AT gt_hyperlink INTO wa_hyperlink.
lr_hyperlinks->add_hyperlink(
handle = wa_hyperlink-handle
hyperlink = wa_hyperlink-hyperlink ).
ENDLOOP.
h) 欄位顏色
lr_column ?= lr_columns->get_column( 'FLTIME' ).
ls_color-col = 6.
ls_color-int = 0.
ls_color-inv = 0.
lr_column->set_color( ls_color ).
i) 行顏色和單元格顏色
lr_columns->set_color_column( 'T_COLOR' ).
j) 設置欄位顯示長度最優化
lr_columns->set_optimize( 'X' ).
k) 設置標題欄是否可見
lr_columns->set_headers_visible( 'X' )
注:上面的所有欄位屬性設置都要需要在相應的內表字段設置相關的值,設置是否可見除外。
下面是效果圖
下面是程序的所有代碼:
REPORT y_xin_002.
*變量定義
INCLUDE <icon>.
INCLUDE <symbol>.
TYPES: BEGIN OF gs_spfli,
exception TYPE char1,
mandt TYPE spfli-mandt,
carrid TYPE spfli-carrid,
connid TYPE spfli-connid,
countryfr TYPE spfli-countryfr,
cityfrom TYPE spfli-cityfrom,
airpfrom TYPE spfli-airpfrom,
countryto TYPE spfli-countryto,
cityto TYPE spfli-cityto,
airpto TYPE spfli-airpto,
fltime TYPE spfli-fltime,
deptime TYPE spfli-deptime,
arrtime TYPE spfli-arrtime,
distance TYPE spfli-distance,
distid TYPE spfli-distid,
fltype TYPE spfli-fltype,
period TYPE spfli-period,
icon TYPE icon_d,
symbol TYPE icon_d,
checkbox TYPE char1,
hotspot TYPE icon_d,
hyperlink TYPE char255,
t_hyperlink TYPE salv_t_int4_column,
t_color TYPE lvc_t_scol,
t_celltype TYPE salv_t_int4_column,
END OF gs_spfli.
TYPES ty_spfli TYPE gs_spfli OCCURS 0.
DATA: gr_table TYPE REF TO cl_salv_table.
*----------------------------------------------------------------------*
* CLASS lcl_alv DEFINITION
*----------------------------------------------------------------------*
* ALV操作類(定義)
*----------------------------------------------------------------------*
CLASS lcl_alv DEFINITION.
PUBLIC SECTION.
METHODS: getdata "取得要顯示的數據
RETURNING value(lt_tab) TYPE ty_spfli,
alv_full "全屏Grid列表處理方法
IMPORTING value(lt_tab) TYPE ty_spfli,
column_setting, "設置字段屬性
main. "主方法
PRIVATE SECTION.
DATA: BEGIN OF wa_hyperlink,
handle TYPE salv_de_hyperlink_handle,
hyperlink TYPE service_rl,
END OF wa_hyperlink.
DATA gt_hyperlink LIKE TABLE OF wa_hyperlink.
ENDCLASS. "lcl_alv DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_alv IMPLEMENTATION
*----------------------------------------------------------------------*
* ALV操作類(實現)
*----------------------------------------------------------------------*
CLASS lcl_alv IMPLEMENTATION.
*取得要顯示的數據
METHOD getdata.
FIELD-SYMBOLS <fs_spfli> TYPE gs_spfli.
DATA: lwa_hyperlink TYPE LINE OF salv_t_int4_column,
lt_hyperlink LIKE TABLE OF lwa_hyperlink,
l_tabix TYPE sy-tabix,
ls_color TYPE lvc_s_scol,
lt_color TYPE lvc_t_scol,
ls_celltype TYPE salv_s_int4_column,
lt_celltype TYPE salv_t_int4_column.
DEFINE add_color.
clear ls_color.
ls_color-fname = &1.
ls_color-color-col = &2.
ls_color-color-int = 1.
ls_color-color-inv = 0.
ls_color-nokeycol = 'X'.
append ls_color to lt_color.
END-OF-DEFINITION.
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_tab FROM spfli.
"循環,爲EXCEPTION等欄位賦值
LOOP AT lt_tab ASSIGNING <fs_spfli>.
l_tabix = sy-tabix.
<fs_spfli>-exception = '3'.
<fs_spfli>-icon = icon_okay.
<fs_spfli>-symbol = sym_document.
<fs_spfli>-checkbox = 'X'.
<fs_spfli>-hotspot = icon_overview.
REFRESH lt_hyperlink.
lwa_hyperlink-value = l_tabix.
lwa_hyperlink-columnname = 'HYPERLINK'.
APPEND lwa_hyperlink TO lt_hyperlink.
<fs_spfli>-t_hyperlink = lt_hyperlink.
<fs_spfli>-hyperlink = 'www.sina.com.cn'.
wa_hyperlink-handle = l_tabix.
wa_hyperlink-hyperlink = 'www.sina.com.cn'.
APPEND wa_hyperlink TO gt_hyperlink.
REFRESH lt_color.
IF <fs_spfli>-distance >= 5000.
CLEAR ls_color.
ls_color-fname = 'DISTANCE'.
ls_color-color-col = 5.
ls_color-color-int = 1.
ls_color-color-inv = 0.
APPEND ls_color TO lt_color.
ENDIF.
CLEAR ls_color.
ls_color-fname = 'COUNTRYFR'.
ls_color-color-col = 5.
ls_color-color-int = 1.
ls_color-color-inv = 0.
APPEND ls_color TO lt_color.
IF <fs_spfli>-countryfr IS NOT INITIAL.
add_color 'EXCEPTION' 4.
add_color 'MANDT' 4.
add_color 'CARRID' 4.
add_color 'CONNID' 4.
add_color 'COUNTRYFR' 4.
add_color 'CITYFROM' 4.
add_color 'AIRPFROM' 4.
add_color 'COUNTRYTO' 4.
add_color 'CITYTO' 4.
add_color 'AIRPTO' 4.
add_color 'FLTIME' 4.
add_color 'DEPTIME' 4.
add_color 'ARRTIME' 4.
add_color 'DISTANCE' 4.
add_color 'DISTID' 4.
add_color 'FLTYPE' 4.
add_color 'PERIOD' 4.
add_color 'ICON' 4.
add_color 'SYMBOL' 4.
add_color 'CHECKBOX' 4.
add_color 'HOTSPOT' 4.
add_color 'HYPERLINK' 4.
ENDIF.
<fs_spfli>-t_color = lt_color.
ENDLOOP.
ENDMETHOD. "getdata
*輸出全屏網格列表的方法
METHOD alv_full.
DATA: lr_functions TYPE REF TO cl_salv_functions.
"創建實例
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_tab
).
CATCH cx_salv_msg.
ENDTRY.
"顯示ALV的標準功能
lr_functions = gr_table->get_functions( ).
lr_functions->set_all( 'X' ).
"設置欄位屬性
me->column_setting( ).
"顯示列表
gr_table->display( ).
ENDMETHOD. "alv_full
*設置字段屬性
METHOD column_setting.
DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column_table,
lr_functional_settings TYPE REF TO cl_salv_functional_settings,
lr_hyperlinks TYPE REF TO cl_salv_hyperlinks.
DATA: ls_color TYPE lvc_s_colo.
lr_columns = gr_table->get_columns( ).
lr_columns->set_optimize( 'X' ).
lr_columns->set_headers_visible( 'X' ). "設置標題欄是否可見
lr_functional_settings = gr_table->get_functional_settings( ).
TRY.
"設置欄位不可見
lr_column ?= lr_columns->get_column( 'MANDT' ).
lr_column->set_visible( '' ).
lr_column ?= lr_columns->get_column( 'PERIOD' ).
lr_column->set_visible( '' ).
lr_column ?= lr_columns->get_column( 'FLTYPE' ).
lr_column->set_visible( '' ).
lr_column ?= lr_columns->get_column( 'DISTID' ).
lr_column->set_visible( '' ).
lr_column ?= lr_columns->get_column( 'DEPTIME' ).
lr_column->set_visible( '' ).
lr_column ?= lr_columns->get_column( 'ARRTIME' ).
lr_column->set_visible( '' ).
"設置異常欄位
lr_columns->set_exception_column( 'EXCEPTION' ).
lr_column ?= lr_columns->get_column( 'EXCEPTION' ).
lr_column->set_short_text( 'except' ).
lr_column->set_medium_text( 'exception' ).
lr_column->set_long_text( 'my exception' ).
"設置圖標欄位
lr_column ?= lr_columns->get_column( 'ICON' ).
lr_column->set_icon( 'X' ).
lr_column->set_long_text( 'ICON' ).
"設置符號欄位
lr_column ?= lr_columns->get_column( 'SYMBOL' ).
lr_column->set_symbol( 'X' ).
lr_column->set_long_text( 'SYMBOL' ).
"設置複選框欄位
lr_column ?= lr_columns->get_column( 'CHECKBOX' ).
lr_column->set_cell_type( if_salv_c_cell_type=>checkbox ).
lr_column->set_long_text( 'CHECKBOX' ).
"設置熱點
lr_column ?= lr_columns->get_column( 'HOTSPOT' ).
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
lr_column->set_long_text( 'HOTSPOT' ).
"設置超鏈接
lr_columns->set_hyperlink_entry_column( 'T_HYPERLINK' ).
lr_column ?= lr_columns->get_column( 'HYPERLINK' ).
lr_column->set_cell_type( if_salv_c_cell_type=>link ).
lr_column->set_long_text( 'HYPERLINK' ).
lr_hyperlinks = lr_functional_settings->get_hyperlinks( ).
LOOP AT gt_hyperlink INTO wa_hyperlink.
lr_hyperlinks->add_hyperlink(
handle = wa_hyperlink-handle
hyperlink = wa_hyperlink-hyperlink ).
ENDLOOP.
"設置欄位顏色
lr_column ?= lr_columns->get_column( 'FLTIME' ).
ls_color-col = 6.
ls_color-int = 0.
ls_color-inv = 0.
lr_column->set_color( ls_color ).
"設置行顏色
lr_columns->set_color_column( 'T_COLOR' ).
CATCH cx_salv_not_found.
CATCH cx_salv_data_error.
CATCH cx_salv_existing.
ENDTRY.
ENDMETHOD. "column_setting
*主方法,整合數據
METHOD main.
DATA: lt_tab TYPE ty_spfli.
"取得要顯示的數據
lt_tab = me->getdata( ).
me->alv_full( lt_tab ).
ENDMETHOD. "main
ENDCLASS. "lcl_alv IMPLEMENTATION
*報表執行
START-OF-SELECTION.
DATA lr_alv TYPE REF TO lcl_alv.
CREATE OBJECT lr_alv.
lr_alv->main( ).