
Wenn an der Benutzungsoberfläche einer Web-Dynpro-Anwendung eine Aktion eines bestimmten UI-Elementes ausgelöst wurde, wird automatisch der mit dieser Aktion verknüpfte Ereignisbehandler des View-Controllers aufgerufen. In diesem Ereignisbehandler werden vom Anwendungsentwickler die Schritte programmiert, die das Auslösen der Aktion nach sich ziehen soll. Als Beispiel für solche Schritte seien an dieser Stelle genannt:
das Auslesen, Bearbeiten und neu Setzen von Context-Elementen
das Aufrufen von Funktionsbausteinen
das Auslösen einer Navigation.
Programmierung
Technisch unterscheidet sich ein Ereignisbehandler nicht von anderen Methoden eines Controllers, er hat lediglich die zusätzliche Eigenschaft, auf das ihm zugeordneten Ereignis zu reagieren. Für die Programmierung aller Controller-Methoden stehen eine Reihe von speziellen Klassen mit Attributen und Methoden zur Verfügung mit deren Hilfe die Web-Dynpro-spezifischen Schritte ausgeführt werden können. Im Folgenden soll an einem einfachen Beispiel der mögliche Aufbau einer Controller-Methode zur Behandlung einer Aktion ausführlich erklärt werden. Unter Programmierung von Controller-Methoden und Programmierschnittstellen finden Sie dann weiterführende Hinweise zu häufig verwendeten Interfaces und ihren Methoden und Attributen.
Ein erstes Beispiel: Die Darstellung einer einfachen Flugliste
Der Benutzer einer Web-Dynpro-Anwendung trägt einen bestimmten Wert in das Eingabefeld einer View ein (in diesem Fall das Kürzel einer Fluggesellschaft). Anschließend wird eine Schaltfläche geklickt. Die nachstehende Tabelle soll mit den zur Benutzereingabe passenden Daten angezeigt werden.
Die oben stehenden Graphik zeigt schematisch die Gestaltung des View-Layouts sowie des zugehörigen Contexts. Beim ersten Aufruf der Anwendung ist die Tabelle leer. Nachdem der Benutzer einen Wert eingegeben und die Schaltfläche GO geklickt hat, wird automatisch die zugehörige Aktion GO ausgelöst und die Ereignisbehandlermethode ONACTIONGO aufgerufen. In dieser Methode müssen nun folgende Schritte ablaufen:
Das Attribut des Context-Knotens INPUT_NODE wird ausgelesen und an eine interne Variable der Methode ONACTIONGO übergeben.
Eine interne Tabelle wird gefüllt unter Berücksichtigung des Wertes der internen Variablen.
Der Context-Knoten wird mit dem Inhalt der internen Tabelle versorgt.
Wie können diese Schritte nun im Programmtext der Methode ONACTIONGO realisiert werden?
Datendeklaration
Zunächst werden alle benötigten internen Variablen deklariert:
INPUT_NODE als interne Variable für den Context-Knoten für die Benutzereingabe,
TABLE_NODE als interne Variable für den Context-Knoten der Ergebnistabelle,
CAR als interne Variable des Wertes der Benutzereingabe,
FLIGHTS als interne Tabelle für die Ergebnisdarstellung.
Die Tabelle FLIGHTS bezieht sich in diesem Beispiel auf die Dictionary-Tabelle SPFLI und braucht daher nicht detaillierter deklariert werden.
Einlesen der Benutzereingabe
Anschließend wird die interne Variable INPUT_NODE mit dem Context-Knoten INPUT_NODE verbunden:
Dafür stehen im Web-Dynpro-Framework das Attribut WD_CONTEXT und die Methode GET_CHILD_NODE des Interfaces IF_WD_CONTEXT_NODE zur Verfügung.
Das Attribut WD_CONTEXT stellt immer eine Referenz auf den lokalen Controller-Context dar: Die Methode ONACTIONGO ist eine Methode des aktuellen View-Controllers, damit ist WD_CONTEXT in diesem Fall eine Referenz auf den Context der aktuellen View (siehe Kapitel Die Referenzvariable WD_CONTEXT)
Die Methode GET_CHILD_NODE gibt die Referenz auf den Context-Knoten INPUT_NODE zurück.
Das nachfolgende Auslesen des Context-Attributs übernimmt die Methode GET_ATTRIBUTE des selben Interfaces:
Diese Methode holt den Wert des Attributes IN1 aus dem Context-Knoten INPUT_NODE und übergibt ihn an die interne Variable CAR.
Damit ist der Wert des UI-Elements Inputfieldüber den Context der View an die Methode ONACTIONGO übergeben worden und kann nun verarbeitet werden.
Beschaffung der Ergebnisstabelle
Die interne Tabelle FLIGHTS wird dann mit Hilfe einer vorbereiteten Klasse gefüllt, die in unserem Beispiel CL_WD_FLIGHT_MODEL heisst und die Methode GET_FLIGHTS_BY_CARRID besitzt. Dieser Methode wird die Variable CAR übergeben.
In diesem Schritt befinden sich jedoch keine Web-Dynpro-spezifischen Elemente.
Übergabe der Ergebnistabelle
Nachdem die interne Tabelle FLIGHTS berechnet worden ist, muss sie an den vorbereiteten Context-Knoten TABLE_NODE geknüpft werden. Genau wie beim Auslesen des Eingabefeldes sind hierfür zwei Schritte nötig:
Der internen Variablen TABLE_NODE wird zunächst der Context-Knoten TABLE_NODE des View-Contexts zugeordnet. Das dafür nötige Attribut, bzw. die nötige Methode wurden bereits bei der Verknüpfung des Knotens INPUT_NODE verwandt.
Zuletzt wird der Inhalt der internen Tabelle FLIGHTS an die interne Variable TABLE_NODE übergeben.
Die Methode bind_elements ist ebenfalls eine Methode des Interfaces IF_WD_CONTEXT_NODE. Sie erzeugt aus der internen Tabelle FLIGHTS neue Elemente und fügt sie der internen Variablen TABLE_NODE hinzu. Die Attribute des Context-Knotens TABLE_NODE sind nun mit den Werten der internen Tabelle belegt und das UI-Element Table kann die Werte im Layout der View anzeigen.