Einsatzmöglichkeiten
Die Methoden der Klasse
Klasse CL_BSP_CONTROLLER2 werden bei der Erstellung von Komponenten im Rahmen des Model-View-Controller Design Pattern eingesetzt.Bei jedem Request wird die ganze Hierarchie-Tiefe abgearbeitet.
Die Hierarchie selbst wird bei der Ausgabe definiert.
Ablauf
DO_REQUEST
kümmert sich bei einem Haupt-Controller sowohl um die Eingabe- als auch um die Ausgabeverarbeitung.Der Request vom Browser geht direkt an den obersten Controller. Dieser dispatcht die Eingaben an die jeweiligen Sub-Controller. Dafür steht die Service-Funktion
DISPATCH_INPUT
liest die Form-Felder aus dem Request und dispatcht sie an den passenden Sub-Controller. Die Form-Felder sind mit einem Präfix versehen.Das Schreiben der Präfixe wird für BSP-Elemente, z.B. von der BSP-Extension
HTMLB, automatisch durchgeführt.Alle Daten, die nicht zu einer der Unter-Komponenten gehören, müssen über die Methode
DISPATCH_INPUT im Haupt-Controller verarbeitet werden. Daher werden die folgenden Methoden (s.u.) aufgerufen:Diese drei Methoden werden vom Parent-Controller nur mit den Form-Feldern für den aktuellen Controller aufgerufen.
Die Festlegung der Ausgabeverarbeitung beinhaltet das Ausgeben der nächsten Seite. Ein View wird erzeugt und ausgegeben. Abhängig vom Zustand des obersten Controllers könnnen Sie auch einen Sub-Controller auf inaktiv setzen oder neue Controller erzeugen.
Der Verarbeitungsablauf bei der Ausgabe wird in der folgenden Abbildung schematisch dargestellt:
Page Output
Im einzelnen erfüllt
Behandeln von Events
Wenn eine Komponente Events beinhaltet, dann ruft
DISPATCH_INPUT den HTMLB-Manager auf. Der HTMLB-Manager sammelt die relevanten Informationen, u.a. die ID, also die ID des Objekts, das den jeweiligen Event ausgelöst hat.Als nächstes ruft
DISPATCH_INPUT die Methode DO_HANDLE_DATA auf. DO_HANDLE_DATA wird von allen Controllern (d.h. für alle aktiven Komponenten) aufgerufen, also sowohl vom obersten Controller als auch von allen Sub-Controllern. Mit DO_HANDLE_DATA wird die Modellklasse (siehe auch Datenbindung) gefüllt: Form-Felder und Nachrichten für das globale messages-Objekt (s.u.) werden übergeben.Wenn Ihre Modellklasse auf
Der Verarbeitungsablauf bei
DO_HANDLE_DATA wird in der folgenden Abbildung schematisch dargestellt:Page Input (DO_HANDLE_DATA)
Nachdem
DO_HANDLE_DATA alle Daten gefüllt hat, wird die Methode DO_HANDLE_EVENT für den einen Controller aufgerufen, der für den Eingabe-Event zuständig ist. Dabei wird die ID des Events mitgegeben und der Event wird an den Controller dispatcht. DO_HANDLE_EVENT gibt auch den Parameter GLOBAL_EVENT (einen String) aus. Wenn es sich um einen HTMLB-Event handelt, wird das dazugehörige Objekt HTMLB_EVENT gefüllt.Das Dispatchen von Events an den zuständigen Controller funktioniert nur dann, wenn an dem dazugehörigen
DO_HANDLE_EVENT
hat auch Zugriff auf das globale messages-Objekt und kann bei Bedarf weitere Schritte unternehmen, z.B. kann diese Methode veranlassen, dass im Fehlerfall die Daten erneut zur Anzeige gebracht werden.Der Verarbeitungsablauf bei
DO_HANDLE_EVENT wird in der folgenden Abbildung schematisch dargestellt:Page Input (DO_HANDLE_EVENT)
Beachten Sie, dass hier nur ein Unter-Controller aufgerufen wird.
Schließlich wird immer (für jeden Controller, d.h. für alle aktiven Komponenten) die Methode
DO_FINISH_INPUT aufgerufen. Hiermit können Sie auf Ereignisse, die in einer Komponente passieren, in einer anderen Komponente reagieren. Hierfür verwenden Sie den Parameter GLOBAL_EVENT, der in der Methode DO_HANDLE_EVENT gesetzt wurde. Durch diesen globalen Event soll am Ende der Eingabeverarbeitung jede Komponente genau wissen, welche Events es gibt und wie darauf reagiert wird.Der Verarbeitungsablauf bei
DO_FINISH_INPUT wird in der folgenden Abbildung schematisch dargestellt:Page Input (DO_FINISH_INPUT)
Globale Meldungen
Der Parameter
GLOBAL_MESSAGES wird von allen Komponenten geteilt. Diesen Parameter verwenden Sie für die Behandlung von fehlerhaften Benutzereingaben, z.B. um ganz allgemein auszugeben, dass ein Fehler aufgetreten ist, oder dass bei einer Benutzereingabe das Ende-Datum vor dem Anfangs-Datum liegt, etc.Der Haupt-Controller erzeugt die globalen Meldungen und reicht sie weiter an alle Unter-Controller. Das bekannte
messages-Objekt dagegen ist lokal. Wenn nun in einem Controller das lokale messages-Objekt gefüllt ist, dann können sie diese Information an das globale messages-Objekt weiterreichen und in einer beliebigen Komponente darauf reagieren.Controller und ihre IDs
Üblicherweise gibt es einen Haupt-Controller, einen obersten View, sowie diverse Sub-Controller und weitere Views.
Ein Haupt-Controller ruft zuerst
CREATE_VIEW, dann SET_ATTRIBUTE für den View und danach CALL_VIEW. Der obersten Controller kann auch Unter-Controller erzeugen. Dies geschieht über das <bsp:call>-Element, dem als Attribute die PAGE und die COMP_ID mitgegeben werden. Zusätzlich können über das eingebettete Element <bsp:parameter> Parameter für Name und Wert mitgegeben werden.Die Attributübergabe geschieht entweder im View oder über den obersten Controller.
Der Controller wird immer über die