— SAP-Integration

SAP OData Query Builder

Erstellen Sie korrekte OData V2- oder V4-Abfragen für S/4HANA-Services, ohne die Syntax auswendig zu kennen. Läuft im Browser – es wird nichts gesendet.

Hinweis: Die Bedienelemente des Tools sind derzeit auf Englisch.

$filter

Your query

Request URL

/sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder?$filter=SalesOrganization%20eq%20'1010'&$select=SalesOrder,SoldToParty,TotalNetAmount&$orderby=SalesOrder%20desc&$top=50&$format=json

CPI OData receiver — Query Options

$filter=SalesOrganization eq '1010'&$select=SalesOrder,SoldToParty,TotalNetAmount&$orderby=SalesOrder desc&$top=50&$format=json

ABAP sample (SM59 destination)

" Sample only. GET requests need no CSRF token; POST/PUT/DELETE must
" first fetch one (header X-CSRF-Token: Fetch) and send it back.
DATA lo_client TYPE REF TO if_http_client.
DATA lv_path   TYPE string VALUE '/A_SalesOrder?$filter=SalesOrganization%20eq%20''1010''&$select=SalesOrder,SoldToParty,TotalNetAmount&$orderby=SalesOrder%20desc&$top=50&$format=json'.

" Recommended: SM59 destination (Z_ODATA_DEST is a placeholder name).
cl_http_client=>create_by_destination(
  EXPORTING destination = 'Z_ODATA_DEST'
  IMPORTING client      = lo_client
  EXCEPTIONS OTHERS     = 1 ).
" Without a destination: cl_http_client=>create_by_url( url = '/sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder?$filter=SalesOrganization%20eq%20''1010''&$select=SalesOrder,SoldToParty,TotalNetAmount&$orderby=SalesOrder%20desc&$top=50&$format=json' ... ).
IF sy-subrc <> 0.
  RETURN. " destination missing or not reachable
ENDIF.

cl_http_utility=>set_request_uri( request = lo_client->request uri = lv_path ).
lo_client->request->set_method( if_http_request=>co_request_method_get ).
lo_client->request->set_header_field( name = 'Accept' value = 'application/json' ).

lo_client->send( EXCEPTIONS OTHERS = 1 ).
IF sy-subrc <> 0.
  lo_client->close( ).
  RETURN.
ENDIF.
lo_client->receive( EXCEPTIONS OTHERS = 1 ).
IF sy-subrc <> 0.
  lo_client->get_last_error( IMPORTING message = DATA(lv_error) ).
  lo_client->close( ).
  RETURN.
ENDIF.

lo_client->response->get_status( IMPORTING code = DATA(lv_status) ).
DATA(lv_json) = lo_client->response->get_cdata( ).
lo_client->close( ).
IF lv_status <> 200.
  " lv_json holds the OData error body — log it, do not treat as data.
  RETURN.
ENDIF.

Häufige Fragen

Was ist der Unterschied zwischen OData V2- und V4-Filtern?
V2 nutzt substringof() für Textsuche, datetime'…'- und guid'…'-Literale sowie $inlinecount=allpages. V4 nutzt contains(), Datums- und GUID-Literale ohne Präfix und $count=true. Der Builder wechselt die Syntax mit der Version.
Wo füge ich die CPI-Ausgabe ein?
Im Feld Query Options des OData-Receiver-Adapters (oder im Query-Assistenten), ohne führendes Fragezeichen.
Ruft das Tool mein SAP-System auf?
Nein. Alles läuft im Browser. Nichts wird an ERPClimb oder SAP gesendet.

Prüfen Sie Entitäts- und Property-Namen gegen das $metadata Ihres Service. ERPClimb ist unabhängig und nicht mit SAP SE verbunden.