This is a test message to test the length of the message box.
Login
ABAP CDS Migration der Views
Erstellt von Software-Heroes

CDS - Migration der Views

130

Du hast noch viele alte Core Data Services in deinem ABAP System? Zeit für die Migration zur neuen Entität.

Werbung


In diesem Artikel werden wir uns die Migration On-Premise und in der Cloud anschauen. Dabei werden wir an zwei Beispielen zeigen, wie du die Migration deiner Core Data Services auf die neuen Views hinbekommst.

 

Einleitung

Die neuen Views gibt es nun schon eine ganze Weile und mit dem Release 7.57 (S/4HANA 2022) sind nun auch die alten Core Data Services obsolet. Bist du auf einem aktuellen S/4 HANA Release, dann solltest du dir langsam Gedanken machen, die Views zu migrieren. Dazu stellt SAP verschiedene Hilfsmittel zur Verfügung, die wir in diesem Artikel einmal näher beleuchten wollen.

 

Migration (Report)

In diesem Abschnitt werden wir unseren alten Core Data Services mit den zur Verfügung gestellten Reports migrieren. Bist du noch nicht auf einem S/4 HANA 2023, dann ist das der bevorzugte Weg. Die Migrationsreports stehen ab einem S/4HANA 2021 zur Verfügung.

 

Vorbereitung

Bevor wir mit der Migration starten, legen wir uns im ersten Schritt einen alten Core Data Service im System an, um an diesem die Migration durchführen zu können. Dazu definieren wir einen einfachen Core Data Service basierend auf der Tabelle BSEG (alte Finanz Positionen).

@AbapCatalog.sqlViewName: 'ZBSIMIGPOS'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Migration Example (Position)'
@Metadata.ignorePropagatedAnnotations: true
define view ZBS_I_MigrationPosition
  as select from bseg
{
  key bukrs as CompanyCode,
  key belnr as DocumentNumber,
  key gjahr as FiscalYear,
  key buzei as AccountingDocumentItem,
      buzid as AccountingDocumentItemType,
      augdt as ClearingDate,
      augcp as ClearingCreationDate,
      @Semantics.amount.currencyCode : 't001.waers'
      dmbtr as AmountInCompanyCodeCurrency,
      @Semantics.amount.currencyCode : 'bkpf.waers'
      wrbtr as AmountInTransactionCurrency
}

 

Auf diesem View definieren wir einen Consumption View der die Daten als Summe nach außen zur Verfügung gestellt.

@AbapCatalog.sqlViewName: 'ZBSCMIGPOS'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Migration Example (Consumption)'
define view ZBS_C_MigrationPosition
  as select from ZBS_I_MigrationPosition
{
  key CompanyCode,
  key DocumentNumber,
  key FiscalYear,
      sum( AmountInCompanyCodeCurrency ) as SumForCompany,
      sum( AmountInTransactionCurrency ) as SumForTransaction
}
group by
  CompanyCode,
  DocumentNumber,
  FiscalYear

 

Analyse

In dieser Phase benötigen wir den Report RUTDDLS_MIGRATION_CANDIDATES zur Analyse der Core Data Services im System, die wir migrieren möchten. Führen wir den Report für die beiden Views aus, erhalten wir eine Einschätzung zur Migrationsmöglichkeit der Views.

 

In diesem Fall können wir die beiden Views migrieren und damit mit der Umsetzung beginnen.

 

Umsetzung

Für die Umsetzung starten wir mit dem Report RUTDDLSV2MIGRATION und starten zuerst einen Simulationslauf für die beiden Objekte.

 

Allerdings erhalten wir nun Fehler bei der Umsetzung der Objekte. Schauen wir uns das Protokoll etwas näher an, finden wir die Fehlermeldung, dass die Referenzfelder nicht in der Entität enthalten sind.

 

In den alten Views war es möglich, auf das Referenzfeld in der Annotation zu verweisen und wir mussten dieses nicht explizit im View mitgeben. In diesem Fall müssen wir die beiden Felder per Assoziation in den Core Data Service aufnehmen. Nach der Anpassung des Basis Views sieht dieser nun wie folgt aus.

@AbapCatalog.sqlViewName: 'ZBSIMIGPOS'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Migration Example (Position)'
@Metadata.ignorePropagatedAnnotations: true
define view ZBS_I_MigrationPosition
  as select from bseg
  association [1..1] to t001 as _Company on  _Company.bukrs = $projection.CompanyCode
  association [1..1] to bkpf as _Head    on  _Head.bukrs = $projection.CompanyCode
                                         and _Head.belnr = $projection.DocumentNumber
                                         and _Head.gjahr = $projection.FiscalYear
{
  key bukrs          as CompanyCode,
  key belnr          as DocumentNumber,
  key gjahr          as FiscalYear,
  key buzei          as AccountingDocumentItem,
      buzid          as AccountingDocumentItemType,
      augdt          as ClearingDate,
      augcp          as ClearingCreationDate,
       @Semantics.amount.currencyCode : 'CompanyCurrency'
      dmbtr          as AmountInCompanyCodeCurrency,
      _Company.waers as CompanyCurrency,
      @Semantics.amount.currencyCode : 'DocumentCurrency'
      wrbtr          as AmountInTransactionCurrency,
      _Head.waers    as DocumentCurrency
}

 

Den Consumption View müssen wir ebenfalls anpassen und die Felder aus dem View darunter aufnehmen.

@AbapCatalog.sqlViewName: 'ZBSCMIGPOS'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Migration Example (Consumption)'
define view ZBS_C_MigrationPosition
  as select from ZBS_I_MigrationPosition
{
  key CompanyCode,
  key DocumentNumber,
  key FiscalYear,
      CompanyCurrency,
      DocumentCurrency,
      @Semantics.amount.currencyCode : 'CompanyCurrency'
      sum( AmountInCompanyCodeCurrency ) as SumForCompany,
      @Semantics.amount.currencyCode : 'DocumentCurrency'
      sum( AmountInTransactionCurrency ) as SumForTransaction
}
group by
  CompanyCode,
  DocumentNumber,
  FiscalYear,
  CompanyCurrency,
  DocumentCurrency

 

Nun können wir einen zweiten Simulationslauf starten und das Ergebnis prüfen. So weit wurden alle Prüfungen erfolgreich abgeschlossen und wir können im nächsten Schritt die Umsetzung anstoßen.

 

Dazu setzen wir im Report von "Simulation generation" auf "Generate inactive version". Damit werden die beiden Views angepasst, die SQL Views von der Datenbank gelöscht und eine inaktive Version generiert. Da wir im $TMP Paket arbeiten, müssen wir keinen Transport für die Umsetzung angeben. Zum Abschluss können wir nun die beiden Views aktivieren. Schauen wir uns die Basis an, hat sich hier nur im Kopfbereich etwas verändert.

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Migration Example (Position)'
@Metadata.ignorePropagatedAnnotations: true
define view entity ZBS_I_MigrationPosition

 

Auch im Consumption View sind die Annotationen weniger geworden, nicht mehr benötigte Annotationen werden durch die Anpassung entfernt.

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Migration Example (Consumption)'
define view entity ZBS_C_MigrationPosition

 

Migration (Wizard ADT)

Im nächsten Schritt verwenden wir den Wizard in den ABAP Development Tools, um unser Datenmodell aus der Core Data Service Schulung auf den aktuellen Stand zu überführen. In der Cloud (ABAP Environment, Public Cloud) steht dir nur dieser Weg für die Migration zur Verfügung, On-Premise kannst du mit einem S/4HANA 2023 Release auch diesen Weg nutzen.

 

Analyse

Um die Analyse zu starten, markieren wir die Core Data Services, die wir im nächsten Schritt prüfen lassen wollen. Am einfachsten geht das über den Project Explorer und per Rechts-Klick im Kontextmenü.

 

Dort siehst du alle Views die den Kriterien entsprechen. Bereits umgestellt Entitäten werden aus der Liste entfernt. Die Meldung findest du im oberen linken Bereich des Popups.

 

Im nächsten Schritt kannst du den Lauf einstellen, ob du zuerst eine Analyse durchführen möchtest oder direkt mit der Migration starten willst.

 

Je nach Anzahl der Objekte dauert der Lauf dann entsprechend lang.

 

Als Ergebnis erhalten wir ein Popup mit den entsprechenden Laufinformationen. Über die Checkbox können wir uns die fehlerhaften Objekte anzeigen lassen, um die Fehler zu analysieren. Wenn du einen View markierst, siehst du im unteren Teil einen Vergleich der beiden Ressourcen (Aktuell -> Neu) und kannst dir möglichen Änderungen anschauen.

 

Anpassung

Da wir noch Views mit Fehlern haben, müssen wir zunächst alle Fehler korrigieren. Die Meldungen weisen in den meisten Fällen auf fehlende Mengen- und Währungseinheiten hin. Hier ergänzen wir wieder die entsprechenden Felder im View mit zusätzlichen Assoziationen, der Aufnahme des Feldes in den View oder mit der Ergänzung einer Annotation.

In einem speziellen Fall werden wir auf den Datentyp in unserem Union Beispiel hingewiesen. Da wir vorher keinen spezifischen Typen gecastet haben, sondern das Element Inline per Wert (0) angelegt haben, casten wir nun auf einen entsprechend passenden Typen.

define view ZBS_I_DmoUnion
  as select from ZBS_C_DmoPositionError
{

  key DocumentNumber,
  key PositionNumber,
      'Normal' as PositionType,
      PositionPrice,
      PositionCurrency
}
where
  ErrorInConversion = ' '
union select from ZBS_C_DmoPositionError
{

  key DocumentNumber,
  key PositionNumber,
      'Error'                      as PositionType,
      cast( 0 as abap.curr(15,2) ) as PositionPrice,
      PositionCurrency
}
where
  ErrorInConversion = 'X'

 

Alle durchgeführten Anpassungen findest du in diesem Commit im GitHub Repository, damit du die Änderungen nachvollziehen kannst.

 

Migration

Im letzten Schritt führen wir nun die Änderungen an allen Views durch. Dazu markieren wir wieder alle Views und führen dieses Mal die Migration im Echtlauf durch, um inaktive Views im System zu erzeugen. Das System fragt uns in diesem Fall auch nach einem Transport. Über den "Assign" Button kannst du einen Transport allen Objekten zuweisen und musst dies nicht einzeln machen.

 

Wenn du dann alle Views markierst, kannst du eine Massenaktivierung durchführen und die Views sollten sich ohne Probleme aktivieren lassen. Über das Kontextmenü findest du ebenfalls die Option zum Aktivieren.

 

Über den Commit im GitHub Repository findest du die finalen Views und die gemachten Umstellungen durch die Migration.

 

Zusammenfassung

Die Migration der alten Views auf die neuen Entitäten macht auf jeden Fall Sinn, da ein zweites Objekt, der SQL View nicht mehr nötig ist. Ebenfalls werden sich die Aktivierungszeiten der Views stark erhöhen, was unsere Arbeitszeit beschleunigt.

Mehr zu den geprüften Regeln und den gemachten Umsetzungen findest du im unten verlinkten Artikel, wenn du mehr im Detail wissen möchtest. Dort kannst du noch tiefer in das Thema Migration und Anforderungen eintauchen.

 

Hinweis: In manchen Use-Cases, wie zum Beispiel bei der BW-Extraktion oder der Einbindung in Customizing, werden gern die SQL-Views der Core Data Services verwendet. Du solltest daher mit der Migration "aller" Views vorsichtig sein.

 

Fazit

In dem Artikel wollten wir dir zeigen, wie einfach die Migration der Core Data Services funktioniert und welche Hilfsmittel zur Verfügung stehen, um die Migration durchzuführen. Mit dem passenden Release sollte dir daher nichts mehr im Weg stehen, da es mehr Vorteile als Nachteile damit gibt.

 

Quelle:
SAP Community - A new generation of CDS Views


Enthaltene Themen:
CDSCore Data ServiceMigrationVIEW
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


CDS - Typen und Enums

Kategorie - ABAP

Was wird im ABAP Dictionary die Datenelemente ablösen und wie kannst du schon heute die Typen für die Core Data Services verwenden? Mehr hier.

05.11.2024

ABAP in Praxis - String Verarbeitung

Kategorie - ABAP

In diesem praktischen Beispiel schauen wir uns die String Verarbeitung zur Ermittlung der CDS Namen in CamelCase an und wie du das mit ABAP umsetzen kannst.

15.10.2024

ABAP - CDS Extraktor

Kategorie - ABAP

Wie funktioniert der CDS Extraktor in ABAP und welche Herausforderungen gibt es bei der Entwicklung damit. In diesem Artikel schauen wir uns ein paar Details an.

20.09.2024

ABAP Tools - Arbeiten mit Eclipse (CDS Templates)

Kategorie - ABAP

Wieder das falsche CDS Template bei der Erstellung ausgewählt? Hier ein kleiner Tipp um nachträglich noch den View in ABAP zu korrigieren.

02.07.2024

ABAP Tools - Arbeiten mit Eclipse (CDS Analyse)

Kategorie - ABAP

In der komplexen Welt der CDS Views ist es wichtig, das richtige Tool zur Hand zu haben, um eine Analyse der Strukturen und Datenquellen sicherzustellen.

25.08.2023