Use the $search system query option to restrict results to include items you specify in the expression..
See [MS-ODATA]: Open Data Protocol (OData).
The $search
system query option restricts the result to include only the items that match the specified search expression. The type of match depends on your implementation.
Get all entities of Entity Set “Employees
” with “Peter
” or “Smith
” in their name:
GET/sap/opu/odata4/iwbep/tea/default/iwbep/tea_busi/0001/EMPLOYEES?$search=Peter OR Smith
The starting point for a request with the $search
option is an entity list read request. You can set the$search
expression on the entity list read request.
Depending on your implementation, the result of the
$search
option on a property can vary. In our example,$search
acts on property “Name
”.
Search all entities of Entity Set “Employees
” with “Peter
” or “Smith
” in their name:
GET /sap/opu/odata4/iwbep/tea/default/iwbep/tea_busi/0001/EMPLOYEES?$search=Peter OR Smith
Step 1: Set the search expression at the request instance:
DATA: lo_read_list_request TYPE REF TO /iwbep/if_cp_request_read_list.
lo_read_list_request->set_search( ‘Peter OR Smith’ ).
This approach is only supported for remote consumption, not for local consumption
DATA: lo_read_list_request TYPE REF TO /iwbep/if_cp_request_read_list,
lo_search_node TYPE REF TO /iwbep/if_cp_search_node.
lo_search_node = lo_read_list_request->create_search_node( ‘Peter’ ).
lo_search_node->or( ‘Smith’ ).
lo_read_list_request->set_search_node( lo_search_node ).
Step 1: Create the search node on the request instance. For this step, you already provided the first part of your $search
expression (“Peter
” from “Peter OR Smith
”):
DATA: lo_read_list_request TYPE REF TO /iwbep/if_cp_request_read_list,
lo_search_node TYPE REF TO /iwbep/if_cp_search_node.
lo_search_node = lo_read_list_request->create_search_node( ‘Peter’ ).
Step 2: Insert the second expression (“Smith
”) and connect it with “OR
” to the first expression:
DATA: lo_search_node TYPE REF TO /iwbep/if_cp_search_node.
lo_search_node->or( ‘Smith’ ).
Step 3: Set the search node in the request:
DATA: lo_read_list_request TYPE REF TO /iwbep/if_cp_request_read_list,
lo_search_node TYPE REF TO /iwbep/if_cp_search_node.
lo_read_list_request->set_search_node( lo_search_node ).
Negate the previous expression. For example, this request:
GET /sap/opu/odata4/iwbep/tea/default/iwbep/tea_busi/0001/EMPLOYEES?$search=NOT (Peter OR Smith)
Call the method "NOT
" on the search node instance:
DATA: lo_read_list_request TYPE REF TO /iwbep/if_cp_request_read_list,
lo_search_node TYPE REF TO /iwbep/if_cp_search_node.
lo_search_node = lo_read_list_request->create_search_node( ‘Peter’ ).
lo_search_node->or( ‘Smith’ ).
lo_search_node->not( ).
lo_read_list_request->set_search_node( lo_search_node ).
You can connect two search nodes. For example, this request:
GET /sap/opu/odata4/iwbep/tea/default/iwbep/tea_busi/0001/EMPLOYEES?$search=(Peter OR Smith) AND (John AND Mary)
DATA: lo_read_list_request TYPE REF TO /iwbep/if_cp_request_read_list,
lo_search_node_1 TYPE REF TO /iwbep/if_cp_search_node,
lo_search_node_2 TYPE REF TO /iwbep/if_cp_search_node.
lo_search_node_1 = lo_read_list_request->create_search_node( ‘Peter’ ).
lo_search_node_1->or( ‘Smith’ ).
lo_search_node_2 = lo_read_list_request->create_search_node( ‘John’ ).
lo_search_node_2->and( ‘Mary’ ).
lo_search_node_1->and_node( lo_search_node_2 ).
lo_read_list_request->set_search_node( lo_search_node_1 ).
-
$search
is only available for OData Version 4 requests. -
SET_SEARCH
is not supported for local consumption.
Related Information