ABAP RAP Advanced

Virtuelle Elemente

Dynamische Felder in ABAP implementieren

Was sind Virtuelle Elemente?

  • Felder, die nicht persistent in DB gespeichert sind
  • Werte werden zur Laufzeit per ABAP-Klasse berechnet
  • Verwendung für berechnete Werte, technische Informationen oder externe Daten

virtual element logic flow

Alte Syntax: Virtuelles Element in CDS View

@ObjectModel.virtualElementCalculatedBy: 'ABAP:ZCL_MY_VIRTUAL_ELEMENT_EXIT'
virtual VirtualAmount : abap.curr(15,3);
  • Interface: IF_SADL_EXIT_CALC_ELEMENT_READ wird von Klasse implementiert
  • Methoden get_calculation_info und calculate steuern Berechnung
  • Wird primär in klassischen CDS Views ohne define root view entity genutzt

Neue Syntax: Virtuelles Element in RAP Projektionen

define root view entity ZC_MY_ENTITY
provider contract my_provider_contract
as projection on ZI_MY_ENTITY
{
key ID,
Name,
@ObjectModel.virtualElementCalculatedBy: 'ABAP:ZCL_MY_VIRTUAL_ELEMENT_EXIT'
virtual VirtualAmount : abap.curr(15,3)
}
  • Root View Entities mit Provider Contracts erlauben Virtual Elements
  • Neue Projekte bevorzugen diese Variante für bessere Integration
  • Unterstützung in RAP und Fiori Elements für Anzeige und Filterung

Implementierung der ABAP-Klasse

  • Klasse implementiert IF_SADL_EXIT_CALC_ELEMENT_READ Interface
  • GET_CALCULATION_INFO definiert benötigte Felder für Berechnung
  • CALCULATE füllt die Werte in übergebene Datenstruktur ein

Tipps und Hinweise

  • Virtuelle Elemente sind nur lesbar, keine Persistenz möglich
  • Filterung auf Virtual Elements nur bedingt performant
  • Integration in Fiori Elements funktioniert out-of-the-box
  • Für einfache Berechnungen, Aggregationen ggf. besser im CDS lösen

Zusammenfassung

  • Virtuelle Elemente erweitern RAP-Datenmodell ohne DB-Kosten
  • Alte und neue Syntax koexistieren, neue wird empfohlen
  • ABAP-Klasse als Berechnungskern zentral
  • Wichtig für dynamische, berechnete Felder in UI und Services