Vererbungswert

Geltungsbereich / Lebensdauer

Leben im Profil (und nicht in anderen Profilen) während des Profil-Laufs/-Tests.

Begriffsdefinitionen

Im Gegensatz zu einem normalen Einzelwert stellt ein Vererbungswert bis zu 20 Hierarchie-Ebenen (Level) bereit (Level 1…20). Level 1 (Root) ist der Hintergrund, Level 2 liegt vor Level 1, Level 3 liegt vor Level 2 usw. Jedes Level kann einen Einzelwert aufnehmen. Dieser Datentyp existiert nur in Verbindung mit Maps (siehe Kapitel Relevante Funktionen) und wird nicht als Datentyp eines Feldes oder einer Variable verwendet.

Ein Einzelwert kann auch ein Wert mit Empty Flag sein. Wenn ein Level leer ist (kein Wert wurde in das Level geschrieben, siehe Funktion add to inheritance-map) oder der Einzelwert in diesem Level hat ein Empty Flag, ist es "durchsichtig". Level, die einen Wert mit Empty Flag enthalten, werden wie leere Level behandelt.

Der sichtbare Wert ist damit immer derjenige nicht Einzelwert ohne Empty Flag, der am weitesten im Vordergrund liegt (das höchste Level hat). Wenn alle Level entweder leer sind oder nur Werte mit Empty Flag enthalten, dann ist der sichtbare Wert ein String der Länge 0 ("") mit gesetztem Empty Flag). Jeder Einzelwert in einem Level wird typisiert gespeichert. Üblicherweise sollten die Werte aller Level vom gleichen Typ sein. Dies ist aber nicht Pflicht.

Relevante Funktionen


Bisher sind Vererbungswerte nur für die Arbeit mit Maps relevant, speziell für die Funktionen add to inheritance-map, get value from map und remove from map. Der gesamte Vererbungswert mit allen Levels ist in der Named Map unter dem angegebenen Key a enthalten, genau wie sonst ein Einzelwert.

Mit add to inheritance-map kann ein Einzelwert b in einen definierten Level d eingefügt werden. Fügt man mehrmals nacheinander Werte im selben Level hinzu, wird der alte Wert dieses Levels ersetzt, auch wenn der neue Wert ein Wert ist mit gesetztem Empty Flag ist. Wenn Parameter d nicht gesetzt wird, wird Level 1 angenommen.

Vererbungswert versus normaler Einzelwert


Falls sich in der Named Map c zum Key a bereits ein normaler Einzelwert befand, wird beim ersten Aufruf von add to inheritance-map dieser Wert in Level 1 des neuen Vererbungswertes übernommen. Befand sich in der Named Map c zum Key a bereits ein Vererbungswert, so wird nur der Einzelwert in Level d ersetzt/eingefügt. Levels eines Vererbungswertes, die niemals zugewiesen werden, verbrauchen keinen Speicher.

Falls sich in der Named Map c zum Key a ein Vererbungswert befindet, so wird bei normaler Zuweisung eines Wertes zum Key a mit Funktion add to map(key a, value b, name of map c) der gesamte Vererbungswert mit allen Levels verloren gehen und durch den neuen normalen Einzelwert (ohne Levels) ersetzt.

Vererbungswert löschen


Es gibt keine Funktion, um einen Wert aus einem bestimmtem Level des Vererbungswertes zu löschen. Um zu erreichen, dass ein vorher gültig zugewiesener Level "durchsichtig" wird, muss man einen Wert mit gesetztem Empty Flag in dem Level speichern. Dazu reicht es aus, wenn der Wert b den regulären Ausdruck e erfüllt. Das ist z. B. mit b = X und e = X erfüllt oder mit b = und e = .*

Anwendungsbereich von Vererbungswerten


In einem EDIFACT-Dokument oder SAP-IDoc können Angaben mit gleicher semantischer Bedeutung auf verschiedenen Ebenen des Dokuments, z. B. auf Kopf-Ebene oder auf Position-Ebene stehen. Dabei gilt üblicherweise folgende Regel: Wenn der Wert auf Positions-Ebene angegeben ist, verwende diesen. Sonst verwende den entsprechenden Wert auf Kopf-Ebene. Eventuell soll ein Defaultwert verwendet werden, falls weder auf Kopf- noch auf Positions-Ebene eine Angabe erfolgte. In speziellen Szenarien sind unter den Positionen noch Subpositionen möglich, usw. Abstrahiert man von den Begriffen Default, Kopf, Position und Sub-Position, so handelt es sich um verschiedene hierarchische Level, auf denen semantisch gleichbedeutende Angaben erfolgen können. Jeweils die konkreteste Angabe soll verwendet werden. Diese semantisch gleichbedeutenden Angaben, die in verschiedenen Levels definiert sind, wobei aber nur das höchste nicht leere Level gültig ist, werden durch einen komplexen Datentyp als einzelnes zusammenhängendes Objekt (als Vererbungswert) in einer Named Map gespeichert.

Die Funktion add to inheritance-map kann auch verwendet werden, um einen bestimmten konkreten Feld- oder Variablen-Wert (z. B. 0000 oder /) mit einem Empty Flag als nicht existent zu kennzeichnen. Wenn der reguläre Ausdruck in Parameter e für den Wert in b greift, dann setzt die Funktion das Empty Flag. Hinweis: Man kann diese Bewertungslogik auch unabhängig von Vererbungswerten nutzen. Dazu müssen im Funktionsaufruf nur Wert b und Regex e übergeben werden und alle anderen Parameter leer bleiben.