效果: carrid 列的第二行 设置为热键,
CONNID 第三行设置为button
code:
*&---------------------------------------------------------------------*
*& Report ZLM_ALV_009
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zlm_alv_009
.
*
CLASS lcl_report
DEFINITION
.
*
PUBLIC
SECTION
.
TYPES
:
BEGIN
OF spfli_struc
.
INCLUDE
TYPE spfli
.
TYPES
: i_celltype
TYPE salv_t_int4_column
,
END
OF spfli_struc
.
DATA
: gt_spfli
TYPE
STANDARD
TABLE
OF spfli_struc
.
* ALV reference
DATA
: o_alv
TYPE
REF
TO cl_salv_table
.
METHODS
:
get_data
,
" data selection
generate_output
.
" Generating output
*
PRIVATE
SECTION
.
METHODS
:
set_columns
.
" Set columns
ENDCLASS .
"lcl_report DEFINITION
*
*
START-OF-SELECTION .
DATA
: lo_report
TYPE
REF
TO lcl_report
.
*
CREATE OBJECT
lo_report
.
lo_report
->get_data
(
)
.
lo_report
->generate_output
(
)
.
*
CLASS lcl_report
IMPLEMENTATION
.
*
METHOD get_data
.
* data selection
SELECT *
FROM spfli
INTO CORRESPONDING
FIELDS
OF
TABLE gt_spfli
.
FIELD-SYMBOLS
: 《lfs_spfli》
LIKE
LINE
OF gt_spfli
.
DATA
: lt_celltype
TYPE salv_t_int4_column
.
DATA
: ls_celltype
LIKE
LINE
OF lt_celltype
.
LOOP
AT gt_spfli
ASSIGNING 《lfs_spfli》
.
CLEAR
: lt_celltype
.
* Only CARRID for 2nd record
IF sy
-tabix
=
2
.
ls_celltype
-columnname
=
'CARRID'
.
ls_celltype
-
value
= if_salv_c_cell_type
=>
hotspot
.
APPEND ls_celltype
TO lt_celltype
.
* Only CONNID for 3rd record
ELSEIF sy
-tabix
=
3
.
ls_celltype
-columnname
=
'CONNID'
.
ls_celltype
-
value
= if_salv_c_cell_type
=>button
.
APPEND ls_celltype
TO lt_celltype
.
* Entire 5th record
ELSEIF sy
-tabix
=
5
.
ls_celltype
-columnname
=
".
ls_celltype
-
value
= if_salv_c_cell_type
=>
hotspot
.
APPEND ls_celltype
TO lt_celltype
.
ENDIF
.
《lfs_spfli》
-i_celltype
= lt_celltype
.
ENDLOOP
.
ENDMETHOD
.
"get_data
*
METHOD generate_output
.
* New ALV instance
DATA
: lx_msg
TYPE
REF
TO cx_salv_msg
.
TRY
.
cl_salv_table
=>factory
(
IMPORTING
r_salv_table
= o_alv
CHANGING
t_table
= gt_spfli
)
.
CATCH cx_salv_msg
INTO lx_msg
.
ENDTRY
.
*
* Setting up the Columns
me
->set_columns
(
)
.
* Displaying the ALV
o_alv
->display
(
)
.
ENDMETHOD
.
"generate_output
*
METHOD set_columns
.
*
*...Get all the Columns
DATA
: lo_cols
TYPE
REF
TO cl_salv_columns_table
.
lo_cols
= o_alv
->get_columns
(
)
.
*
* set the Column optimization
lo_cols
->set_optimize
(
'X'
)
.
* Set the Cell Type
TRY
.
lo_cols
->set_cell_type_column
(
'I_CELLTYPE'
)
.
CATCH cx_salv_data_error
.
"#EC NO_HANDLER
ENDTRY
.
ENDMETHOD
.
"SET_COLUMNS
*
*
ENDCLASS .
"lcl_report IMPLEMENTATION
*&
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT
*
CLASS
*
*
*
ENDCLASS .
*
*
START-OF-SELECTION .
*
*
CLASS
*
*
*
*
*
*
*
*
*
*
*
*
*...Get
*
*
*
*
*
ENDCLASS .