Ansicht
Dokumentation

ABENDDIC_CDS_CYCLE_PROBLEMS - DDIC CDS CYCLE PROBLEMS

ABENDDIC_CDS_CYCLE_PROBLEMS - DDIC CDS CYCLE PROBLEMS

rdisp/max_wprun_time - Maximum work process run time   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

ABAP CDS - Zyklische Abhängigkeiten

In den ABAP CDS können CDS-Entitäten mit gegenseitigen Abhängigkeiten definiert werden. Beispielsweise greift eine CDS-View auf eine andere CDS-View oder eine CDS-Tabellenfunktion als Datenquelle zu oder exponiert eine andere CDS-View in einer CDS-Assoziation. Eine CDS-Entität, die eine andere CDS-Entität verwendet, ist von der verwendeten Entität abhängig. Dabei sind zu unterscheiden:

  • technische Abhängigkeiten
CDS-Entitäten sind technisch voneinander abhängig, wenn auch die bei ihrer Aktivierung erzeugten Datenbank-Entitäten voneinander abhängig sind.
  • semantische Abhängigkeiten
CDS-Entitäten sind semantisch voneinander abhängig, wenn die Abhängigkeit durch Metadaten entsteht, die sich nicht in den erzeugten Datenbank-Entitäten widerspiegelt.

Eine zyklische Abhängigkeit bzw. ein Zyklus liegt vor, wenn eine von einer CDS-Entität ausgehende Verfolgung der Abhängigkeiten wieder zur gleichen CDS-Entität führt. Es können zwei Arten von zyklische Abhängigkeiten unterschieden werden:

  • Zyklus von technischen Abhängigkeiten
Nach einer Aktivierung der beteiligten Entitäten käme es aufgrund der technischen Abhängigkeiten auch zu einer zyklischen Abhängigkeit der generierten Datenbank-Entitäten. Eine zyklische Abhängigkeit von Entitäten kann auf Datenbank nicht ausgeprägt werden und eine Menge solcherart voneinander abhängiger Entitäten ist prinzipiell nicht aktivierbar. Beispiele sind:
  • CDS-Views in denen eine CDS-Entität als direkte Datenquelle verwendet wird, von der die CDS-View direkt oder indirekt abhängt. In der Regel sind solche CDS-Entitäten schon durch Syntaxfehler zu erkennen, da die darin verwendeten Entitäten nicht aktiv vorhanden sein können.

  • Eine CDS-View verwendet eine Assoziation einer anderen View in einem Pfadausdruck und bei der Verwandlung des Pfadausdrucks in einen Join-Ausdruck der Datenbank wird eine zyklische Abhängigkeit erkannt. In der Regel kommt es hierbei erst bei der Aktivierung zu einem Fehler.

  • Zyklus durch semantische Abhängigkeiten
Wenn ein Zyklus semantische Abhängigkeiten enthält und ein Weglassen der semantische Abhängigkeiten die zyklische Abhängigkeit aufheben würde, führt eine Aktivierung der beteiligten Entitäten nicht zu einer zyklischen Abhängigkeit zwischen den zugehörigen Datenbank-Entitäten. Dieser Fall kann vorliegen, wenn CDS-Views zwar über Assoziationen miteinander verknüpft sind, aber nicht alle Assoziationen durch die Verwendung von Pfadausdrücken ausgeprägt werden. Eine Menge solcherart voneinander abhängiger Entitäten ist prinzipiell aktivierbar.

Eine Menge von CDS-Entitäten, für die ein semantischer Zyklus vorliegt, kann nicht in einem Schritt aktiviert werden:

  • Bei einer Massenaktivierung versucht das Aktivierungswerkzeug des ABAP Dictionary eine solche Menge so weit wie möglich in Teilschritten zu aktivieren, wobei erst eine Aktivierung unter Weglassung der semantischen Beziehungen und danach eine Aktivierung inklusive der semantischen Beziehungen durchgeführt wird. Dies funktioniert derzeit noch nicht vollständig.
  • Wenn die automatische Auflösung einer semantischen zyklischen Abhängigkeit durch schrittweise Aktivierung nicht möglich ist, liegt ein Zyklenproblem vor, das nur durch manuelle Eingriffe in die Aktivierung gelöst werden kann. Dabei müssten CDS-Quelltexte vor einzelnen Aktivierungsschritte manuell geändert werden, um störende semantische Abhängigkeiten temporär aufzuheben.

Bei der manuellen Lösung eines Zyklenproblems in einem System ist zu beachten, dass nach einem Transport zyklisch voneinander abhängiger CDS-Entitäten die gleichen Probleme im Zielsystem wieder auftreten werden, so dass aufeinander folgende Transporte von Teilmengen nötig werden. Wenn dies nicht möglich ist, d.h. wenn Zyklenprobleme auch manuell nicht gelöst werden können, müssen die betreffenden zyklischen Abhängigkeiten aus dem Datenmodell entfernt werden. Beispielsweise kann die Verwendung von Assoziationen durch explizite Join-Ausdrücke ersetzt werden, die dann nur dort für Abhängigkeiten führen, wo es sie auch tatsächlich gibt.

Hinweise

  • Um Probleme bei der Aktivierung zu vermeiden, sollten zyklische Abhängigkeiten möglichst vermieden werden, auch wenn die beteiligten CDS-Entitäten prinzipiell aktivierbar wären. Das Datenmodell sollte einen hierarchischen Blick auf die Daten zulassen, der zyklische Abhängigkeiten, selbst wenn sie nicht auf der Datenbank ausgeprägt werden, unnötig macht.
  • Die vollständige Auflösung semantischer zyklischer Abhängigkeiten durch schrittweise Aktivierung bei der Massenaktivierung von CDS-Entitäten ist in Entwicklung und für ein zukünftiges Release vorgesehen.
  • Klassische Objekte des ABAP Dictionary können nicht technisch, aber semantisch voneinander abhängig sein. Beispielsweise können klassische Views keine anderen Views als Datenquellen enthalten. Semantische Bezüge sind aber beispielsweise durch Fremdschlüsselbeziehungen oder Wertetabellen möglich. Bei der Massenaktivierung klassischer Dictionary-Objekte werden semantische zyklische Abhängigkeiten bereits vollständig durch die schrittweise Aktivierung aufgelöst.

Beispiel

Die folgenden beiden CDS-Views verwenden sich gegenseitig als Datenquellen und bilden damit einen technischen Zyklus. Jede der Views ist syntaktisch falsch und kann nicht aktiviert werden, solange die andere View nicht aktiv vorhanden ist. Man könnte nun versuchen, in einer View die Abhängigkeit von der anderen View zu entfernen und beide Views zu aktivieren. Wenn danach die Abhängigkeit wieder eingeführt wird, ist die View zwar syntaktisch korrekt, kann aber dennoch nicht aktiviert werden, da die zugehörigen CDS-Datenbank-Views nicht zyklisch abhängig sein dürfen.

@AbapCatalog.sqlViewName: 'TEST1'
define view test_view1 as
       select from
       test_view2
       { * }
@AbapCatalog.sqlViewName: 'TEST2'
define view test_view2 as
          select from
          test_view1
          { * }

Beispiel

Die zyklische Abhängigkeit der folgenden Views entsteht durch Assoziationen und ist semantisch bedingt.

  • Die View test_view1 definiert und exponiert eine Assoziation _assoc1 auf die View test_view2.
  • Die View test_view2 definiert und exponiert eine Assoziation _assoc2 auf die View test_view3.
  • Die View test_view3 verwendet test_view1 als Datenquelle und verwendet deren Assoziation _assoc1 in einer Pfadangabe.

Damit hängt test_view1 über test_view2 von test_view3 und diese wiederum von test_view1 ab. Da es in den Views aber keine Pfadausdrücke gibt, welche die Abhängigkeiten zwischen test_view1 und test_view2 und zwischen test_view2 und test_view3 als Join-Ausdrücke auf der Datenbank ausprägen, liegt kein technischer Zyklus vor und sie sind prinzipiell aktivierbar. Eine Massenaktivierung alle Views ist derzeit aber noch nicht möglich. Eine solche Situation tritt in der Regel nicht während der Entwicklung, sondern erst nach einem Transport in ein Zielsystem auf. Eine Aktivierung ist in diesem Fall nur manuell möglich, indem die Abhängigkeit der View test_view3 von test_view2 durch temporäres Löschen der Assoziation _assoc2 in test_view2 aufgehoben und nach dem Aktivieren der drei Views wieder eingeführt wird. Dies müsste dann in jedem Zielsystem eines Transports durchgeführt werden.

@AbapCatalog.sqlViewName: 'TEST1'
define view test_view1 as
       select from
       table1
       association to test_view2 as _assoc1
                      on table1.field =  _assoc1.field
       { _assoc1,
         field }

@AbapCatalog.sqlViewName: 'TEST2'
define view test_view2 as
       select from
       table2
       association to test_view3 as _assoc2
                      on table2.field =  _assoc2.field
       { _assoc2,
         field }

@AbapCatalog.sqlViewName: 'TEST3'
define view test_view3 as
       select from
       test_view1
       { _assoc1.field }





General Data in Customer Master   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 12973 Date: 20240523 Time: 173451     sap01-206 ( 193 ms )