Schulung

Fiori Elements Advanced

RAP Wiederholung

Objekte im RAP

  • Tabellen
    • Weiterhin die Grundlage der Datenhaltung
  • CDS-Views
    • First-Class-Citizen: S/4HANA ist CDS
  • Behavior-Definition
    • Was soll mein Objekt können und tun
  • Behavior-Pool
    • Implementierung der Logik
  • Service-Definition
    • Welche Views werden unter welchem Namen exponiert
  • Service Binding
    • Welches Protokoll wollen wir nach außen verwenden?

Datenmodell

ZFW_MOVIE_00

@EndUserText.label : 'Movie'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table zfw_movie_00 {

  key client            : abap.clnt not null;
  key movie_id          : sysuuid_x16 not null;
  title                 : zfw_title_00;
  release_date          : zfw_release_date_00;
  category              : zfw_category_00;
  fsk                   : zfw_fsk_00;
  description           : zfw_description_00;
  rating                : zfw_rating_00;
  watched               : zfw_watched_00;
  local_created_by      : abp_creation_user;
  local_created_at      : abp_creation_tstmpl;
  local_last_changed_by : abp_locinst_lastchange_user;
  local_last_changed_at : abp_locinst_lastchange_tstmpl;
  last_changed_at       : abp_lastchange_tstmpl;
}

ZFW_ACTOR_00

@EndUserText.label : 'Actor'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table zfw_actor_00 {

  key client            : abap.clnt not null;
  key actor_id          : sysuuid_x16 not null;
  name_first            : zfw_name_first_00;
  name_last             : zfw_name_last_00;
  birthday              : zfw_birthday_00;
  email                 : zfw_email_00;
  mobile                : zfw_mobile_00;
  picture_url           : zfw_picture_url_00;
  local_created_by      : abp_creation_user;
  local_created_at      : abp_creation_tstmpl;
  local_last_changed_by : abp_locinst_lastchange_user;
  local_last_changed_at : abp_locinst_lastchange_tstmpl;
  last_changed_at       : abp_lastchange_tstmpl;
}

ZFW_ACIMO_00

@EndUserText.label : 'Actor in Movie'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table zfw_acimo_00 {

  key client   : abap.clnt not null;
  key acimo_id : sysuuid_x16 not null;
  actor_id     : sysuuid_x16;
  movie_id     : sysuuid_x16;
  role         : zfw_role_00;
}

Überblick RAP Architektur

  • Tabelle als Grundlage
  • (ggf. Hilfsview)
  • View zur Objektdefinition
    • I-oder R-View
  • C-View / Projection
  • Service-Definition
  • Service-Binding
  • Behavior-Definition
  • Behavior-Pool/Implementation
  • Behavior-Projection
  • Behavior-Pool/Implementation für Projektion

Was nun?

  • Anlage eines eigenen Objektes mit OData V4 und Draft-Unterstützung
    Aufruf des Objektgenerators
  • UI Service auswählen
  • Weiter und im nächsten Schritt das Paket selektieren
  • Hinterlegen des Alias für den Knoten
  • Prüfen der Namen von Behavior-Implementation und Draft-Tabelle
  • Prüfen des Namens der Service-Entity bzw. der Consumption-View
  • Prüfen der Projection-Implementation Klasse
  • Prüfen der Service-Definition
  • Prüfen des Service-Bindings
  • Letzte Prüfung der zu erstellenden Objekte

Definition von Beziehungen

  • Ein Objekt kann aus mehreren Entitäten bestehen
  • Hier kann man mit dem Wizard "vorarbeiten", muss aber im Nachgang nacharbeiten
  • Alternative:
    • Zuerst das saubere Datenmodell, danach Behavior und Co.

Das ist zu tun

  • Service-Binding löschen
  • Service-Definition löschen
  • Root-Definition entfernen
  • Beziehung vom "Kind" in Richtung "Elternteil" definieren in der R-View
  • Redirect der Assoziation in der Projection
  • Composition auf Elternteil definieren
  • Redirect der Assoziation in der Projection
  • Bearbeiten der Behavior-Definition
  • Bearbeiten der Behavior-Projection
  • Hinzufügen der Entität in Service Definition

Beispiel

Wir haben 2 Entitäten:

  • ZR_FW_ACTOR_00 für die Darsteller
  • ZR_FW_ACIMO_00 für die Darsteller in Filmen

Man könnte die Zuordnungstabelle ACIMO auch unter die Filme hängen, aber wir haben
uns für diesen Ansatz entschieden.

Beide Objekte werden über den Wizard wie zuvor gezeigt angelegt.

Die Löschung von Service-Binding und Definition ist selbsterklärend.

Bearbeiten der I/R-View (Child)

  • Entfernen der Root-Definition
  • Hinzufügen der Association
  • Exponieren der Association

Bearbeiten der C-View (Child)

  • Entfernen der Root-Definition
  • Association-Redirect

Bearbeiten der I/R-View (Parent)

  • Composition definieren inkl. Kardinalität
  • Association exponieren

Bearbeiten der C-View (Parent)

  • Association exponieren inkl. Redirect

Bearbeiten der Behavior-Definition (1)

  • Behavior-Definition um Entität ergänzen

Bearbeiten der Behavior-Definition (2)

  • Hinzufügen der Association vom Parent#

Association to Child

  • Hinzufügen der Association vom Child

Association to Parent

Bearbeiten der Behavior-Projection

  • Erweitern der Projection um die Assoziationen

Bearbeiten der Service-Definition

  • Expose der Projection-View
    h:´200