The OData query options supported by SAP Gateway belong to either of these categories:
They are automatically available in the framework, no further actions needed by development.
They are available, but they require implementation efforts from development.
OData Query Options |
Additional Implementation Needed |
---|---|
$select |
no |
$count |
no |
$expand |
no |
$format |
no |
Read $links |
no |
$value |
no |
$orderby |
yes |
$top |
yes |
$skip |
yes |
$filter |
yes |
$inlinecount |
yes |
$skiptoken |
yes |
Query Options: No Additional Implementation Needed
The following framework query options are available automatically:
$select
Request example:
https://<server>:<port>/.../<service_name>/Products?$select=Category,Name
$count
Request example:
https://<server>:<port>/.../<service_name>/Products?$count
$expand
Request example:
https://<server>:<port>/.../<service_name>/Suppliers?$expand=Products
$format
Request example:
https://<server>:<port>/.../<service_name>/Products?$format=json
Read $links
Request example:
https://<server>:<port>/.../<service_name>/Products('1000')/$links/Category
$value
Request example:
https://<server>:<port>/.../<service_name>/Products('1000')/Name/$value
Query Options Requiring Implementation
The following query options can be used, but they require implementation efforts by development:
$orderby
Request example:
https://<server>:<port>/.../<service_name>/Products?$orderby=Category desc
$top
Request example:
https://<server>:<port>/.../<service_name>/Products?$top=5
$skip
Request example:
https://<server>:<port>/.../<service_name>/Products?$skip=10&$top=5
$filter
Request example:
https://<server>:<port>/.../<service_name>/Products?$filter=Category eq 'Notebooks'
$inlinecount
Request example:
https://<server>:<port>/.../<service_name>/Products?$inlinecount=allpages
$skiptoken
Request example:
https://<server>:<port>/.../<service_name>/Products?$skiptoken=20
Implementation example:
METHOD products_get_entityset. DATA: lt_return TYPE TABLE OF bapiret2, lt_filter TYPE /iwbep/t_mgw_select_option, ls_filter TYPE /iwbep/s_mgw_select_option, lt_category_filter TYPE STANDARD TABLE OF bapi_epm_product_categ_range, ls_category_filter TYPE bapi_epm_product_categ_range, ls_sel_option TYPE /iwbep/s_cod_select_option, lv_top TYPE int4, lv_skip TYPE int4, lv_skiptoken TYPE int4, lt_entityset TYPE zcl_zag_product_mpc=>tt_product, ls_entity TYPE zcl_zag_product_mpc=>ts_product, lt_orderby TYPE /iwbep/t_mgw_tech_order, ls_orderby TYPE /iwbep/s_mgw_tech_order, lv_count TYPE i. * Filter lt_filter = io_tech_request_context->get_filter( )->get_filter_select_options( ). LOOP AT lt_filter INTO ls_filter WHERE property EQ 'CATEGORY'. LOOP AT ls_filter-select_options INTO ls_sel_option. CLEAR ls_category_filter. MOVE-CORRESPONDING ls_sel_option TO ls_category_filter. APPEND ls_category_filter TO lt_category_filter. ENDLOOP. ENDLOOP. CALL FUNCTION 'BAPI_EPM_PRODUCT_GET_LIST' TABLES headerdata = lt_entityset selparamcategories = lt_category_filter return = lt_return. * Order By lt_orderby = io_tech_request_context->get_orderby( ). READ TABLE lt_orderby INTO ls_orderby INDEX 1. IF sy-subrc EQ 0. IF ls_orderby-order EQ 'desc'. CASE ls_orderby-property. WHEN 'PRODUCT_ID'. SORT lt_entityset BY product_id DESCENDING. WHEN 'NAME'. SORT lt_entityset BY name DESCENDING. WHEN 'CATEGORY'. SORT lt_entityset BY category DESCENDING. ENDCASE. ELSEIF ls_orderby-order EQ 'asc'. CASE ls_orderby-property. WHEN 'PRODUCT_ID'. SORT lt_entityset BY product_id ASCENDING. WHEN 'NAME'. SORT lt_entityset BY name ASCENDING. WHEN 'CATEGORY'. SORT lt_entityset BY category ASCENDING. ENDCASE. ENDIF. ENDIF. * paging lv_top = io_tech_request_context->get_top( ). lv_skip = io_tech_request_context->get_skip( ) + 1. "Client Paging (top/skip) IF lv_top IS NOT INITIAL OR lv_skip NE 1. LOOP AT lt_entityset INTO ls_entity FROM lv_skip. APPEND ls_entity TO et_entityset. ADD 1 TO lv_count. IF lv_count = lv_top. EXIT. ENDIF. ENDLOOP. ELSE. "No Paging et_entityset = lt_entityset. ENDIF. "Server Paging (skiptoken) lv_skiptoken = io_tech_request_context->get_skiptoken( ). * for server paging functionality (not implemented in this example) * you need to return a fixed size of entries (e.g. 100) and fill export parameter * es_response_context-skiptoken * Inlinecount IF io_tech_request_context->has_inlinecount( ) = abap_true. DESCRIBE TABLE et_entityset LINES es_response_context-inlinecount. ELSE. CLEAR es_response_context-inlinecount. ENDIF. ENDMETHOD.