Skillquality 0.46

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

Price
free
Protocol
skill
Verified
no

What it does

OData Service Development

Guide for creating and consuming OData services in ABAP, covering both RAP-based (V4/V2) and SEGW-based (V2) approaches.

Workflow

  1. Determine the user's goal:

    • Exposing a RAP BO as an OData service (recommended approach)
    • Creating a classic SEGW-based OData V2 service
    • Consuming an external OData service from ABAP
    • Adding OData annotations for Fiori UIs
    • Troubleshooting OData errors
  2. Identify the approach:

    • RAP-based service (preferred for ABAP Cloud)
    • SEGW-based service (classic, Standard ABAP only)
    • OData consumption (client proxy)
  3. Guide implementation following SAP best practices

RAP-Based OData Services (Recommended)

Architecture Flow

CDS View Entity → Behavior Definition → Service Definition → Service Binding
                                                                    ↓
                                                              OData V4/V2 Endpoint

Service Definition

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;
}

Key Rules

  • Expose projection CDS views (C_ prefix by convention), not root views
  • Include value help CDS views (I_* views) the UI needs
  • Alias names become OData entity set names
  • One service definition can be bound to multiple protocols

Service Binding

Binds a service definition to a specific OData protocol and provides a URL:

Binding TypeProtocolUse Case
OData V4 - UIV4SAP Fiori Elements apps
OData V2 - UIV2Legacy Fiori apps, older frontends
OData V4 - Web APIV4API consumption (A2X scenarios)
OData V2 - Web APIV2API consumption (legacy)
InA - UIInAAnalytical scenarios

Creating a Service Binding

  1. In ADT: New → Other ABAP Repository Object → Business Services → Service Binding
  2. Select the service definition
  3. Choose binding type (e.g., OData V4 - UI)
  4. Activate
  5. Click Publish to register the service
  6. Click Preview to open the Fiori Elements preview

OData V4 vs V2

FeatureOData V4OData V2
ProtocolJSON by defaultXML (Atom) default, JSON option
Batch$batch with JSON$batch with multipart
Deep operationsDeep create/update supportedLimited
Actions/FunctionsBound and unboundFunction imports
Filtering$filter with lambda$filter basic
DraftFull supportSupported via extensions
Aggregation$apply transformationNot natively supported
RecommendationPreferred for new developmentMaintain existing only

SEGW-Based OData V2 Services (Classic)

For Standard ABAP only (not available in ABAP Cloud):

Architecture

SEGW Project → Data Model (Entity Types, Sets, Associations)
             → Service Implementation (MPC/DPC classes)
             → Register & Activate in /IWFND/MAINT_SERVICE

Steps

  1. Create project in SEGW transaction
  2. Define data model: Entity types, properties, navigation properties
  3. Generate runtime artifacts (MPC/DPC classes)
  4. Implement DPC extension methods: GET_ENTITYSET, GET_ENTITY, CREATE_ENTITY, etc.
  5. Register service in /IWFND/MAINT_SERVICE
  6. Test via /IWFND/GW_CLIENT or browser

DPC Method Implementation Example

METHOD travelset_get_entityset.
  SELECT * FROM ztravel_tab
    INTO TABLE @DATA(lt_travel)
    UP TO 100 ROWS.

  et_entityset = CORRESPONDING #( lt_travel ).
ENDMETHOD.

Consuming External OData Services

In ABAP Cloud (using HTTP Client and Communication Arrangements)

"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( ).

Using OData Client Proxy (V2/V4)

"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 ).

OData Annotations for Fiori

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;

Troubleshooting

Error / IssueSolution
/IWBEP/CX_MGW_BUSI_EXCEPTIONCheck DPC implementation, validate input data
/IWBEP/CX_MGW_TECH_EXCEPTIONCheck data model consistency, regenerate artifacts
403 ForbiddenCheck ICF node activation, authorization
404 Not FoundVerify service is registered and activated
$metadata returns emptyPublish service binding, check activation
Draft not workingVerify draft table exists, BDEF has with draft
Deep create failsCheck composition in CDS and BDEF
CX_WEB_HTTP_CLIENT_ERRORCheck communication arrangement, SSL certificates

Output Format

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]

References

Capabilities

skillsource-likweitanskill-odatatopic-abaptopic-agent-skillstopic-sap

Install

Installnpx skills add likweitan/abap-skills
Transportskills-sh
Protocolskill

Quality

0.46/ 1.00

deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 12 github stars · SKILL.md body (7,831 chars)

Provenance

Indexed fromgithub
Enriched2026-04-24 01:03:16Z · deterministic:skill-github:v1 · v1
First seen2026-04-23
Last seen2026-04-24

Agent access