技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
odata【数据与研究】Help with OData service development in ABAP including OData V2 and V4 services via RAP service bindings, SEGW-based services, service definitions, service bindings, OData annotations, consumption of external OData services, and troubleshooting common OData errors. Use when users ask about OData, OData V2, OData V4, service binding, service definition…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Guide for creating and consuming OData services in ABAP, covering both RAP-based (V4/V2) and SEGW-based (V2) approaches.
Determine the user's goal:
Identify the approach:
Guide implementation following SAP best practices
CDS View Entity → Behavior Definition → Service Definition → Service Binding
↓
OData V4/V2 Endpoint
Exposes CDS entities and their behaviors as a named service:
@EndUserText.label: 'Travel Service'
define service ZUI_TRAVEL_O4 {
expose ZC_Travel as Travel;
expose ZC_Booking as Booking;
expose I_Currency as Currency;
expose I_Country as Country;
}
Binds a service definition to a specific OData protocol and provides a URL:
| Binding Type | Protocol | Use Case |
|---|---|---|
OData V4 - UI | V4 | SAP Fiori Elements apps |
OData V2 - UI | V2 | Legacy Fiori apps, older frontends |
OData V4 - Web API | V4 | API consumption (A2X scenarios) |
OData V2 - Web API | V2 | API consumption (legacy) |
InA - UI | InA | Analytical scenarios |
| Feature | OData V4 | OData V2 |
|---|---|---|
| Protocol | JSON by default | XML (Atom) default, JSON option |
| Batch | $batch with JSON | $batch with multipart |
| Deep operations | Deep create/update supported | Limited |
| Actions/Functions | Bound and unbound | Function imports |
| Filtering | $filter with lambda | $filter basic |
| Draft | Full support | Supported via extensions |
| Aggregation | $apply transformation | Not natively supported |
| Recommendation | Preferred for new development | Maintain existing only |
For Standard ABAP only (not available in ABAP Cloud):
SEGW Project → Data Model (Entity Types, Sets, Associations)
→ Service Implementation (MPC/DPC classes)
→ Register & Activate in /IWFND/MAINT_SERVICE
SEGW transactionGET_ENTITYSET, GET_ENTITY, CREATE_ENTITY, etc./IWFND/MAINT_SERVICE/IWFND/GW_CLIENT or browserMETHOD travelset_get_entityset.
SELECT * FROM ztravel_tab
INTO TABLE @DATA(lt_travel)
UP TO 100 ROWS.
et_entityset = CORRESPONDING #( lt_travel ).
ENDMETHOD.
"1. Get HTTP client via communication arrangement
DATA(lo_dest) = cl_http_destination_provider=>create_by_comm_arrangement(
comm_scenario = 'Z_MY_OUTBOUND_SCENARIO'
service_id = 'Z_MY_HTTP_SERVICE' ).
DATA(lo_client) = cl_web_http_client_manager=>create_by_http_destination( lo_dest ).
"2. Build request
DATA(lo_request) = lo_client->get_http_request( ).
lo_request->set_uri_path( '/sap/opu/odata4/sap/api_business_partner/srvd_a2x/sap/api_business_partner/0001/A_BusinessPartner?$top=10' ).
"3. Execute and parse response
DATA(lo_response) = lo_client->execute( if_web_http_client=>get ).
DATA(lv_json) = lo_response->get_text( ).
lo_client->close( ).
"Create OData client proxy for V4
DATA(lo_proxy) = /iwbep/cl_cp_client_proxy_fact=>create_v4_remote_proxy(
iv_service_definition_name = 'Z_MY_ODATA_CDEF'
io_http_client = lo_client
iv_relative_service_root = '/sap/opu/odata4/sap/api_service/0001/' ).
"Build and execute read request
DATA(lo_request) = lo_proxy->create_resource_for_entity_set( 'ENTITYSETNAME' )->create_request_for_read( ).
lo_request->set_top( 10 ).
DATA(lo_response) = lo_request->execute( ).
"Get business data
DATA lt_data TYPE STANDARD TABLE OF z_entity_type.
lo_response->get_business_data( IMPORTING et_business_data = lt_data ).
Key CDS annotations that control OData/Fiori behavior:
@UI.headerInfo: {
typeName: 'Travel',
typeNamePlural: 'Travels',
title: { type: #STANDARD, value: 'TravelID' },
description: { type: #STANDARD, value: 'Description' }
}
@UI.lineItem: [{ position: 10 }]
@UI.selectionField: [{ position: 10 }]
@UI.identification: [{ position: 10 }]
TravelID;
@UI.lineItem: [{ position: 20, importance: #HIGH }]
@UI.identification: [{ position: 20 }]
@Consumption.valueHelpDefinition: [{ entity: { name: 'I_Currency', element: 'Currency' } }]
CurrencyCode;
| Error / Issue | Solution |
|---|---|
/IWBEP/CX_MGW_BUSI_EXCEPTION | Check DPC implementation, validate input data |
/IWBEP/CX_MGW_TECH_EXCEPTION | Check data model consistency, regenerate artifacts |
| 403 Forbidden | Check ICF node activation, authorization |
| 404 Not Found | Verify service is registered and activated |
$metadata returns empty | Publish service binding, check activation |
| Draft not working | Verify draft table exists, BDEF has with draft |
| Deep create fails | Check composition in CDS and BDEF |
CX_WEB_HTTP_CLIENT_ERROR | Check communication arrangement, SSL certificates |
When helping with OData topics, structure responses as:
## OData Service Guidance
### Approach
- Type: [RAP-based / SEGW-based / Consumption]
- Protocol: [OData V4 / OData V2]
### Implementation
[Step-by-step with code examples]
### Testing
[How to test the service]