We have lots of Query option in OData service. When I started learning SAP gateway I couldn’t get half of the queries, so thought of writing a blog explaining the most used queries in the odata service for the people who are trying to learn gateway and also for my future reference :wink:
So first let us list the Query options in odata service that are often used and their uses.
Query Option | Description | Implementation Required |
$format | Return the response in particular format(JSON/XML/ATOM) without access to request headers for standard content-type negotiation. Example : https://<server>:<port>/.../<service_name>/Products?$format=json | No |
$count | Return the number of entries in the selection path. Example: https://<server>:<port>/.../<service_name>/Products?$count | No |
$Select | Return the entities listed in the value of the select query. Example: https://<server>:<port>/.../<service_name>/Products?$select=Category,Name | No |
$link | Returns the entities list for the navigation property specified in the link. Example: https://<server>:<port>/.../<service_name>/Products('1000')/$links/Category | No |
$expand | Returns the entities list for the navigation property specified by the value of expand. We can specify multiple navigation property separated by comma or ‘/’. Example : https://<server>:<port>/.../<service_name>/Suppliers?$expand=Category,Products | No |
$value | Return the raw value of a single entity without any formatting Example : https://<server>:<port>/.../<service_name>/Products('1000')/Name/$value | No |
$top | Return the response with N entries of the entity set specified in the URI. Used for client side Paging Example : https://<server>:<port>/.../<service_name>/Products?$top=5 | Yes |
$skip | Return the response skipping N entries of the entity set specified in the URI. Used for client side Paging Example : https://<server>:<port>/.../<service_name>/Products?$skip=5&$top=10 | Yes |
$filter | Return the subset of entries from collection of entries depending on the Boolean expression specified in the URI. Example: https://<server>:<port>/.../<service_name>/Products?$filter=Category eq 'Notebooks' | Yes |
$orderby | Return the entries ordered by the value specified in the URI. the sorting order asc/desc is specified in the URI. If not specified it will get sorted in ascending Example: https://<server>:<port>/.../<service_name>/Products?$orderby=Category desc | Yes |
$inlinecount | Return the number of entries in the collection of entries after applying all the filters specified in the URI. The inlinecount accepts two values ‘allpages’ and ‘none’. Example: https://<server>:<port>/.../<service_name>/Products?$inlinecount=allpages | Yes |
$skiptoken | Used for server side paging. The N entries specified in the URI would be returned from server side. The remaining entries would be returned on request. Example: https://<server>:<port>/.../<service_name>/Products?$skiptoken=20 | Yes |
Let us now see how to implement the Query options into our code. Whatever values we pass in the URI can be found in the import parameter “io_tech_request_context” of the method GET_ENTITYSET in the service implementation.
Implementation for $filter:
In the example below I have made the CARRID field as filterable field, so we can filter the result based on the CARRID in the odata query.
Implementation for $skip and $top:
Implementation for $orderby:
Implementation for $inlinecount: