Gliederung:
- BOPF Einführung
- Mit BOPF arbeiten
- Next Generation BO in RAP
- Referenzen
- Building Apps with the ABAP RESTful Application Programming Model
- Referenzen: ABAP RESTful Application Programming Model (RAP) at openSAP
Die bisherige BOPF Daten (Struktur, Hierarchie, Queries) und Verhalten (Aktionen, Ermittlungen, Validierung) werden nun durch
- Die Struktur (Datenteil) wird durch eine Hierarchie von Core Data Services (CDS) views oder view Entities mit einem Wurzelknoten (root CDS Entity). Damit können Read-Only Anwendungen (Queries) generiert werden.
- Für Datenänderungen werden das Verhalten durch die Standard-Operationen Create, Create by Association, Update, Delete geprägt. Für kundendefiniertes Verhalten müssen die Operationen Actions, Validations, Determinations, Functions, Locks, Messages in Behavior Definitions (CDS BDEF) und Behavior implementation mit nativer ABAP Unterstützung implementiert werden.
- Bei der Laufzeit haben wir die Szenarien managed, managed with draft, unmanaged.
Datenmodellierung
Core Data Services (CDS Views, Data Definitions) werden für Beschreibung der Datenstruktur und Abfragen (Queries) verwendet.
Bemerkung:
- Bis S/4 HANA 1909 (e.g. Entwickler Demo) muss mit CDS views gearbeitet werden.
- ab S/4 HANA 2020 (e.g. Cloud Version) können CDS View Entities verwendet werden.
Für ein Business Objekt für gesetztliche Feiertage wird in der Eclipse-Umgebung wird eine Datenbank-Tabelle mit 5 Spalten definiert: @EndUserText.label : ‘Public Holiday Table’ @AbapCatalog.enhancementCategory : #NOT_EXTENSIBLE @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #C @AbapCatalog.dataMaintenance : #LIMITED define table ycalholidayeyjfc { key client : mandt not null; key holiday_id : ycal_holiday_id_eyjfc not null; month_of_holiday : ycal_month_eyjfc; day_of_holiday : ycal_day_eyjfc; changedat : timestampl; }
Eine darauf aufbauende CDS View sieht so aus @AbapCatalog.sqlViewName: ‘YCAL_IHOLIDEYJFC’ @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: ‘CDS View for Public Holidays’ define root view ycal_i_holiday_eyjfc as select from ycalholidayeyjfc composition [0..*] of ycal_i_holitxt_eyjfc as _HolidayTxt association [0..1] to ycal_i_holitxt_eyjfc as _DefaultText on _DefaultText.holiday_id = $projection.holiday_id and _DefaultText.spras = $session.system_language { //ycalholidayeyjfc @Semantics.user.createdBy: true key holiday_id, @Semantics.user.lastChangedBy: true month_of_holiday, @Semantics.systemDateTime.lastChangedAt: true day_of_holiday, _DefaultText.fcal_description as HolidayDescription, @Semantics.systemDateTime.lastChangedAt: true changedat, _HolidayTxt }
Bei einer Read-Only-Anwendung können ausgehend vom CDS-View ein oData-Entry Point und eine UI5 App generiert werden. Ein Business Object (BO) wird in RAP für Datenänderungen benötigt.
ABAP Behavior Definition Language
Das Verhalten wird in CDS Behavior Definition (BDEF)-Projektionen deklariert und in einer behavior implementation als ABAP Code beschrieben. Dabei wird EML verwendet, eine Erweiterung der ABAP .
Im managed Szenario sind die Operationen CREATE, READ, UPDATE, DELETE ohne Aufwand unterstützt. Andere Operationen (Actions) werden in Klassen implementiert. managed implementation in class ybp_cal_i_holiday_eyjfc unique; define behavior for ycal_i_holiday_eyjfc alias HolidayRoot persistent table YCALHOLIDAYEYJFC lock master with additional save //authorization master ( instance ) //etag master <field_name> { create; update; delete; determination det_create_and_change_texts on save { field HolidayDescription; } } define behavior for YCAL_I_HOLITXT_EYJFC alias HolidayText persistent table ycalholitxteyjfc lock dependent ( holiday_id = holiday_id ) { update; delete; field( readonly ) holiday_id; }
Die Implementation unterscheidet strikt die Interaktion-Phase mit lokale Handler Klassen und die Verbuchungsphase mit einer saver Klasse. CLASS ybp_cal_i_holiday_eyjfc DEFINITION PUBLIC ABSTRACT FINAL FOR BEHAVIOR OF ycal_i_holiday_eyjfc. ENDCLASS.
Beispiel: Lokaler Handler Definition CLASS lhc_HolidayRoot DEFINITION INHERITING FROM cl_abap_behavior_handler.
Die Definition von Methoden kann nun so aussehen METHODS det_create_and_change_texts FOR DETERMINATION HolidayRoot~det_create_and_change_texts IMPORTING keys FOR HolidayRoot.
oder METHODS modify_create FOR MODIFY IMPORTING it_travel_create FOR CREATE travel.
Eine Saver-Klasse Definition muss von der Klasse CL_ABAP_BEHAVIOR_SAVER abgeleitet werden.
In den Händler werden abgeleitete Datentypen verwendet, die mit % anfangen
%CID, %KEY, %PID, %CONTROL, %DATA, %FAIL…
ABAP Entity Manipulation Language
ABAP wurde mit Statements erweitert, um mit CDS Entities zu arbeiten.
- Lesen: READ ENTITIES, READ ENTITY und READ ENTITIES OPERATIONS.
- Ändern: MODIFY ENTITIES, MODIFY ENTITY and MODIFY ENTITIES OPERATIONS.
- Verbuchung starten: COMMIT ENTITIES und COMMIT ENTITIES RESPONSES.
- Sperren: SET LOCKS OF und SET LOCKS ENTITY.
In diesem Blog werden Beispiele kommentiert: