Generic sorting in OData

Definition

    CLASS-METHODS orderby
      IMPORTING
        !it_order TYPE /iwbep/t_mgw_tech_order
      CHANGING
        !ct_data  TYPE STANDARD TABLE .

Implementation Old ABAP Syntax

  METHOD orderby.

    DATA: lt_otab  TYPE abap_sortorder_tab,
          ls_oline TYPE abap_sortorder.
    DATA: ls_order LIKE LINE OF it_order.

    LOOP AT it_order INTO ls_order.
      ls_oline-name = ls_order-property.
      TRANSLATE ls_oline-name TO UPPER CASE.             "#EC TRANSLANG
      IF ls_order-order = 'desc'.
        ls_oline-descending = 'X'.
      ENDIF.
      APPEND ls_oline TO lt_otab.
      CLEAR ls_oline.
    ENDLOOP.

    SORT ct_data BY (lt_otab).

  ENDMETHOD.

Implementation New ABAB Syntax

  METHOD orderby.
  
      DATA(lt_sort) = VALUE abap_sortorder_tab( FOR lv_order IN it_order
                                                ( name = to_upper( lv_order-property )
                                                  descending = COND #( WHEN lv_order-order = 'desc'
                                                                       THEN abap_true
                                                                       ELSE abap_false ) ) ).

    SORT ct_data BY (lt_sort).

  ENDMETHOD.

Example

    DATA : lt_orderby  TYPE /iwbep/t_mgw_tech_order.

*--- Sort
    lt_orderby = io_tech_request_context->get_orderby( ).
    orderby(
      EXPORTING
        it_order = lt_orderby
      CHANGING
        ct_data  = et_entityset
    ).

Leave a Reply

Your email address will not be published. Required fields are marked *