ABAP RAP

ABAP RESTful Application Programming Model

Weitere Konzepte

  • Draft
  • Layer & Projektionen
  • Feature Control
  • Custom CDS Entities
  • Virtual Elements
  • Dynamic
(C) Brandeis Consulting📁

Fehlersituationen

  • Service nach Änderung nicht aktualisiert ==> Binding Version hochzählen oder neu anlegen
  • Assoziierter View nicht sichtbar ==> View in der Service-Definition exponieren
  • Keine Berechtigung im Browser, noch vor Anmeldung ==> Anderen Browser verwenden, z.B. Chrome
  • Navigation von User/Aufgabenliste zur einzelnen Aufgabe wurde nicht angezeigt bzw. war nicht möglich. ==> Browser neu starten hatte geholfen.
(C) Brandeis Consulting📁

Entwurfsmodus - DRAFT

Im DRAFT Modus wird ein Objekt permanent abgespeichert. D.h. man kann die Bearbeitung in der Weboberfläche auch unterbrechen, ohne dass die eingegebenen Informationen verloren gehen. Über eine spezielle Suche kann man die Objekte im Entwurfsmodus dann wieder anzeigen.

Draft Tabelle

Die Draft Tabelle besteht aus den Feldern der eigentlichen Datenbanktabelle plus die Felder der Struktur sych_bdl_draft_admin_inc (INCLUDE). Sie hat den auch den gleichen Schlüssel.
Daraus ergibt sich, dass jede BO-Instanz maximal eine Version im Entwurfsmodus haben kann.

Beispiel für DRAFT

Der RAP Generator erzeugt die Objekte immer vollständig mit Draft.

(C) Brandeis Consulting📁

Draft

  • Definition:
    Draft Handling ist eine Funktion im SAP Restful ABAP Programming Model (RAP), die es Nutzern ermöglicht, Änderungen an Daten in einem Entwurfsmodus zwischenzuspeichern, ohne sie sofort zu speichern oder endgültig zu übernehmen.
  • Ziel:
    • Benutzerfreundlichkeit verbessern, indem unvollständige oder fehlerhafte Eingaben zwischengespeichert werden.
    • Vermeidung von inkonsistenten Datenständen.
  • Draft-Objekt:
    • Eine persistente Version des Transaktionspuffers, dass die Änderungen speichert, bevor sie übernommen werden.
  • Automatische Sperrmechanismen:
    • Drafts sind benutzergebunden und verhindern derzeit noch parallele Bearbeitungen (Stand: Nov 2024 wer weiß :-)
  • Trennung von Draft- und Persistenzlogik:
    • Änderungen am Draft beeinträchtigen das Hauptobjekt nicht.
(C) Brandeis Consulting📁

Draft Lebenszyklus

  1. Erstellung eines Drafts:

    • Änderungen werden in einer separaten Draft-Tabelle gespeichert.
    • Zum Anlegen der Draft-Tabelle gibt es einen Quick-Fix
  2. Weiterbearbeitung:

    • Der Benutzer kann den Draft zu einem späteren Zeitpunkt öffnen und bearbeiten.
  3. Finalisierung:

    • Der Draft wird entweder:
      • Persistiert (Änderungen übernommen).
      • Verworfen (Änderungen gelöscht).
(C) Brandeis Consulting📁

Projektionen

  • Definition:
    • Projektionen sind benutzerdefinierte Sichten auf Datenmodelle (Business Objects) im RAP.
    • ermöglichen die Anpassung und Darstellung von Daten je nach Anwendungsfall.
  • Ziele:
    • Vereinfachung von Datenmodellen für spezifische Szenarien.
    • Trennung von Backend-Logik und UI-spezifischen Anforderungen.
    • Wiederverwendbarkeit von Datenmodellen in unterschiedlichen Anwendungen.
(C) Brandeis Consulting📁

Projektionen

Wenn wir allgemeine Views bzw. Anwendungen spezialisieren wollen, beispielsweise weil das gleiche BO Rollenspezifisch unterschiedlich bearbeitet werden soll, dann können wir Projektionen auf unsere bestehende Modelle anlegen.

Wir spezialisieren also unserer Services für eine Anwendungsfall.

  • Alle notwendigen Projektionsviews anlegen (
    • define .... as projection on ...
  • Assozationen umbiegen auf deren Projektionsviews
    • ... : redirected to composition child ...
    • ... : redirected to parent ...
  • Behavior Projezieren
  • definieren der verwendeten Aktionen
    • use ...
  • Anlegen der Service Definition und des Service Bindings
(C) Brandeis Consulting📁

Feature Control

Alle Eigenschaften in der Behavior Definition können dynamisch gesteuert werden. Beispielsweise die Verfügbarkeit von Aktionen.

Definition im Behavior

Dazu muss zunächst in der Behavior die Aktion als Kontrolliert gekennzeichnet werden:

action (features: instance) cancel result [1] $self;

Implementierung mit ABAP

Und dann erfolgt die Entscheidung, ob das Feature angezeigt wird oder nicht in der Implementierung des Behavior Handlers im ABAP.

METHOD get_features. 


ENDMETHOD. 
(C) Brandeis Consulting📁

Custom CDS Entities - Wrapper um eine ABAP Klasse

Im ABAP implementierte CDS Entities.

  • Interface IF_RAP_QUERY_PROVIDER
  METHODS select IMPORTING io_request  TYPE REF TO if_rap_query_request
						io_response TYPE REF TO if_rap_query_response
                 RAISING   cx_rap_query_provider
(C) Brandeis Consulting📁

Virtual Elements - Im ABAP ermittelte Felder

Read-Only Felder, die im ABAP per Klasse gefüllt werden.

Im CDS View

@ObjectModel.virtualElement: true
@ObjectModel.virtualElementCalculatedBy: 'ABAP:ZCL_BC_VIRTUAL_ELE'
'' as VirtualFieldName,

In der ABAP Klasse

ZCL_BC_VIRTUAL_ELE

INTERFACES: if_sadl_exit_calc_element_read.

Optional: Methode GET_CALCULATION_INFO vor dem SELECT

Falls für Berechnungen andere Felder benötigt werden, kann man in GET_CALCULATION_INFO die Liste der Felder zurückgegeben. Diese werden dann aus der DB-Tabelle selektiert.

(C) Brandeis Consulting📁

Dynamische Properties

Die Werte für Annotationen können nicht nur fest vergeben werden. Es sind auch dynamische Werte möglich:

@UI.facet: [{ id: 'TasksToDo',
                  purpose:  #STANDARD,
                  type:     #LINEITEM_REFERENCE,
                  label:    'Tasks to do',
                  hidden: #(IsHidden),
                  targetElement: '_TasksToDo',
                  position: 10 }]

In diesem Beispiel ist das Facet nur dann sichtbar, wenn das Feld IsHidden aus dem CDS View einen leeren Wert enthält.

(C) Brandeis Consulting📁