
Beim Anlegen eines Knotens im Context einer Web-Dynpro-Component wird die Kardinalität eines Knotens angegeben. Die Kardinalität legt fest, wie oft ein Knoten zur Laufzeit instanziiert werden soll, das heisst, wie viele Elemente dieses Knotens zur Laufzeit zur Verfügung stehen:
|
Kardinalität |
Beschreibung |
|---|---|
|
1...1 |
Es wird immer genau ein Element instanziiert |
|
0...1 |
Zur Laufzeit wird maximal ein Element instanziiert, möglich ist jedoch auch, dass kein Element instanziiert wird |
|
1...n |
Es können n Elemente instanziiert werden, mindestens eines jedoch muss instanziiert sein |
|
0...n |
Die Anzahl der instanziierten Elemente des Context-Knotens kann beliebig variieren |
Beispiel für die Kardinalität
Der Context-Knoten Fahrzeug soll zur Beschreibung des Fuhrparks einer Autovermietung dienen. Er hat die Kardinalität 1...n und wird aus einer Datenbanktabelle heraus mit Inhalt versorgt. Eine Reihe von Attributen dieses Knotens hat für jedes Fahrzeug einen bestimmten Wert.
Der Datenbanktabelle ist zu entnehmen, dass der Betrieb drei Fahrzeuge besitzt mit jeweils eindeutig zugeordnetem Datum der Erstzulassung sowie eindeutigem Kennzeichen. Zur Darstellung dieser Tabelle in der Web-Dynpro-Anwendung müssen also 3 Elemente des Context-Knotens Fahrzeug instanziiert werden, die Kardinalität des Knotens muss daher 0...n oder 1...n sein. (Wenn der Knoten Fahrzeug im Rahmen einer anderen Funktion zum Beispiel aus eine Tabelle mit allen aktuell verfügbaren Automobilen heraus versorgt werden soll, ist es sinnvoll, die Kardinalität 0...n zu wählen, da diese Tabelle durchaus auch leer sein kann - alle Wagen sind dann vermietet).
Zur Laufzeit soll der Context-Knoten Fahrzeug drei Elemente enthalten, also folgendermaßen aussehen:
Zusätzlich zu diesen Attributen kann ein Context-Knoten jedoch auch weitere Unterknoten enthalten:
Für jeden Mieter eines Fahrzeugs werden die beiden Attribute gemietet von und gemietet bis im Context aufgelistet. Zur Laufzeit ist der Context dann um die entsprechenden Werte erweitert:
Zur Laufzeit enthält jedes Element des Knotens Fahrzeug einen Unterknoten Mieter. Diese Unterknoten können ihrerseits wieder mehrere Elemente enthalten: So enthält der Knoten Mieter des ersten Elements des Knotens Fahrzeug, also der Knoten mit den Beschreibungsdaten für das rote Auto, wiederum drei Elemente, je einen für die drei abgelegten Vermietungsvorgänge.
Lead-Selection
Innerhalb dieser verschachtelten Context-Struktur ist die Lead-Selection von großer Bedeutung. Die Lead-Selection legt fest, auf welches Element des Contextes zur Laufzeit letztlich zugegriffen wird.
Im UI der Beispielanwendung befindet sich ein TextView-Element, welches zur Laufzeit den Namen des Mieters anzeigen soll. Ohne eine klare Regelung des Selektionspfades durch die Context-Struktur wären zunächst alle Werte des Attributs Namen gleichberechtigt, die Anzeige des Namens im TextView-Element nicht sinnvoll möglich. Daher muss aus der Menge an möglichen Elementen des Knotens Mieter genau ein Element hervorhebend gekennzeichnet werden. Dies geschieht mit der Initialisierung der Lead-Selection. Die automatische Initialisierung der Lead-Selection zeichnet immer das erste Element eines Knotens besonders aus. Für das oben stehende Beispiel bedeutet dies:
Die Lead-Selection liegt automatisch auf dem ersten Element des Knotens Fahrzeug, also auf dem Knoten mit den Daten des roten Autos. Ganz analog liegt die Lead-Selection auf dem ersten Element des Kind-Knotens Mieter, und damit auf dem Element, das die Daten des Mieters David Grecco enthält.
Diese spezielle Kennzeichnung der Elemente lässt sich im Laufzeit-Context folgendermaßen darstellen:
Erst wenn die Lead-Selection (etwa durch eine Aktion des Benutzers oder einen Programmschritt innerhalb einer Methode) auf ein anderes Element des Knotens Fahrzeug gelegt wurde, wird auch das zugehörige erste Element dieses Unterknotens Mieter im UI-Element angezeigt. Wird die Lead-Selection etwa auf das zweite Element des Knotens Fahrzeug gesetzt, wird der Mieter Pierre Dubois zu Anzeige gebracht. Ganz entsprechend lässt sich natürlich auch die Lead-Selection des Knotens Mieter zur Laufzeit variieren. Auf diese Weise ließen sich nach und nach die Namen aller verfügbaren Mieter im UI anzeigen.
Automatische vs. Manuelle Initialisierung
Für jeden neu angelegten Context-Knoten wird die Lead-Selection automatisch initialisiert.
Verwendung der voreingestellten automatischen Initialisierung der Lead-Selection:
In diesem Fall wird immer das erste Element eines Knotens mit der Eigenschaft der Lead-Selection belegt.
Manuelle Initialisierung der Lead-Selection:
Wenn die automatische Initialisierung abgeschaltet wurde, kann die Lead-Selection auch manuell programmiert werden. In diesem Fall ist es möglich, ein anderes als das erste Element eines Knotens mit dieser Eigenschaft zu belegen (z.B. über einen Index).
Eigenschaft Singleton
Die Eigenschaft Singleton des Context-Knotens Mieter legt fest, dass die Elemente dieses Knotens zur Laufzeit nur für eines der drei Fahrzeuge instanziiert werden, nämlich für das Element, welches die Lead-Selection trägt. Wenn die Lead-Selection automatisch initialisiert wurde, ist dies das erste Element des Knotens Fahrzeug, in diesem Fall also das Element 1, mit den Daten des roten Autos.
Wenn jeder Mieter über mehrere Adressen verfügt, könnte es nötig werden, dass unter dem Kind-Knoten Mieter erneut ein Kind-Knoten für die Adressen eingerichtet werden muss. Auf diese Weise kann der Dateninhalt eines Wurzelknotens schnell sehr groß werden, wenn für jedes Fahrzeug der Autovermietung alle Mieter mit all ihren Adressen zur Laufzeit aufgebaut werden. Um den Inhalt eines Context-Knotens zur Laufzeit einzuschränken, können Sie einen Context-Knoten mit der Eigenschaft Singleton versehen. Dies hat zur Folge, dass die Elemente des betreffenden Knotens nur für genau ein Element des Eltern-Knotens instanziiert werden.
Mit anderen Worten: Im Gegensatz zur Kardinalität eines Knotens, welche die Anzahl der möglichen Elemente innerhalb des Knotens beschreibt, regelt die Eigenschaft Singleton, ob diese Elemente für alle Elemente des Eltern-Knotens aufgebaut werden ( nicht-Singleton) oder nur für genau ein Element des Eltern-Knotens ( Singleton).
Wenn in unserem Beispiel der Knoten Mieter als Singleton gekennzeichnet ist, sieht der Context zur Laufzeit folgendermaßen aus:
Die Elemente für den Kind-Knoten Mieter stehen nur für ein Element des Eltern-Knotens Fahrzeug zur Verfügung, nicht aber für alle anderen Elemente. Sollen jedoch die Elemente des Knotens Mieter für alle Fahrzeuge instanziiert werden, muss die Eigenschaft Singleton des Knotens Mieter auf false gesetzt werden.
Da der Wurzelknoten eines Contexts grundsätzlich nur einmal instanziiert wird, bedeutet dies, dass jeder Knoten direkt unterhalb des Wurzelknotens (in unserem Beispiel der Knoten Fahrzeug) immer automatisch ein Singleton-Knoten ist.