OO实现ALV TABLE 五:ALV的栏位属性
ALV的欄位屬性是SAP提供的ALV功能的比較重要的一個,詳細的功能包括異常狀態(tài)圖標、圖標、符號、復(fù)選框、按鈕、熱點、超鏈接、單元格類型、單元格顏色、某一欄位顏色、某一行顏色,欄位隱藏等等。ALV的欄位功能主要是通過CL_SALV_COLUMN_TABLE和CL_SALV_COLUMNS_TABLE這兩個類的實現(xiàn)的。
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的實例,取指定的欄位的實例之后,你就可以對這個欄位的相關(guān)屬性進行設(shè)置。
DATA??lr_column TYPE REF TO cl_salv_column_table
??????lr_column???= lr_columns->get_column( 'MANDT' ).
?
2.?????取得指定的欄位的實例之后,在這個實例的基礎(chǔ)上進行相關(guān)的屬性設(shè)置。
a)?????????異常狀態(tài)圖標
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)?????復(fù)選框
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)?設(shè)置欄位顯示長度最優(yōu)化
lr_columns->set_optimize( 'X' ).
k)?設(shè)置標題欄是否可見
lr_columns->set_headers_visible( 'X' )
?
注:上面的所有欄位屬性設(shè)置都要需要在相應(yīng)的內(nèi)表字段設(shè)置相關(guān)的值,設(shè)置是否可見除外。
?
下面是效果圖
下面是程序的所有代碼:
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?????????"取得要顯示的數(shù)據(jù)
???????????????RETURNING value(lt_tab) TYPE ty_spfli,
?????????????alv_full????????"全屏Grid列表處理方法
???????????????IMPORTING value(lt_tab) TYPE ty_spfli,
?????????????column_setting, "設(shè)置字段屬性
?????????????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操作類(實現(xiàn))
*----------------------------------------------------------------------*
CLASS lcl_alv IMPLEMENTATION.
*取得要顯示的數(shù)據(jù)
??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.
?
????"循環(huán),為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
?
*輸出全屏網(wǎng)格列表的方法
??METHOD alv_full.
????DATA: lr_functions TYPE REF TO cl_salv_functions.
?
????"創(chuàng)建實例
????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' ).
?
????"設(shè)置欄位屬性
????me->column_setting( ).
?
????"顯示列表
????gr_table->display( ).
??ENDMETHOD.????????????????????"alv_full
?
*設(shè)置字段屬性
??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' ).???"設(shè)置標題欄是否可見
????lr_functional_settings = gr_table->get_functional_settings( ).
?
????TRY.
????????"設(shè)置欄位不可見
????????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( '' ).
????????"設(shè)置異常欄位
????????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' ).
????????"設(shè)置圖標欄位
????????lr_column ?= lr_columns->get_column( 'ICON' ).
????????lr_column->set_icon( 'X' ).
????????lr_column->set_long_text( 'ICON' ).
????????"設(shè)置符號欄位
????????lr_column ?= lr_columns->get_column( 'SYMBOL' ).
????????lr_column->set_symbol( 'X' ).
????????lr_column->set_long_text( 'SYMBOL' ).
????????"設(shè)置復(fù)選框欄位
????????lr_column ?= lr_columns->get_column( 'CHECKBOX' ).
????????lr_column->set_cell_type( if_salv_c_cell_type=>checkbox ).
????????lr_column->set_long_text( 'CHECKBOX' ).
????????"設(shè)置熱點
????????lr_column ?= lr_columns->get_column( 'HOTSPOT' ).
????????lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
????????lr_column->set_long_text( 'HOTSPOT' ).
????????"設(shè)置超鏈接
????????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.
????????"設(shè)置欄位顏色
????????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 ).
????????"設(shè)置行顏色
????????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
?
*主方法,整合數(shù)據(jù)
??METHOD main.
????DATA: lt_tab TYPE ty_spfli.
?
????"取得要顯示的數(shù)據(jù)
????lt_tab = me->getdata( ).
?
????me->alv_full( lt_tab ).
??ENDMETHOD.????????????????????"main
ENDCLASS.????????????????????"lcl_alv IMPLEMENTATION
?
?
*報表執(zhí)行
START-OF-SELECTION.
??DATA??lr_alv???TYPE REF TO lcl_alv.
??CREATE OBJECT lr_alv.
??lr_alv->main( ).
?
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的OO实现ALV TABLE 五:ALV的栏位属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。