
In vielen Anwendungen ist es wichtig, Benutzereingaben als solche zu kennzeichnen. Wenn etwa auf einer View viele gebundene UI-Elemente angeordnet sind, sich jedoch nur ein einziger Wert durch eine Benutzereingabe ändert, kann es unnötig zu Lasten der Performance gehen, wenn alle Context-Inhalte erneut durch die Business-Logik bearbeitet werden. Sinnvoller ist es, die Veränderungen, die der Benutzer innerhalb der View vorgenommen hat, zu kennzeichnen und separat zu bearbeiten. Zu den Veränderungen, die ein Benutzer vornehmen kann, gehört neben dem Ändern des Wertes eines Attributs auch das Umsetzen der Selektion oder der Lead-Selection.
Zunächst bietet jeder einzelne Context-Knoten die Möglichkeit, die relevanten Informationen für sich zu speichern. Um jedoch nicht alle vorhandenen Context-Knoten eines Controllers prüfen zu müssen bietet das Web-Dynpro-Framework die Context-Change-Log-Funktionalität an: Innerhalb eines Controllers werden alle Informationen zu vom Benutzer gesteuerten Änderungen an Context-Elementen in nur einer internen Tabelle gespeichert. Die Web-Dynpro-Laufzeit hat auf diese Tabelle Zugriff und kann den Ablauf der Business-Logik den Tabelleneinträgen anpassen.
Die Tabelle erfasst ausschließlich Änderungen, die vom Benutzer vorgenommen wurden - Änderungen an Context-Elementen, die auf programmatischem Wege (z.B. durch dynamische Programmierung) zu Stande gekommen sind, werden nicht aufgelistet.
Beachten Sie, dass die Context-Änderungen nur am Originalknoten aufgezeichnet werden, also nicht an gemappten Knoten.
Die Funktionalität des Context-Change-Logs ist in der Voreinstellung eines Controllers ausgeschaltet. Bei Bedarf muss es aktiviert werden. Die geschieht über das Interface IF_WD_CONTEXT des jeweiligen Controllers.
Schnittstelle IF_WD_CONTEXT
Die Schnittstelle IF_WD_CONTEXT stellt eine Referenz auf den Context eines Controllers zur Verfügung.
Im Gegensatz zur Schnittstelle IF_WD_CONTEXT_NODE bezieht sich IF_WD_CONTEXT nicht nur auf den Wurzelknoten des Contexts, sondern auf den Context als Ganzes.
Sie erhalten eine Referenz auf IF_WD_CONTEXTüber den Aufruf:
MY_CONTEXT = WD_CONTEXT->GET_CONTEXT( )
Folgende Methoden stehen mit dem Interface IF_WD_CONTEXT zur Nutzung der Change-Log-Funktion zur Verfügung:
|
Methode |
Beschreibung |
|---|---|
|
ENABLE_CONTEXT_CHANGE_LOG( ) |
Schaltet die Aufzeichnung der Benutzereinaben für diesen Controller ein |
|
DISABLE_CONTEXT_CHANGE_LOG( ) |
Schaltet die Aufzeichnung wieder ab |
|
GET_CONTEXT_CHANGE_LOG( and_reset ) |
Liefert den aktuellen Inhalt der Change-Log-Tabelle und setzt diese automatisch zurück (letztere Eigenschaft ist voreingestellt, kann jedoch auch abgeschaltet werden). |
|
RESET_CONTEXT_CHANGE_LOG( ) |
Setzt die Change-Log-Tabelle zurück |
|
ADD_CONTEXT_ATTRIBUTE_CHANGE( ) |
Über diese Methode können Änderungen an einem Context-Attribut in die Change-Log-Tabelle hinein programmiert werden. Dies ist insbesondere wichtig bei der Programmierung von Wertehilfen, da die aus einer Hilfe ausgewählten Daten nicht automatisch in die Change-Log-Tabelle eingetragen werden. |
Tabelle der benutzerdefinierten Context-Änderungen
Die Tabelle, in der die benutzerdefinierten Änderungen am Context aufgelistet werden, ist vom Typ WDR_CONTEXT_CHANGE_LIST. Sie enthält neun Spalten mit folgenden Bedeutungen:
|
Spalte |
Beschreibung |
|---|---|
|
NODE_NAME |
Name des Knotens, der die Änderung enthält |
|
SEQUENCE |
Laufende Nummer des Eintrags |
|
NODE |
Referenz auf den Knoten |
|
NODE_PATH |
Knotenpfad |
|
CHANGE_KIND |
Kategorisiert die Art der Änderung. Für die Werte stehen die Konstanten IF_WD_CONTEXT=>CHANGED_* zur Verfügung. |
|
ELEMENT_INDEX |
Index des Context-Elements |
|
ATTRIBUTE_NAME |
Name des Attributs, das geändert wurde |
|
OLD_VALUE |
Referenz auf den bisherigen Wert |
|
NEW_VALUE |
Referenz auf den neuen Wert |
Für die Werte der Spalten OLD_VALUE und NEW_VALUE wird zunächst eine Kopie des alten bzw. neuen Attribut-Wertes angelegt. Eine Referenz auf diese Kopie wird dann in der Tabelle gespeichert.
Änderungen der Lead-Selection werden auch als Änderungen der Selektion aufgezeichnet.
Bei OVS-Wertehilfen oder frei programmierten Wertehilfen wird der neue Wert nicht automatisch in die Tabelle eingetragen, sondern muss mit Hilfe der Methode ADD_CONTEXT_ATTRIBUTE_CHANGE des Interfaces IF_WD_CONTEXT aktiv eingetragen werden, sofern ein Eintrag gewünscht wird.
Sie finden die Beispielanwendung DEMO_CONTEXT_CHANGES in Ihrem System im Paket SWDP_DEMO.
Weitere Informationen zum Interface IF_WD_CONTEXT finden Sie im System in der zugehörigen Systemdokumentation.