Ansicht
Dokumentation
ABENCDS_F1_DEFINE_HIERARCHY - CDS F1 DEFINE HIERARCHY
SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up RFUMSV00 - Advance Return for Tax on Sales/PurchasesDiese Dokumentation steht unter dem Copyright der SAP AG.
- DEFINE HIERARCHY
$[@entity_annot1$]
$[@entity_annot2$]
...
$[@hierarchy_annot1$]
$[
@hierarchy_annot2$]
...
$[DEFINE$] HIERARCHY hierarchy
$[parameter_list$]
AS PARENT CHILD HIERARCHY(
SOURCE cds_view
CHILD TO PARENT ASSOCIATION _hierarchy_assoc
$[PERIOD FROM field1 TO field2 VALID FROM from TO to$]
$[DIRECTORY _directory_assoc FILTER BY cds_cond$]
$[START WHERE cds_cond$]
SIBLINGS ORDER BY field1 $[ASCENDING$|DESCENDING$]$[,
field2 $[ASCENDING$|DESCENDING$], ...$]
$[DEPTH depth$]
$[NODETYPE node_type$]
$[LOAD BULK$|INCREMENTAL$|load_option$]
$[MULTIPLE PARENTS ${NOT ALLOWED$}$|LEAVES$|ALLOWED$]
$[ORPHANS IGNORE$|ERROR$|ROOT$]
$[CYCLES ERROR$|BREAKUP$]
$[GENERATE SPANTREE$]
$[CACHE ON$|OFF$|FORCE$])
{ element_list }
Zusätze:
1. ... SOURCE cds_view
2. ... CHILD TO PARENT ASSOCIATION _hierarchy_assoc
3. ... PERIOD FROM field1 TO field2 VALID FROM from TO to
4. ... DIRECTORY _directory_assoc FILTER BY cds_cond
5. ... START WHERE cds_cond
6. ... SIBLINGS ORDER BY field1 $[ASCENDING$|DESCENDING$], ...
7. ... DEPTH depth
8. ... NODETYPE node_type
9. ... LOAD BULK$|INCREMENTAL$|load_option
10. ... MULTIPLE PARENTS ${NOT ALLOWED$}$|${LEAVES ONLY$}$|ALLOWED
11. ... ORPHANS IGNORE$|ERROR$|ROOT
12. ... CYCLES ERROR$|BREAKUP
13. ... GENERATE SPANTREE
14. ... CACHE ON$|OFF$|FORCE
Wirkung
Definiert eine CDS-Entität hierarchy als CDS-Hierarchie in der CDS DDL. Eine CDS-Hierarchie hat eine tabellarische Ergebnismenge, unter deren Zeilen Eltern-Kind-Beziehungen bestehen. Bei einem Zugriff auf eine CDS-Hierarchie als Datenquelle einer Query von wird diese als SQL-Hierarchie behandelt, bei der zusätzliche Hierarchiespalten selektiert werden können.
- Mit @entity_annot und @hierarchy_annot können optionale Annotationen für die CDS-Hierarchie angegeben werden.
- Mit parameter_list wird eine Liste optionaler Eingabeparameter für die CDS-Hierarchie deklariert.
- Mit element_list werden die Elemente der CDS-Hierarchie deklariert.
Die Zusätze in den Klammern hinter AS PARENT CHILD HIERARCHY definieren, wie die Hierarchie erzeugt werden soll:
- Hinter SOURCE ist eine CDS-View cds_view als Quelle der Hierarchie anzugeben.
- Hinter CHILD TO PARENT ASSOCIATION ist eine von der Quelle cds_view exponierte Hierarchieassoziation _hierarchy_assoc anzugeben. Die Hierarchieassoziation muss eine Selbstassoziation sein, wobei die Assoziationsquelle und das Assoziationsziel die Quelle cds_view sein müssen. Die ON-Bedingung der Hierarchieassoziation definiert die Eltern-Kind-Beziehungen zwischen den Hierarchieknoten.
- Hinter START WHERE kann eine Startbedingung angegeben werden, welche Wurzelknoten für die Wurzelknotenmenge der Hierarchie definiert. Die Hierarchie besteht aus den Wurzelknoten der Wurzelknotenmenge und deren Nachfahrenknoten. Bei der Nichtangabe von START WHERE besteht die Wurzelknotenmenge implizit aus allen Zeilen, in denen die Spalte mit dem Elternknoten (wie durch die Hierarchieassoziation definiert) initial ist.
Die übrigen Zusätze legen weitere Eigenschaften der Hierarchie fest. Die Zeilen der tabellarischen Ergebnismenge der CDS-Hierarchie sind die Hierarchieknoten der erzeugten Hierarchie ohne deren Hierarchiespalten.
Der Name einer CDS-Hierarchie befindet sich im Namensraum aller globalen Typen eines AS ABAP.
Hinweise
- Die Syntax und Funktionalität einer CDS-Hierarchie entspricht im Wesentlichen dem Hierarchiegenerator HIERARCHY in .
- Anders als in kann in ABAP CDS nicht auf die zusätzlichen Hierarchiespalten einer CDS-Hierarchie zugegriffen werden. Statt dessen müssen die zugehörigen Hierarchieattribute falls gewünscht in der Elementliste der CDS-Hierarchie aufgelistet werden.
- Auf einer SAP-HANA-Datenbank beruht die Erzeugung der Ergebnismengen von CDS-Hierarchien und des Hierarchiegenerators HIERARCHY auf der Verwendung der dortigen Hierarchie-Generator-Funktionen HIERARCHY und ähnlichen. Für mehr Informationen siehe die HANA-SQL-Dokumentation.
- Da aus der START WHERE-Bedingung generierte Hierarchien auf der Datenbank gepuffert werden, sollen fest Werte, die selten geändert werden, für die Wurzelknoten von großen Datenhierarchien verwendet werden. Mit den Hierarchienavigatoren im ABAP SQL können dann Unterknoten solcher Hierarchien ausgewertet werden. Insbesondere die Angabe der Wurzelknoten durch beliebige Parameter sollte auf kleine Hierarchien oder Demonstrationen eingeschränkt werden.
Beispiel
Definition einer einfachen CDS-Hierarchie. Das Programm
DEMO_HIERARCHY_TREE greift auf die CDS-Hierarchie zu und vergleicht diesen Zugriff mit anderen Zugriffen auf gleichartige Hierarchien in .
Zusatz 1
... SOURCE cds_view
Wirkung
Der obligatorische Zusatz SOURCE gibt eine oder als Hierarchiequelle der CDS-Hierarchie an. Die Quelle muss die hinter CHILD TO PARENT ASSOCIATION angegebene Hierarchieassoziation in ihrer SELECT-Liste exponieren.
Hinweis
Derzeit sind CDS-View-Entitäten und DDIC-basierte CDS-Views die einzigen
CDS-Entitäten,
die als Quelle einer CDS-Hierarchie angegeben werden können. Insbesondere kann eine CDS-Hierarchie nicht Quelle einer CDS-Hierarchie sein.
Beispiel
Die CDS-Hierarchie des vorhergehenden Beispiels verwendet folgende CDS-View als Quelle:
Zusatz 2
... CHILD TO PARENT ASSOCIATION _hierarchy_assoc
Wirkung
Der obligatorische Zusatz CHILD TO PARENT ASSOCIATION gibt die Hierarchieassoziation an, über deren ON-Bedingung die Nachfahrenknoten der Wurzelknotenmenge selektiert werden. Die Hierarchieassoziation muss von der hinter SOURCE angegebenen CDS-View exponiert werden.
Die Hierarchieassoziation definiert die Eltern-Kind-Beziehung zwischen den Hierarchieknoten. Dafür gelten folgende Voraussetzungen:
- Die CDS-Assoziation muss eine Selbstassoziation sein.
- In der ON-Bedingung der CDS-Assoziation dürfen nur mit AND kombinierte Vergleiche auf Gleichheit mit dem Operator = vorkommen.
- In jedem Vergleich der ON-Bedingung muss ein Feld der Assoziationsquelle mit einem über den Präfix _hierachy_assoc gekennzeichneten Feld des Assoziationsziels verglichen werden.
- Die Assoziationsquelle der Assoziation darf keine Felder enthalten, die den gleichen Namen wie ein Hierarchieattribut haben. Für ein solches Feld muss ein alternativer Elementname definiert werden.
Jede Zeile der Ergebnismenge der Quelle hierarchy_source, welche die ON-Bedingung für einen bereits vorhandenen Hierarchieknoten erfüllt, wird falls möglich rekursiv als dessen Kindknoten in die Hierarchie aufgenommen.
Hinweis
Die optionalen Zusätze definieren weitere Bedingungen, ob eine Zeile als Hierarchieknoten aufgenommen werden kann oder nicht.
Beispiel
Die CDS-View des vorhergehenden Beispiels exponiert ihre Assoziation
_tree. Diese CDS-Assoziation erfüllt alle Anforderungen an eine Hierarchieassoziation und kann als solche verwendet werden.
Zusatz 3
... PERIOD FROM field1 TO field2 VALID FROM from TO to
Wirkung
Der optionale Zusatz PERIOD definiert die Hierarchie als temporale SQL-Hierarchie in der die Hierarchieknoten durch einen Abgleich von Zeitintervallen limitiert werden.
- Mit field1 und field2 werden die Felder der Quelle cds_view angegeben, welche die Unter- und Obergrenzen einer Periode in den Hierarchiedaten definieren. field1 und field2 müssen unterschiedliche Felder mit gleichem Datentyp sein. Dies kann sein:
- Der eingebaute Typ DATS des ABAP Dictionary.
- Ein Datentyp, der durch eines der DDIC-Datenelemente TIMESTAMP oder TIMESTAMPL definiert wird.
- Mit from und to wird die Unter- und Obergrenze eines Zeitintervalls definiert, das als Bedingung für die Perioden der Wurzelknotenmenge wirkt. Der Datentyp von from und to muss dem von field1 und field2 entsprechen. Gepflegt werden können z.B.:
- Parameter aus der Parameterliste der Hierarchie. Dabei ist nur die Syntax $parameters.pname möglich.
- Literale, deren Wert zum geforderten Datentyp passt. Typisierte Datumsliterale werden empfohlen.
Eine temporale SQL-Hierarchie wird wie folgt erzeugt:
- Es werden nur Wurzelknoten der Wurzelknotenmenge berücksichtigt, in denen die über field1 und field2 definierte Periode eine nicht leere Schnittmenge mit dem durch from und to definierten Zeitintervall hat. Diese Schnittmenge bildet das Gültigkeitsintervall der Wurzelknoten.
- Es werden nur Kindknoten erzeugt, in denen die über field1 und field2 definierte Periode eine nicht leere Schnittmenge mit dem Gültigkeitsintervall des Elternknotens hat. Diese Schnittmenge bildet das Gültigkeitsintervall des Kindknotens.
Für temporale SQL-Hierarchien gibt es zusätzliche Hierarchieattribute VALID_FROM und VALID_UNTIL, welche die Intervallgrenzen des Gültigkeitsintervalls jedes Hierarchieknotens enthalten.
Der Zusatz PERIOD darf nicht zusammen mit GENERATE SPANTREE verwendet werden.
Hinweise
- Das Gültigkeitsintervall eines Nachfahrenknotens ist immer Teilmenge der Gültigkeitsintervalle aller Vorfahrenknoten. Gültigkeitsintervalle können von Hierarchieebene zu Hierarchieebene nur gleich bleiben oder schmaler werden, aber sich nie verbreitern.
- Damit ein Nachfahrenknoten zu einer temporalen SQL-Hierarchie gehört, genügt es nicht, dass sich seine Periode mit dem über from und to definierten Zeitintervall überschneidet. Ausschlaggebend ist allein das Gültigkeitsintervall des Elternknotens. Ein Pfad einer normalen Hierarchie wird in einer temporalen SQL-Hierarchie an der Stelle abgeschnitten, an der es keine Schnittmenge zwischen der Periode und dem vorangehenden Gültigkeitsintervall gibt.
- Die Assoziationsquelle der aktuellen Hierarchieassoziation darf keine Felder namens VALID_FROM oder VALID_UNTIL haben. Für ein solches Feld muss ein alternativer Elementname definiert werden.
- Der Wert von to kann auch kleiner als der Wert von from sein. Es wird gegebenenfalls dennoch ein Gültigkeitsintervall gebildet. Wenn der Wert der unteren Intervallgrenze der Periode dagegen größer als der Wert der oberen Intervallgrenze ist, ist das Gültigkeitsintervall leer.
- Zusätze wie MULTIPLE PARENTS oder CYCLES wirken auf die temporale SQL-Hierarchie. Knoten, die in einer normalen Hierarchie zu Ausnahmen führen würden, können in einer temporalen SQL-Hierarchie ausgeblendet sein.
- Für die Erzeugung einer temporalen SQL-Hierarchie wird auf einer SAP-HANA-Datenbank die dortige Hierarchie-Generator-Funktion HIERARCHY_TEMPORAL aufgerufen.
Beispiel
Die folgenden CDS-Hierarchien erzeugen zwei temporale SQL-Hierarchien, wobei einmal Datums- und einmal Zeitstempelfelder als
Perioden verwendet werden. Das Programm
DEMO_HIERARCHY_TEMPORAL greift auf die CDS-Hierarchien zu und vergleicht die Ergebnisse mit einer entsprechenden Verwendung des
Hierarchiegenerators HIERARCHY in
. Ein
Ausführen des Programms zeigt die Wirkung des Zusatzes PERIOD.
Zusatz 4
... DIRECTORY _directory_assoc FILTER BY cds_cond
Wirkung
Der optionale Zusatz DIRECTORY definiert eine Filterbedingung cds_cond für die Zeilen der hinter SOURCE angegebenen Quelle der Hierarchie. Die Hierarchie wird nur aus den Zeilen der Quelle generiert, welche die Filterbedingung erfüllen. Für cds_cond können wie folgt mit AND verknüpfte Vergleiche auf Gleichheit mit dem Operator = angegeben werden:
- Der Operator auf der linken Seite eines Vergleichs muss ein Element der aktuellen Hierarchie sein, dessen Name in der hinter SOURCE angegebenen CDS-View wie folgt als Operand vorkommt:
- Auf der linken Seite einer ON-Bedingung einer CDS-Assoziation _directory_assoc.
- Auf der linken Seite einer ON-Bedingung der Hierarchieassoziation _hierarchy_assoc.
- Der Operator auf der rechten Seite des Vergleichs kann ein typisiertes Literal oder ein vom Typ her passender Parameter aus der Parameterliste der Hierarchie sein.
Es gelten die gleichen Regeln für die vergleichbaren Typen wie für CDS-Views.
Hinweise
- Die Filterbedingung entfernt alle Hierarchieknoten und deren Nachfahrenknoten aus der Ergebnismenge, die nicht der Bedingung cds_cond genügen.
- Der Inhalt des Assoziationsziels der CDS-Assoziation _directory_assoc spielt für die Auswertung der Filterbedingung keine Rolle.
- Die Einschränkung der Operanden auf der linken Seite eines Vergleichs auf die Operanden einer CDS-Assoziation der Quelle unterstützt bestimmte Programmiermodelle. Frameworks, welche auf den Modellen beruhen, lesen Daten aus dem Assoziationsziel dieser CDS-Assoziation und übergeben sie an Eingabeparameter der Hierarchie, welche sie in der Filterbedingung auswertet.
Beispiel
Die folgende CDS-View veröffentlicht eine Selbstassoziation _pcr, die eine Eltern-Kind-Beziehung definiert, und eine CDS-Assoziation _dir zu einer DDIC-Datenbanktabelle DEMO_HIERA_DIR:
Die folgende CDS-Hierarchie verwendet den Operand dir_entry aus der linken Seite der ON-Bedingung aus der CDS-View in der Filterbedingung hinter DIRECTORY _dir FILTER BY:
Ein Ausführen des Programms
DEMO_HIERARCHY_PARENTCHILD_DIR erlaubt die Übergabe verschiedener Parameter und zeigt die Wirkung der Filterbedingung.
Zusatz 5
... START WHERE cds_cond
Wirkung
Der optionale Zusatz START WHERE gibt die Startbedingung für die Erzeugung der Hierarchie an. Hinter START WHERE kann ein logischer Ausdruck cds_cond angegeben werden, welcher Zeilen der Quelle cds_view selektiert. Für cds_cond können die gleichen Operatoren wie in einer WHERE-Klausel einer CDS-View angegeben werden und es gelten die gleichen Regeln. Die Operanden der linken Seite können Elemente der hinter SOURCE angegebenen CDS-View sein. Die Operanden der rechten Seite können Literale, Parameter aus der Parameterliste der Hierarchie und Sitzungsvariablen sein. Für die Angabe von Literalen, Parametern und Sitzungsvariablen gilt das gleiche wie bei der Definition von CDS-Views.
Bei der expliziten Nichtangabe des Zusatzes START WHERE wird er über eine Bedingung implizit hinzugefügt, die alle Zeilen mit einer initialen Elternknotenspalte (wie in der Hierarchieassoziation definiert) selektiert.
Die selektierten Zeilen werden als Wurzelknotenmenge in die Hierarchie eingefügt. Für jeden Wurzelknoten der Wurzelknotenmenge werden dann die Nachfahrenknoten selektiert, welche die ON-Bedingung der Hierarchieassoziation erfüllen, und falls möglich ebenfalls in die Hierarchie eingefügt.
Hinweise
- Es wird empfohlen, die Startbedingung immer explizit anzugeben, um die Lesbarkeit der Definition zu erhöhen. Weiterhin ist die durch die implizite Startbedingung definierte Wurzelknotenmenge nicht immer geeignet und kann auch nicht durch Parameter beeinflusst werden.
- Die Startbedingung sollte eine sinnvolle Wurzelknotenmenge selektieren. Wenn keine Zeile der Ergebnismenge der Quelle cds_view die Bedingung erfüllt ist die Hierarchie leer, wenn alle Zeilen sie erfüllen, werden die Nachfahrenknoten jeder Zeile selektiert und eingefügt.
Beispiel
Die folgende CDS-Hierarchie verwendet eine Intervallabgrenzung mit BETWEEN als Startbedingung. Das Programm DEMO_HIERARCHY_START_WHERE greift auf die CDS-Hierarchie zu und vergleicht das Ergebnis mit einer entsprechenden Verwendung des Hierarchiegenerators HIERARCHY in . Ein Ausführen des Programms zeigt die Wirkung des Zusatzes.
Beispiel
Folgende CDS-Hierarchie hat keine START WHERE-Bedingung:
Sie wird wie folgende CDS-Hierarchie implizit behandelt:
Es wird eine implizite START WHERE-Bedingung
hinzugefügt, die von der Elternspalte abhängt, die wiederum von der Hiearchieassoziation abhängig ist. Mit dem Programm
DEMO_CDS_HIERA_START_WHERE wird gezeigt, dass beide CDS-Hierarchien die gleichen Daten selektieren.
Zusatz 6
... SIBLINGS ORDER BY field1 $[ASCENDING$|DESCENDING$], ...
Wirkung
Der obligatorische Zusatz SIBLINGS ORDER BY sortiert Geschwisterknoten in der Hierarchie. Hinter dem Zusatz SIBLINGS ORDER BY können in einer kommaseparierten Liste Felder field1, field2, ... der Quelle cds_view angegeben werden, nach denen die Geschwisterknoten sortiert werden sollen.
Zu jedem Feld kann der Zusatz ASCENDING für aufsteigende oder DESCENDING für absteigende Sortierung angegeben werden, wobei standardmäßig aufsteigend sortiert wird.
Die hinter SIBLINGS ORDER BY angegebenen Felder dürfen nicht vom Typ LCHR, LRAW, STRING, RAWSTRING oder GEOM_EWKB sein.
Hinweis
Der Zusatz SIBLINGS ORDER BY ist bei einer CDS-Hierarchie obligatorisch, da diese Sortierung nicht mehr nachträglich durchgeführt werden kann. Beispielsweise kann das Ergebnis eines Hierarchienavigators in von der Sortierung der als Quelle angegebenen Hierarchie abhängen. Während ein als Quelle angegebener Hierarchiegenerator direkt dort sortiert werden kann, ist dies bei vordefinierten CDS-Hierarchien nicht mehr möglich.
Beispiel
Die folgende CDS-Hierarchie sortiert Geschwister absteigend nach dem Feld id. Das Programm
DEMO_HIERARCHY_SIBLINGS_ORDER greift auf die CDS-Hierarchie zu und vergleicht das Ergebnis mit einer entsprechenden Verwendung des
Hierarchiegenerators HIERARCHY in
. Ein Ausführen des Programms zeigt die Wirkung des Zusatzes.
Zusatz 7
... DEPTH depth
Wirkung
Der optionale Zusatz depth begrenzt die Anzahl der Hierarchieebenen, über die Nachfahrenknoten erzeugt werden. Für depth kann ein typisiertes Literal oder ein Parameter aus der Parameterliste der Hierarchie angegeben werden, der einen Integer-Typ hat.
Der Wert in depth hat folgende Bedeutung:
- Für Werte von depth größer 0 werden ausgehend von einem Wurzelknoten so viele Hierarchiekanten verfolgt, wie in depth angegeben sind.
- Für Werte von depth gleich 0 werden nur die Wurzelknoten in die Hierarchie eingefügt.
- Für Werte von depth kleiner 0 werden keine Hierarchieknoten erzeugt.
Der Zusatz DEPTH kann nur dann verwendet
werden, wenn der Zusatz ORPHANS nicht oder als ORPHANS IGNORE angegeben ist.
Beispiel
Die folgende CDS-Hierarchie begrenzt die Hierarchieebenen über einen Eingabeparameter p_depth. Das Programm
DEMO_HIERARCHY_DEPTH greift auf die CDS-Hierarchie zu und vergleicht das Ergebnis mit einer entsprechenden Verwendung des
Hierarchiegenerators HIERARCHY in
. Ein Ausführen des Programms zeigt die Wirkung des Zusatzes.
Zusatz 8
... NODETYPE node_type
Wirkung
Mit dem optionalen Zusatz NODETYPE wird eine Element der CDS-Hierarchie identifiziert, das den Typ des Hierarchieknotens ermittelt kann. Die Werte dieses Elements müssen Elementnamen sein, die auch in der Elementliste der CDS-Hierarchie enthalten sind. Über die Fremdschlüssel- oder Textassoziation, die dem jeweiligen Element über eigene Annotationen zugeordnet ist, können die Attribute und der Text für den jeweiligen Hierarchieknoten ermittelt werden. Das mit NODETYPE angegebene Element node_type wird in den Metadaten der CDS-Hierarchie abgelegt und kann von Consumern über die Methode GET_NODETYPE_FIELD des Interfaces IF_DD_CDS_READ_API_HIER_C2P ausgelesen werden.
Hinweis
Ein aktuelles Framework, mit dem NODETYPE analysiert werde kann, ist die ABAP Analytical Engine.
Beispiel
In der folgenden baumartigen CDS-Hierarchie wird das Element name als Knotentyp festgelegt. Wenn ein Hierarchieknoten im Element name den Wert Apple hat, soll er ein Blattknoten ohne Nachfahrenknoten sein.
Das Programm DEMO_HIERARCHY_TREE_NODETYPE greift auf die CDS-Hierarchie zu und ein Ausführen gibt die Hierarchieknoten aus, die gegen die Regel verstoßen. Hierzu wird der Knotentyp der CDS-Hierarchie vom folgenden Quelltext ausgewertet:
Beispiel
In der folgenden baumartigen CDS-Hierarchie wird das Element NodeType als Knotentyp festgelegt. Bei der Auswahl von Daten aus der CDS-Hierarchie für eine mit der ABAP Analytical Engine verwendbare View kann das Element NodeType zwei unterschiedliche Werte zurückgeben. Der eine ist CostCenter und der andere ist HierarchyNode. Falls NodeType = CostCenter, müssen die Elemente ControllingArea und CostCenter gefüllt werden und es kann über die Fremdschlüsselassoziation _CostCenter der Text und zusätzliche Attribute abgeleitet werden. Falls NodeType = HierarchyNode, wird über die Textassoziation _Text der Text für diesen Knoten abgerufen.
define hierarchy DEMO_COSTCENTERHIER
with parameters
p_controllingArea : fis_kokrs,
P_hierarchy : fis_hryid_cctr
as parent child hierarchy(
source
DEMO_COSTCENTERHIERARCHYNODE
child to parent association
_parent
directory
_Hierarchy
filter by
ControllingArea = $parameters.p_controllingArea
and CostCenterHierarchy = $parameters.P_hierarchy
start where
ParentNode is initial
siblings order by
HierarchyNodeSequence
nodetype
NodeType
)
{
@ObjectModel.foreignKey.association: '_ControllingArea'
ControllingArea,
CostCenterHierarchy,
@ObjectModel.text.association: '_Text'
HierarchyNode,
ParentNode,
@ObjectModel.foreignKey.association: '_CostCenter'
CostCenter,
HierarchyNodeSequence,
NodeType,
_Text,
_CostCenter,
_Hierarchy,
_ControllingArea
}
Zusatz 9
... LOAD BULK$|INCREMENTAL$|load_option
Wirkung
Der Zusatz LOAD gibt die Load-Richtlinie für die generierte Hierarchie an. Er kann für die Performance-Optimierung verwendet werden.
Der Zusatz bewirkt folgendes:
- BULK
- Dies ist die Standardeinstellung. Die vollständige Quelltabelle der Hierarchie wird geladen.
- INCREMENTAL
- Nur die Zeilen der Quelltabelle, die von den Startknoten (Wurzelknotenmenge) erreicht werden können, werden geladen.
- load_option
- Für load_option kann mit der Syntax $parameters.pname ein Parameter aus der Parameterliste der Hierarchie angegeben werden. Der Parameter muss den Datentyp CHAR oder SSTRING und mindestens die Länge 11 haben. Der Parameter hat die gültigen Werte "BULK" oder "INCREMENTAL“ in Großbuchstaben, die die gleiche Wirkung wie die jeweiligen Schlüsselwörter haben. Ungültige Werte führen zu einer Ausnahme von der Datenbank.
Hinweise
- Die Performance-Optimierung mit LOAD INCREMENTAL ist abhängig von der Datenquelle. Wenn die Quelltabelle sehr groß ist und die Hierarchie vergleichsweise wenig Zeilen liest, wirkt es sich günstig auf die Performance aus. Wenn die Quelltabelle dagegen nur wenige Zeilen hat und sie alle Teil der Hierarchie sind, kann LOAD INCREMENTAL sogar mehr Zeit in Anspruch nehmen als LOAD BULK.
- LOAD INCREMENTAL darf nicht mit globalen temporären Tabellen als Datenquelle verwendet werden, weil es sich nicht günstig auf die Performance auswirkt, sondern diese verlangsamt.
- Die gültigen Werte für load_option sind die Namen von Aufzählungskonstanten mit dem Aufzählungstyp LOAD_OPTION aus der Klasse SQL_HIERARCHY. Beim Zugriff auf eine CDS-Hierarchie mit einem Parameter für load_option in ABAP SQL kann die Zeichendarstellung dieser Aufzählungskonstanten übergeben werden.
Beispiel
Folgende CDS-Hierarchie verwendet den Zusatz LOAD mit einem Parameter p_load:
Folgende SELECT-Anweisung wird dem Programm DEMO_CDS_HIERA_BULK_INCREMENT entnommen:
Durch die Konvertierung der Aufzählungskonstante sql_hierarchy=>c_load_option-incremental
in eine Zeichenkette wird der Wert "INCREMENTAL"
an den Parameter p_load übergeben. Das Programm funktioniert wie im
ausführbaren Beispiel für den Hierarchiegenerator von ABAP SQL beschrieben.
Zusatz 10
... MULTIPLE PARENTS ${NOT ALLOWED$}$|${LEAVES ONLY$}$|ALLOWED
Wirkung
Der optionale Zusatz MULTIPLE PARENTS legt fest, ob die Hierarchie Kindknoten mit mehreren Elternknoten haben darf oder nicht:
- NOT ALLOWED
- Standardeinstellung, ein Kindknoten darf nur genau einen Elternknoten haben.
- LEAVES ONLY
- Nur Blattknoten dürfen mehrere Elternknoten haben.
- ALLOWED
- Alle Hierarchieknoten dürfen mehrere Elternknoten haben.
Beispiel
Die folgende CDS-Hierarchie erlaubt mehrere Elternknoten für Blattknoten. Das Programm
DEMO_HIERARCHY_MULTI_PARENTS greift auf die CDS-Hierarchie zu und vergleicht das Ergebnis mit einer entsprechenden Verwendung des
Hierarchiegenerators HIERARCHY in
. Ein Ausführen des Programms zeigt die Wirkung des Zusatzes.
Zusatz 11
... ORPHANS IGNORE$|ERROR$|ROOT
Wirkung
Der optionale Zusatz ORPHANS definiert die Behandlung von Waisenknoten. Es gibt folgende Arten von Waisenkindern:
- Hierarchieknoten, denen gemäß der Eltern-Kind-Beziehung zwar Elternknoten zugeordnet werden könnten, die Elternknoten aber nicht in der Hierarchie enthalten sind (echte Waisen).
- Hierarchieknoten, die nicht über Hierarchiekanten von der Wurzelknotenmenge aus erreichbar sind.
- Hierarchieknoten, die zu einem Knotenzyklus gehören und nicht über Hierarchiekanten von der Wurzelknotenmenge aus erreichbar sind (Waiseninseln).
Die Zusätze bewirken Folgendes:
- IGNORE
- Standardeinstellung, Waisenknoten werden nicht in die Hierarchie eingefügt.
- ERROR
- Wenn Waisenknoten erkannt werden, kommt es zu einer Ausnahme.
- ROOT
- Waisenknoten werden wie folgt in die Hierarchie eingefügt:
- Echte Waisen werden als Wurzelknoten in die Wurzelknotenmenge aufgenommen und im Hierarchieattribut HIERARCHY_IS_ORPHAN als Waisenknoten gekennzeichnet.
- Nachfahrenknoten von echten Waisen werden wie solche von normalen Elternknoten aus der Wurzelknotenmenge behandelt, sind aber ebenfalls im Hierarchieattribut HIERARCHY_IS_ORPHAN als Waisenknoten gekennzeichnet.
- Für die Hierarchieknoten einer Waiseninsel wird ein Elternknoten in der Wurzelknotenmenge für den Kindknoten generiert, bei dem der Zyklus auftritt. In dem generierten Wurzelknoten enthalten alle Spalten der Quelle hierarchy_source den Null-Wert. In den Hierarchieattributen ist der zusätzliche Wurzelknoten als Waisenknoten gekennzeichnet und PARENT_ID enthält ebenfalls den Null-Wert.
Beispiel
Die folgende CDS-Hierarchie verwandelt Waisenknoten in Wurzelknoten. Das Programm
DEMO_HIERARCHY_ORPHANS greift auf die CDS-Hierarchie zu und vergleicht das Ergebnis mit einer entsprechenden Verwendung des
Hierarchiegenerators HIERARCHY in
. Ein Ausführen des Programms zeigt die Wirkung des Zusatzes.
Zusatz 12
... CYCLES ERROR$|BREAKUP
Wirkung
Der Zusatz CYCLES legt die Behandlung von Knotenzyklen fest. Die Zusätze bewirken folgendes:
- FEHLER
- Standardeinstellung, wenn ein Knotenzyklus erkannt wird, kommt es zu einer Ausnahme.
- BREAKUP
- Die Verfolgung von Nachfahrenknoten wird bei dem Kindknoten, bei dem ein Knotenzyklus auftritt, abgebrochen und das Hierarchieattribut HIERARCHY_IS_CYCLE auf den Wert 1 gesetzt.
Wenn der Zusatz BREAKUP angegeben ist, dann muss auch MULTIPLE PARENTS ALLOWED angegeben sein.
Beispiel
Die folgende CDS-Hierarchie bricht Knotenzyklen mit CYCLES BREAKUP ab. Das Programm
DEMO_HIERARCHY_CYCLES greift auf die CDS-Hierarchie zu und vergleicht das Ergebnis mit einer entsprechenden Verwendung des
Hierarchiegenerators HIERARCHY in
. Ein Ausführen des Programms zeigt die Wirkung des Zusatzes.
Zusatz 13
... GENERATE SPANTREE
Wirkung
Der Zusatz GENERATE SPANTREE bewirkt, dass ausgehend von jedem Wurzelknoten nur Kindknoten in die Hierarchie eingefügt werden, die nicht mehrere Elternknoten haben. Wenn ein Kindknoten auf Grund der Eltern-Kind-Beziehungen hinter seinem Wurzelknoten mehrere Elternknoten hätte, wird von den möglichen Pfaden von dem Wurzelknoten zu diesem Kindknoten genau einer ausgewählt und nur für diesen wird der Kindknoten erzeugt.
- Bei verschieden langen Pfaden ist es der kürzeste.
- Bei gleich langen Pfaden ist es der erste gefundene.
Wenn der Zusatz GENERATE SPANTREE angegeben ist, dürfen die Zusätze MULTIPLE PARENTS, ORPHANS und CYCLES nicht angegeben werden und es gelten teilweise andere Standardwerte:
- MULTIPLE PARENTS wird implizit mit ALLOWED verwendet.
- CYCLES wird implizit mit BREAKUP verwendet.
Hinweise
- Wenn die Eltern-Kind-Beziehungen für die aktuellen Daten ohnehin nur baumartige Hierarchien ergeben, hat der Zusatz GENERATE SPANTREE keine Wirkung.
- Die Auswahl eines von mehreren Pfaden zu einem Kindknoten bedeutet nicht, dass die anderen Pfade vollständig verworfen werden. Es fehlen nur die zu dem Kindknoten führenden Kanten.
- Der Zusatz GENERATE SPANTREE kann verwendet werden, um festzustellen, ob es mindestens einen Pfad von einem Wurzelknoten zu einem Kindknoten gibt, ohne dass die Ergebnismenge sämtliche Pfade enthalten muss.
- Mit dem Zusatz GENERATE SPANTREE wird auf einer SAP-HANA-Datenbank die dortige Hierarchie-Generator-Funktion HIERARCHY_SPANTREE aufgerufen.
Beispiel
Die folgende CDS-Hierarchie verwendet den Zusatz GENERATE SPANTREE. Das Programm
DEMO_HIERARCHY_SPANTREE greift auf die CDS-Hierarchie zu und vergleicht das Ergebnis mit einer entsprechenden Verwendung des
Hierarchiegenerators HIERARCHY in
. Ein Ausführen des Programms zeigt die Wirkung des Zusatzes.
Zusatz 14
... CACHE ON$|OFF$|FORCE
Wirkung
Der optionale Zusatz CACHE definiert die Caching-Richtlinie für das generierte Hierarchieergebnis. Er kann für die Performance-Optimierung verwendet werden. Der Zusatz bewirkt folgendes:
- ON
- Falls die Quelle als zuverlässig deterministisch festgestellt werden kann, wird die generierte Hierarchie durch die Datenbank zwischengespeichert. Dies ist das Standardverhalten.
- OFF
- Die generierte Hierarchie wird durch die Datenbank nicht zwischengespeichert.
- FORCE
-
Auch wenn die Quelle nicht als zuverlässig deterministisch festgestellt werden kann, wird die generierte Hierarchie durch die Datenbank zwischengespeichert.
General Material Data rdisp/max_wprun_time - Maximum work process run time
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 69346 Date: 20240523 Time: 173655 sap01-206 ( 727 ms )