Zur Controller-übergreifenden Kommunikation können Sie für einen Component-Controller Ereignisse definieren. Diese Ereignisse können dann mit Hilfe der vordefinierten Methode FIRE_<MY_EVENT>_EVT ausgelöst werden. Nach dem Auslösen des Ereignisses wird von der Laufzeit automatisch der zugehörige Ereignisbehandler in einem anderen Controller aufgerufen.
Um ein Ereignis eines Component-Controllers zu behandeln, muss im aktuellen Controller eine Verwendung des Component-Controllers eingetragen sein. (Die Verwendung des Component-Controllers innerhalb eines View-Controllers wird, wie bereits erwähnt, automatisch angelegt).
Die folgende Grafik zeigt ein Beispiel, in welchem in einer Methode des Component-Controllers das Ereignis MY_EVENT ausgelöst wird.
Der Ereignisbehandler MY_HANDLER eines View-Controllers reagiert auf das Ereignis MY_EVENT weil ihm genau dieses Ereignis des Component-Controllers zugeordnet wurde. Die Zuordnung ist direkt auf der Registerkarte Methoden des View-Controllers vorgenommen worden.
Sie haben die Möglichkeit, ein oder mehrere Ereignisse des Component-Controllers auch Component-übergreifend einzusetzen. Dafür markieren Sie in der Tabelle auf der Registerkarte Ereignisse des Component-Controllers das Ankreuzfeld Interface. Das betreffende Ereignis wird dann in die Component-Schnittstelle mit aufgenommen und kann von einem Ereignisbehandler einer anderen Component aufgegriffen werden (Siehe Component-übergreifende Programmierung).
Ereignisse können obligatorische oder optionale Parameter übergeben. Sie haben die Möglichkeit, diese Parameter auf der Registerkarte Ereignisse des Component-Controllers einzutragen und zu typisieren. Wenn Sie anschließend einen Ereignisbehandler in einem verwendenden Controller anlegen und diesem ein Ereignis des Component-Controllers zuweisen, werden die zugehörigen Parameter automatisch in die Signatur der Ereignisbehandlermethode aufgenommen.
Beispiel:
Component-Controller
Ein Ereignis soll in einer Methode des Component-Controllers ausgelöst und der dazu angelegte Parameter übergeben werden.
Registerkarte Ereignisse
Ereignis MY_EVENT Parameter MY_PARAMETER type WDY_BOOLEAN
|
WDY_BOOLEAN ist ein ABAP-Dictionary-Typ und erfüllt die Funktion einer echten boolschen Variablen.
Der Wert von WDY_BOOLEAN ist entweder ’X’ für true oder ’ ’ für false.
Registerkarte Methoden :
MY_CONTROLLER_METHOD
method MY_COMP_CONTROLLER_METHOD .
WD_THIS->FIRE_MY_EVENT_EV( MY_PARAMETER = 'X' ).
endmethod.
|
View-Controller
Im Controller einer View wird ein Ereignisbehandler angelegt, dem Ereignis MY_EVENT zugeordnet und unter Berücksichtigung des Parameters MY_PARAMETER
Registerkarte Methoden
Methode Methodentyp Ereignis Controller MY_EVENT_HANDLER Ereignisbehandler MY_EVENT Component-Controller
|
MY_EVENT_HANDLER
Parameter Deklarationsart Bezugstyp WDEVENT Importing CL_WD_CUSTOM_EVENT MY_PARAMETER Importing WDY_BOOLEAN
|
method MY_EVENT_HANDLER . . . . endmethod.
|
Jeder Ereignisbehandlermethode ist automatisch der Parameter WDEVENT vom Typ CL_WD_CUSTOM_EVENT bekannt. Die Klassenschnittstelle CL_WD_CUSTOM_EVENT verfügt über ein Attribut PARAMETERS vom Typ WD_EVENT_PARAMETER sowie über eine Reihe von Methoden um diesen Parameter auszulesen.
Anstatt für ein Ereignis einen Parameter statisch festzulegen, der dann automatisch in der Signatur der Ereignisbehandlermethode des Ereignisbehandlers eingetragen wird, gibt es die Möglichkeit, den Parameter mit Hilfe des so genannten Eventobjekts dynamisch festzulegen.
Wenn also der Parameter zur Design-Zeit nicht statisch festgelegt werden soll, kann dieser statt dessen aus dem Event-Objekt der Ereignisbehandlermethode ausgelesen werden. Lesen Sie hierzu mehr im Kapitel Dynamisches Arbeiten mit Parameter-Mappings im dritten Teil des Programmierhandbuches.