OData Service-Definitionen

Service-Registrierung, Entity Sets und Metadaten der OData-Services.

Übersicht

Die Bereitstellung von OData-Services in SAP-Systemen erfolgt über zwei primäre Technologiestapel, die je nach Systemlandschaft zum Einsatz kommen:

  1. CDS Views (S/4HANA) – Moderne, deklarative Schicht für OData-Exposition

  2. SEGW Service Builder (ECC 6.0) – Legacy-Ansatz mit manuellem Entity- und Service-Design

Beide Ansätze ermöglichen REST-basierte Datenintegration mit Filtering, Paging und Sorting-Mechanismen, erfordern jedoch unterschiedliche Implementierungsparadigmen.


CDS Views (S/4HANA)

Konzeptionelle Grundlagen

Core Data Services (CDS) stellen ein deklaratives Programmiermodell für S/4HANA dar, das die OData-Exposition durch Metadaten-Annotationen automatisiert. Die kritische Annotation @OData.publish: true aktiviert die automatische Service-Generierung ohne weiteren manuellen Konfigurationsaufwand.

Mechanismus der Exposition:

Standard SAP CDS Views für Kundendaten

ViewBeschreibungPrimäre Felder
I_CustomerKundenmaster (Kopfdaten)Customer, CustomerName, CustomerType, CreatedDate
I_CustomerCompanyKundenzuordnung zu GeschäftsbereichCustomer, Company, CreditLimit, PaymentTerms
I_OperationalAcctgDocItemOffene Posten (FI-Modul)AccountingDocument, LineItem, Amount, Currency, PostingDate
I_SalesOrderVerkaufsaufträge (SD-Modul)SalesOrder, OrderDate, CustomerPoNumber, TotalNetAmount
I_SalesOrderItemVerkaufsauftrag-PositionenSalesOrder, SalesOrderItem, Product, OrderQuantity, NetAmount
I_CreditMgmtAccountKreditmanagement-KontenCreditAccount, CreditLimit, ExposedAmount, UtilizationPercent

Custom CDS View: Z_I_BilendoCustomer

Für Bilendo-spezifische Anforderungen wird eine Custom CDS View implementiert, die Master- und Stammdaten konsolidiert:

@OData.publish: true
@AbapCatalog.sqlViewName: 'Z_I_BILENDO_C'
@VDM.viewType: #COMPOSITE
define view Z_I_BilendoCustomer as
  select from kna1
    inner join knb1 on kna1.kunnr = knb1.kunnr
    inner join knb5 on knb1.kunnr = knb5.kunnr
                   and knb1.bukrs = knb5.bukrs
  {
    key kna1.kunnr as Customer,
    knb1.bukrs as CompanyCode,
    kna1.name1 as CustomerName,
    kna1.stras as Street,
    kna1.ort01 as City,
    kna1.pstlz as PostalCode,
    kna1.land1 as Country,
    kna1.telf1 as Phone,
    knb1.stceg as TaxNumber,
    knb1.akont as ReconciliationAccount,
    knb1.zterm as PaymentTerms,
    knb5.duedt as CreditLimit,
    knb1.frste as RiskCategory,
    kna1.erdat as CreationDate,
    kna1.aedat as LastChangeDate
  };

Aktivierungsschritte:

  1. ABAP Development Tools (Eclipse) oder SE80 öffnen

  2. View unter Paket ZBILENDO anlegen

  3. Definition speichern und validieren

  4. Über /IWFND/MAINT_SERVICE registrieren


SEGW Service Builder (ECC 6.0)

Für ECC 6.0 Systeme ohne CDS-Unterstützung wird der SAP Gateway Service Builder (SEGW) verwendet. Dies ist ein grafisches Werkzeug zur Definition von OData-Services.

Schrittweise Implementierung

Schritt 1: Projekt-Anlage in SEGW
Transaktion: SEGW
→ Projekt: Z_BILENDO_ODATA
→ Description: "Bilendo Customer and Clearing Integration"
→ Package: ZBILENDO
Schritt 2: Entity Types definieren

Folgende Entity Types werden im Service definiert:

Entity TypeBeschreibungPrimärschlüssel
ZBilendoCustomerKundenmaster mit ZahlungsdatenCustomer, CompanyCode
ZBilendoOpenItemOffene PostenDocumentNumber, Item
ZBilendoClearedItemAusgeglichene PostenDocumentNumber, Item
ZBilendoSalesOrderVerkaufsaufträgeSalesOrder

Entity Type Definition (Beispiel ZBilendoCustomer):

PropertyTypeLengthKeyFilterableSortable
CustomerEdm.String10XXX
CompanyCodeEdm.String4XXX
CustomerNameEdm.String80XX
StreetEdm.String60
CityEdm.String40X
PostalCodeEdm.String10
CountryEdm.String3
PhoneEdm.String30
TaxNumberEdm.String16X
CreditLimitEdm.Decimal15,2XX
PaymentTermsEdm.String4
RiskCategoryEdm.String2X
Schritt 3: Entity Sets konfigurieren

Entity Sets bilden die Endpunkte des OData-Service ab:

Entity Set: Customers
  → Entity Type: ZBilendoCustomer
  → Path: Customers
  → Reusable: Nein

Entity Set: OpenItems
  → Entity Type: ZBilendoOpenItem
  → Path: OpenItems
  → Reusable: Nein

Entity Set: SalesOrders
  → Entity Type: ZBilendoSalesOrder
  → Path: SalesOrders
  → Reusable: Nein
Schritt 4: Runtime generieren
SEGW → Project Z_BILENDO_ODATA
→ Menü: Service → Generate Runtime Objects
→ Backend: abap/backend
→ Zielpaket: ZBILENDO

Dies generiert automatisch:

Schritt 5: DPC Extension implementieren

Die Data Provider Class wird erweitert, um konkrete Datenbeschaffungslogik zu implementieren:

CLASS zcl_z_bilendo_odata_dpc_ext DEFINITION
  PUBLIC
  INHERITING FROM zcl_z_bilendo_odata_dpc
  CREATE PUBLIC.

  PUBLIC SECTION.

    METHODS get_entityset
      REDEFINITION.

  PROTECTED SECTION.

  PRIVATE SECTION.

ENDCLASS.

CLASS zcl_z_bilendo_odata_dpc_ext IMPLEMENTATION.

  METHOD get_entityset.
    CASE iv_entity_set_name.

      WHEN 'Customers'.
        DATA: lt_customers TYPE TABLE OF zcl_z_bilendo_odata_mpc=>ts_zbilendo_customer.
        DATA: ls_filter TYPE /iwbep/s_mgw_tech_pair.

        LOOP AT it_filter_select_options INTO ls_filter.
          IF ls_filter-property = 'CUSTOMER'.
            SELECT kunnr, bukrs, name1, stras, ort01, pstlz, land1, telf1,
                   stceg, akont, zterm, duedt, frste, erdat, aedat
              INTO CORRESPONDING FIELDS OF TABLE lt_customers
              FROM kna1
              INNER JOIN knb1 ON kna1.kunnr = knb1.kunnr
              WHERE kna1.kunnr IN ls_filter-value.
          ENDIF.
        ENDLOOP.

        IF sy-subrc = 0.
          et_entityset = lt_customers.
        ENDIF.

      WHEN OTHERS.
        SUPER->get_entityset(
          EXPORTING
            iv_entity_set_name = iv_entity_set_name
            it_filter_select_options = it_filter_select_options
            iv_skip = iv_skip
            iv_top = iv_top
          IMPORTING
            et_entityset = et_entityset
        ).
    ENDCASE.
  ENDMETHOD.

ENDCLASS.

Implementierungsdetails:

Schritt 6: Service-Registrierung
Transaktion: /IWFND/MAINT_SERVICE
→ Service: Z_BILENDO_ODATA_SRV (aus SEGW generiert)
→ Action: "Activate and Maintain Services"
→ Service URL: /sap/opu/odata/sap/Z_BILENDO_ODATA_SRV/

Service-Registrierung und Validierung

Registrierungstransaktion: /IWFND/MAINT_SERVICE

Die zentrale Verwaltung aller OData-Services erfolgt in /IWFND/MAINT_SERVICE:

Workflow:

  1. Service aus SEGW oder CDS View auswählen

  2. Status: "Aktiviert" setzen

  3. Gateway Client zuweisen (optionale technische Konfiguration)

  4. Speichern

Validierung via Metadata und Gateway Client

Metadaten-Endpoint (Browser):

https://<HOST>:<PORT>/sap/opu/odata/sap/<SERVICE_NAME>/$metadata

Beispiel für Z_BILENDO_ODATA_SRV:

https://erp.bilendo.local:8000/sap/opu/odata/sap/Z_BILENDO_ODATA_SRV/$metadata

Gateway Client Test-UI:

Transaktion: /IWFND/GW_CLIENT
→ Service Name: Z_BILENDO_ODATA_SRV
→ Request: GET /Customers?$filter=Customer eq '0000000001'&$top=10

Naming Convention

Konsistente Benennungskonventionen gewährleisten Wartbarkeit und Interoperabilität:

ObjektECC (SEGW)S/4HANA (CDS)Präfix
Service-ProjektZ_BILENDO_ODATA(View-Name)Z_
Entity TypeZBilendoCustomerz_i_bilendo_customerZ_I_
Entity Set (Endpoint)Customers/sap/opu/odata/.../Customers(camelCase)
Data Provider Classzcl_z_bilendo_odata_dpc_ext(auto)ZCL_
Custom TabellenZBILENDO_*ZBILENDO_*Z_
CDS View TypN/A@VDM.viewTypeI_ (Interface), C_ (Composite)

Beispiel Service-URL Struktur:

S/4HANA: /sap/opu/odata/sap/Z_I_BILENDO_CUSTOMER_SRV/Customers
ECC 6.0: /sap/opu/odata/sap/Z_BILENDO_ODATA_SRV/Customers


**