Sorting in ALV always means that sort settings applied for exactly one column , if someone says that
an ALV display is sorted by 2 fields will simply means that the particular columns is sorted two times ., which is referres to as sort criteria . Sorting is very important functionality while reporting . Similar to filtering and aggregations , the user can do sorting programmatically as well as using the ALV
application toolbar functionality .
Similar to all other ALV applications , in order to create sorting you need to follow only 2 steps :
Step 1 : Get the object reference of class CL_SALV_SORTS by calling the method get_sorts( ) of classCL_SALV_TABLE.
lo_sorts = lo_alv->get_sorts( ).
STEP 2 : Call the add_sort( ) method of class CL_SALV_SORTS and passing the column name that
you want to sort as the parameter in our case it is BELNR (Document Number).
CALL METHOD lo_sorts->add_sort
EXPORTING
columnname = 'BELNR'.
Please refer to the following source codes :
*******************************************************************
*& Author : Roushan Kumar
*& Data : 13/06/2014
*& Description : Sorting in OO ALV
*******************************************************************
REPORT ztestr_alv_8.
TYPES : BEGIN OF gy_bseg,
bukrs TYPE bukrs,
belnr TYPE belnr_d,
gjahr TYPE gjahr,
buzei TYPE buzei,
wrbtr TYPE wrbtr,
END OF gy_bseg.
DATA : gt_bseg TYPE STANDARD TABLE OF gy_bseg INITIAL SIZE 1.
REFRESH : gt_bseg[].
SELECT bukrs belnr gjahr buzei wrbtr
FROM bseg
INTO TABLE gt_bseg
UP TO 10 ROWS.IF sy-subrc IS INITIAL.
SORT gt_bseg BY bukrs belnr gjahr buzei .
ENDIF.
DATA : lo_alv TYPE REF TO cl_salv_table.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = lo_alv
CHANGING
t_table = gt_bseg.
CATCH cx_salv_msg .ENDTRY.
*-- Sorting logic starts
DATA : lo_sorts TYPE REF TO cl_salv_sorts.
*-- Step 1 : get the cl_salv_sorts object ref.
lo_sorts = lo_alv->get_sorts( ).
**-- Step 2 : get sorting for column belnr
CALL METHOD lo_sorts->add_sort
EXPORTING
columnname = 'BELNR'.
*-- Sorting logic end
lo_alv->display( ).
OUTPUT :
|
Sorting in OO ALV |
You can also change the individual sortings for a particular column by just following the two steps similar
to above :
Step 1 : Get the object reference of class CL_SALV_SORT by calling the method get_sort( ) of classCL_SALV_SORTS and passing the column name as parameter .
lo_sort = lo_sorts->get_sort(
columnname = 'BELNR'
).
STEP 2 : Call the set_group ( ) method of class CL_SALV_SORT and passing the parameter .
lo_sort->set_group(
value = if_salv_c_sort=>group_with_underline
).
The value of interface constants that will pass as the parameter value of method set_group( ) with there
attributes are as follows :
Interface Constant
|
Attributes
|
IF_SALV_C_SORT=>GROUP_WITH_UNDER-LINE
|
Underlined
|
IF_SALV_C_SORT=>GROUP_WITH_NEW-PAGE
|
Page change
|
IF_SALV_C_SORT=>GROUP_NONE
|
No Display
|
Please refer to the below source codes :
*******************************************************************
*& Author : Roushan Kumar
*& Data : 13/06/2014
*& Description : Sorting in OO ALV
*******************************************************************
REPORT ztestr_alv_8.
TYPES : BEGIN OF gy_bseg,
bukrs TYPE bukrs,
belnr TYPE belnr_d,
gjahr TYPE gjahr,
buzei TYPE buzei,
wrbtr TYPE wrbtr,
END OF gy_bseg.
DATA : gt_bseg TYPE STANDARD TABLE OF gy_bseg INITIAL SIZE 1.
REFRESH : gt_bseg[].
SELECT bukrs belnr gjahr buzei wrbtr
FROM bseg
INTO TABLE gt_bseg
UP TO 10 ROWS.IF sy-subrc IS INITIAL.
SORT gt_bseg BY bukrs belnr gjahr buzei .
ENDIF.
DATA : lo_alv TYPE REF TO cl_salv_table.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = lo_alv
CHANGING
t_table = gt_bseg.
CATCH cx_salv_msg .ENDTRY.
*-- Sorting logic starts
DATA : lo_sorts TYPE REF TO cl_salv_sorts.
*-- Step 1 : get the cl_salv_sorts object ref.
lo_sorts = lo_alv->get_sorts( ).
**-- Step 2 : get sorting for column belnr
CALL METHOD lo_sorts->add_sort
EXPORTING
columnname = 'BELNR'
position = 1
group = if_salv_c_sort=>group_with_newpage.
DATA : lo_sort TYPE REF TO cl_salv_sort.
lo_sort = lo_sorts->get_sort(
columnname = 'BELNR'
).
lo_sort->set_group(
value = if_salv_c_sort=>group_none
).
*-- Sorting logic end
lo_alv->display( ).
OUTPUT :
|
Sorting in OO ALV |