Code snippet to dynamically sort a dynamically generated internal table.
Below code used RTTI classes to get structure of table and then prepares internal table of type ABAP_SORTORDER_TAB which is then used to SORT this internal table.
REPORT zpw_test1.
DATA : lref TYPE REF TO data .
FIELD-SYMBOLS <fs_table> TYPE STANDARD TABLE .
*--------------------------------------------------------------------*
* Start-of-Selection
*--------------------------------------------------------------------*
START-OF-SELECTION .
CREATE DATA lref TYPE STANDARD TABLE OF mara .
ASSIGN lref->* TO <fs_table> .
PERFORM sort_table USING <fs_table> .
*&---------------------------------------------------------------------*
*& Form SORT_TABLE
*&---------------------------------------------------------------------*
* Sort Dynamic Internal Table
*----------------------------------------------------------------------*
FORM sort_table USING pt_table TYPE STANDARD TABLE ..
DATA : lo_table TYPE REF TO cl_abap_tabledescr,
lo_struc TYPE REF TO cl_abap_structdescr,
li_components TYPE abap_component_tab,
ls_component TYPE abap_componentdescr,
li_otab TYPE abap_sortorder_tab,
ls_otab TYPE abap_sortorder.
lo_table ?= cl_abap_typedescr=>describe_by_data( pt_table ).
lo_struc ?= lo_table->get_table_line_type( ).
li_components = lo_struc->get_components( ).
LOOP AT li_components INTO ls_component .
CLEAR ls_otab .
ls_otab-name = ls_component-name .
* Put X in DESCENDING to override default ASCENDING order
* ls_otab-descending = abap_true .
ls_otab-astext = abap_true .
APPEND ls_otab TO li_otab .
ENDLOOP.
SORT pt_table BY (li_otab) .
ENDFORM. " SORT_TABLE