ABAP & SAP Modules & naslag
Modules & naslag

S/4HANA, CDS, RAP & Clean ABAP

De moderne ABAP-wereld: code pushdown naar HANA, geavanceerde CDS-features, AMDP, OData-services, het RESTful ABAP Programming Model (RAP), ABAP Cloud en de Clean-ABAP-principes.

Op deze pagina

01HANA & code pushdown

S/4HANA draait verplicht op HANA: een in-memory, kolomgeoriënteerde database. Dat draait een oude vuistregel om.

Klassiek (data-to-code)

  • Database is traag/schaars → haal data zo snel mogelijk op
  • Reken en aggregeer in ABAP, in interne tabellen
  • "Houd de database dom"

HANA (code-to-data)

  • Database is razendsnel in set-operaties
  • Duw berekeningen, joins en aggregaties naar de database: code pushdown
  • Gereedschap: moderne SQL-expressies, CDS-views, AMDP

Kolomgeoriënteerde opslag betekent ook: SELECT * is op HANA relatief duurder dan ooit (elke kolom is een aparte structuur), en klassieke secundaire indexes zijn grotendeels overbodig geworden. De adviezen uit SQL-performance blijven gelden — alleen de reden verschuift.

02CDS-views verdiept

De basis staat bij ABAP SQL & CDS; hier de features die CDS tot méér maken dan een database-view: associaties, annotaties en toegangscontrole.

@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Verkooporders met klant'
define view entity Z_I_SalesOrder
  as select from vbak
  association [1..1] to kna1 as _Klant
    on $projection.kunnr = _Klant.kunnr
{
  key vbak.vbeln,
      vbak.kunnr,
      vbak.netwr,
      @Semantics.currencyCode: true
      vbak.waerk,
      -- expressies rechtstreeks in de view (pushdown!):
      case when vbak.netwr > 10000 then 'GROOT' else 'KLEIN' end as OrderKlasse,
      _Klant              -- associatie mee-exposen
}

03AMDP — database-procedures in ABAP-classes

Kan een berekening niet in SQL of CDS uitgedrukt worden, dan is er AMDP (ABAP Managed Database Procedures): methods waarvan de body in SQLScript (HANA's proceduretaal) is geschreven, maar die beheerd en getransporteerd worden als gewone ABAP-class.

CLASS zcl_omzet DEFINITION PUBLIC.
  PUBLIC SECTION.
    INTERFACES if_amdp_marker_hdb.        " markeert: hier zit AMDP in
    CLASS-METHODS omzet_per_klant
      IMPORTING VALUE(iv_jaar)  TYPE gjahr
      EXPORTING VALUE(et_omzet) TYPE ztt_omzet.
ENDCLASS.

CLASS zcl_omzet IMPLEMENTATION.
  METHOD omzet_per_klant BY DATABASE PROCEDURE FOR HDB
                        LANGUAGE SQLSCRIPT
                        OPTIONS READ-ONLY
                        USING vbak.
    -- vanaf hier SQLScript, geen ABAP:
    et_omzet = SELECT kunnr, SUM(netwr) AS omzet
               FROM vbak
               WHERE gjahr = :iv_jaar
               GROUP BY kunnr;
  ENDMETHOD.
ENDCLASS.

04OData-services

OData is een op HTTP/REST gebaseerde standaard voor data-API's — het protocol waarmee Fiori en externe systemen met de ABAP-backend praten, en functioneel de opvolger van RFC/BAPI voor nieuwe interfaces.

# alles is een URL — voorbeeld-requests:
GET /sap/opu/odata/sap/ZSD_ORDER_SRV/OrderSet                 # lijst
GET /sap/opu/odata/sap/ZSD_ORDER_SRV/OrderSet('0000012345')   # één order
GET .../OrderSet?$filter=Kunnr eq '1000'&$top=50&$expand=Items
POST/PATCH/DELETE voor aanmaken/wijzigen/verwijderen

05RAP — het RESTful ABAP Programming Model

RAP is SAP's voorgeschreven model voor nieuwe transactionele apps: een vaste architectuur waarin CDS het datamodel levert, een behavior definition het gedrag beschrijft, en het framework de hele OData-service en Fiori-UI genereert.

De bouwstenen

ObjectRol
CDS view entityDatamodel: de business object-structuur (root + child-entiteiten, bijv. Order + Items)
Behavior definition (BDEF)Declareert wat kan: create; update; delete;, acties (action vrijgeven;), validaties, determinations, locking, draft
Behavior implementationABAP-class (...FOR BEHAVIOR OF...) met de logica achter validaties, determinations en acties
Service definition + bindingWelke entiteiten naar buiten gaan, en via welk protocol (OData V2/V4, UI of API)
" fragment van een behavior definition:
managed implementation in class zbp_i_order unique;

define behavior for Z_I_Order alias Order
persistent table ztorder
lock master
{
  create;
  update;
  delete;
  action vrijgeven result [1] $self;
  validation controleer_klant on save { create; update; }
}

06ABAP Cloud, BTP & Steampunk

"ABAP Cloud" is het ontwikkelmodel voor de cloudwereld: alleen vrijgegeven API's, alleen moderne objecttypen — afgedwongen door het systeem zelf.

Waarom dit jou raakt — ook on-premise-organisaties adopteren steeds vaker de ABAP-Cloud-regels als huisstandaard, omdat het toekomstige migraties en upgrades drastisch vereenvoudigt.

07Clean ABAP — de moderne stijlgids

"Clean ABAP" is de breed geadopteerde, door SAP gepubliceerde stijlgids (afgeleid van Clean Code). De kernpunten, met het waarom:

De volledige gids staat op GitHub: github.com/SAP/styleguides (ook in het Nederlands vertaald beschikbaar). Veel ATC-varianten bevatten checks die rechtstreeks op Clean ABAP gebaseerd zijn ("Code Pal for ABAP").