
Das Web-Dynypro-Framework erlaubt dem Anwendungsentwickler, Methodenaufrufe über die Grenzen eines Controllers hinweg zu programmieren. Um diese Funktionsweise zu erläutern soll das Beispiel des Kapitels Ereignisbehandler von Aktionen erneut betrachtet werden:
Im Kapitel Das Context-Mapping wurde bereits ein View-übergreifender Context im Component-Controller sowie ein nötiges Mapping für die Beipiel-Component eingerichtet. Nun soll zusätzlich die Funktionalität des Ereignisbehandlers der Aktion GO in eine Methode des Component-Controllers verlagert werden.
Die entsprechende Methode des Component-Controllers
In unserem Beispiel soll diese MethodeSIMPLE_GET_FLIGHTS heißen:
method SIMPLE_GET_FLIGHTS. data: INPUT_NODE type ref to IF_WD_CONTEXT_NODE, TABLE_NODE type ref to IF_WD_CONTEXT_NODE, CAR type STRING, FLIGHTS type standard table of SPFLI. INPUT_NODE = WD_CONTEXT->GET_CHILD_NODE( 'INPUT_NODE' ). INPUT_NODE->GET_ATTRIBUTE( exporting Name = 'IN1' importing Value = CAR ). FLIGHTS = CL_WD_FLIGHT_MODEL=>GET_FLIGHTS_BY_CARRID( CAR ). TABLE_NODE = WD_CONTEXT->GET_CHILD_NODE( 'TABLE_NODE' ). TABLE_NODE->BIND_ELEMENTS( FLIGHTS ). endmethod.
Inhaltlich ändert sich an dieser Methode nichts, der Context in dem sie aufgerufen wird ist nun jedoch ein anderer. Dies bedeutet, dass beispielsweise das Attribut WD_CONTEXT als Referenz auf den lokalen Context jetzt nicht mehr den Context der View repräsentiert, sondern den Context des Component-Controllers.
Aufruf der Methode des Component-Controllers im Ereignisbehandler des View-Controllers
Die soeben im Component-Controller eingerichtete Methode muss nun im Ereignisbehandler der Aktion GO im Controller der View aufgerufen werden:
method ONACTIONGO . WD_COMP_CONTROLLER->SIMPLE_GET_FLIGHTS( ). endmethod.
Das Attribut WD_COMP_CONTROLLER ist eine Referenzvariable vom Bezugstyp IG_COMPONENTCONTROLLER und damit eine Referenz auf den jeweiligen Component-Controller. Es ist jedem View-Controller der Component automatisch bekannt.