The OData query options supported by SAP NetWeaver 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 |
The following framework query options are available automatically:
$select
Syntax
Request example:
https://<server>:<port>/.../<service_name>/Products?$select=Category,Name
$count
Syntax
Request example:
https://<server>:<port>/.../<service_name>/Products?$count
$expand
Syntax
Request example:
https://<server>:<port>/.../<service_name>/Suppliers?$expand=Products
$format
Syntax
Request example:
https://<server>:<port>/.../<service_name>/Products?$format=json
Read $links
Syntax
Request example:
https://<server>:<port>/.../<service_name>/Products('1000')/$links/Category
$value
Syntax
Request example:
https://<server>:<port>/.../<service_name>/Products('1000')/Name/$value
The following query options can be used, but they require implementation efforts by development:
$orderby
Syntax
Request example:
https://<server>:<port>/.../<service_name>/Products?$orderby=Category desc
$top
Syntax
Request example:
https://<server>:<port>/.../<service_name>/Products?$top=5
$skip
Syntax
Request example:
https://<server>:<port>/.../<service_name>/Products?$skip=10&$top=5
$filter
Syntax
Request example:
https://<server>:<port>/.../<service_name>/Products?$filter=Category eq 'Notebooks'
$inlinecount
Syntax
Request example:
https://<server>:<port>/.../<service_name>/Products?$inlinecount=allpages
$skiptoken
Syntax
Request example:
https://<server>:<port>/.../<service_name>/Products?$skiptoken=20
Syntax
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_product_mpc=>tt_product, ls_entity TYPE zcl_product_mpc=>ts_product, lv_table_size TYPE i, lt_orderby TYPE /iwbep/t_mgw_tech_order, ls_orderby TYPE /iwbep/s_mgw_tech_order. * Filter lt_filter = io_tech_request_context->get_filter( )->get_filter_select_options( ). LOOP AT lt_filter INTO ls_filter. IF ls_filter-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. ENDIF. 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( ). "Client Paging (top/skip) IF lv_top IS NOT INITIAL OR lv_skip IS NOT INITIAL. LOOP AT lt_entityset INTO ls_entity. IF sy-tabix > lv_skip. APPEND ls_entity TO et_entityset. DESCRIBE TABLE et_entityset LINES lv_table_size. IF lv_top IS NOT INITIAL AND lv_table_size >= lv_top. EXIT. ENDIF. ENDIF. ENDLOOP. "No Paging ELSE. 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.