CDS - Erweiterung von Views
In diesem Artikel geht es um die Erweiterung von Views, um kundeneigene Felder aufzunehmen oder fehlende Informationen nachzuliefern.
Inhaltsverzeichnis
Artikel-Update: Seit Release 7.57 (S/4 HANA 2022) ist DEFINE VIEW als obsolet gekennzeichnet, stattdessen solltest du DEFINE VIEW ENTITY verwenden. Diese können an einigen Stellen zu den Beispielen abweichen. Mehr Informationen zu den neuen Views findest du in diesem Artikel.
In diesem Artikel schauen wir uns die Erweiterung von Core Data Services an und wie wir zusätzliche Felder Apps zur Verfügung stellen können. Dabei werden wir grob auf die zwei Erweiterungsmethodiken eingehen, die aktuell genutzt werden.
Vorbereitung
Im ersten Schritt schauen wir uns die Erweiterung von CDS Views an und wie wir Zusatzinformationen hinzufügen können. Definieren wir dazu erst einmal einen View, den wir erweitern wollen. Dieser basiert auf dem Basic View für Rabatte:
@AbapCatalog.sqlViewName: 'ZBSCDMODISEXT'
@EndUserText.label: 'CDS Extension'
define view ZBS_C_DmoDiscountExtension
as select from ZBS_I_DmoDiscount
{
key PartnerNumber,
key MaterialNumber,
DiscountValue,
_Material.MaterialName,
_Material.MaterialDescription
}
Wie du siehst handelt es sich um einen einfachen View, wir übernehmen die Schlüssel und prägen einige Zusatzinformationen an Texten für das Material aus.
EXTEND VIEW
Im zweiten Schritt wollen wir den View "ZBS_C_DmoDiscountExtension" nun erweitern da wir zusätzliche Informationen benötigen, die aktuell in der App fehlen die über diesem View liegt. Gehen wir davon aus, dass wir die View nicht erweitern können, da es sich um eine Standard-View handelt. Dazu legen wir einen neuen Core Data Services an, aber mit dem Muster "Extend View" und wir übernehmen das neue Feld:
@AbapCatalog.sqlViewAppendName: 'ZBSEDMODISEXT'
@EndUserText.label: 'Extension for ZBS_C_DmoDiscountExtension'
extend view ZBS_C_DmoDiscountExtension with ZBS_E_DmoDiscountExtension
{
_Partner.PartnerName
}
Die Annotation "@AbapCatalog.sqlViewAppendName" unterscheidet sich zu den bisher angelegten Views. Hier definieren wir eine Erweiterung des Core Data Service und fürgen den PartnerNamen hinzu. In der SE11 würde das wie folgt aussehen:
Das neue Feld wird als Append angelegt und der View damit sauber erweitert. In Eclipse würde man nun am Original-View noch eine entsprechende Markierung erhalten:
Im CDS Navigator des Views taucht ebenfalls der entsprechende Eintrag auf und weist auf die Erweiterung hin:
Schauen wir uns nun den "Data Preview" für den Core Data Service an, wird automatisch das neue Feld übernommen und steht uns zur Verfügung. Der View wurde entsprechend erweitert, ohne den Original-View ändern zu müssen:
Hinweis: Die Erweiterung erhält ebenfalls eine eigene Namenskonvention mit E wie Extension, damit der Extension View vom Datenmodell abgrenzbar bleibt.
Assoziation
Die zweite Möglichkeit der Erweiterung ist die Einbindung einer Extension per Assoziation in die verschiedenen Entitäten des Datenmodells, vor allem dann, wenn auch die Datenbanktabelle das neue Feld benötigt. In diesem Erweiterungsszenario sollen zusätzliche Daten in der Applikation gespeichert werden, aber auch gleichzeitig die App die Daten in der UI anzeigen.
Die Erweiterungen werden in den meisten Fällen als "_Extension" eingebaut und zur Verfügung gestellt. Als eigen View bindet es direkt die Datenbanktabelle ein und wird per Assoziation in die entsprechenden Views implementiert:
Die Felder können dann wieder mit einem Extend an die Extension-View gehangen werden. Diese Views haben meist dann auch die entsprechende Annotation "@VDM.viewType: #EXTENSION". Diese Erweiterungsmöglichkeit wird vor allem im SAP Standard eingesetzt, wenn man mit den Key-User-Apps arbeitet.
Fazit
Die Erweiterung von CDS Views ist mittlerweile auch Modifikationsfrei möglich und die Ressourcen bleiben sauber im System getrennt. Wenn du weitere Inhalte in einem View brauchst, solltest du vor dem Kopieren an das erweitern denken.