Der Component-Controller stellt Daten und Verarbeitungslogik zur Verfügung, die für alle Views einer Component sicht- bzw. änderbar sein sollen. Er besitzt drei Interfaces:
● Interface IF_<Controller-Name> zur Programmierung innerhalb des Controllers
● Interface IG_<Controller-Name> zur Controller-übergreifenden Programmierung innerhalb der eigenen Component
● Interface IWCI_<Component-Name> zur Component-übergreifenden Programmierung. Er repräsentiert auf der ABAP-Sprachebene den Interface-Controller (siehe unten).
Innerhalb der Component ist zu jedem belieben Context-Element des Component-Controllers ein Mapping möglich. (Siehe auch Architektur-Handbuch, Kapitel Datenbindung und Mapping).
Die Attribute eines Component-Controllers sind allen Methoden, die innerhalb einer Component gerufen werden, bekannt und können von allen genutzt werden, sofern sie die Eigenschaft Public besitzen. Andernfalls ist ihre Sichtbarkeit auf den Component-Controller beschränkt. Ereignisse und Methoden, die dem Component-Controller zugeordnet sind, sind Component-weit sichtbar. So kann z.B. eine beliebige Aktion einer View der Component eine solche Methode des Component-Controllers rufen.
Die Sichtbarkeit einer speziell markierten Anzahl der Methoden, Ereignisse und Context-Knoten eines Component-Controllers kann über die Grenze der eigenen Component hinaus erweitert werden. Sie bilden dann zusammen den Interface-Controller der Component.
Der Interface-Controller dient zur Component-übergreifenden Kommunikation. Er definiert den Controller-Teil der Schnittstelle einer Web-Dynpro-Component. Er selbst enthält keine Implementierung:
● Für den Interface-Controller einer Web-Dynpro-Component erfolgt die Implementierung der Methoden im zugehörigen Component-Controller.
● Für den Interface-Controller einer Component-Interface-Definition erfolgt die Implementierung im Component-Controller der einbettenden Component.
Zu jedem Interface-Controller gibt es ein zugehöriges ABAP-Interface IWCI_<Component-Name> bzw. IWCI_<Comp.Interf.Def-Name>. Über die Programmierung mit Hilfe von Component-Interface-Definitionen finden Sie Informationen im Kapitel Arbeiten mit Component-Interface-Definitionen.
Ereignisse, Methoden und Context-Knoten des Component-Controllers können für andere Components sichtbar gemacht werden indem sie durch Setzen des Ankreuzfeldes Interface der Schnittstelle der Component zugewiesen werden. Damit werden sie auch in das zugehörige ABAP-Interface IWCI_<Component-Name> aufgenommen.
Diese speziellen Component-Controller-Elemente werden in der Objekt-Liste der ABAP Workbench zusätzlich im Knoten Interface-Controller angezeigt, können dort jedoch nicht geändert werden.
Für Elemente des Contextes eines Controllers aus einer anderen Component kann daher auch ein Mapping auf die der Component-Schnittstelle zugewiesenen Elemente des Component-Controller-Contextes definiert werden.
Der Interface-Controller wird in der Objekt-Liste der ABAP Workbench als separates Objekt der zugehörigen Web-Dynpro-Component angezeigt. Der Interface-Controller einer Component wird jedoch als Teil des Component-Controllers implementiert und editiert (siehe oben).
Nur dann, wenn ein Interface-Controller Bestandteil eines Component-Interfaces ist, ist der Controller-Editor änderungsbereit und der Context, die Ereignisse und Methoden können direkt implementiert und editiert werden.
Das globale Interface IWCI_<Comp.Interface-Name > ist in der Klassenbibliothek abgelegt und kann in der SE24 angezeigt werden.
Die Eigenschaften und die Verwendung des optional hinzufügbaren Custom-Controllers entsprechen genau denen des Component-Controllers. Das heißt, er ist für alle Elemente der Component sichtbar und die Lebensdauer der Elemente erstreckt sich über die Lebensdauer der Component. Der Custom-Controller bietet Ihnen die Möglichkeit, Funktionen und Daten innerhalb einer Component zu strukturieren. Es ist sinnvoll, einen Custom-Controller anzulegen und zu pflegen, wenn ein bestimmtes Subset von Views einer Component mit einer speziellen Funktion bzw. mit einem speziellen Set von Daten ausgestattet werden soll.
In einer View sind Layout und Ablauflogik sehr eng mit einander verbunden. Als Teil einer View wird der View-Controller daher – im Gegensatz zu anderen Controllern – nicht im Controller Editor bearbeitet. Vielmehr sind die nötigen Werkzeuge in den View Editor integriert, mit welchem eine View als ganzes bearbeitet werden kann.
Der View-Controller beinhaltet, genau wie der Component-Controller, Daten und Funktionen. Allerdings verfügt der View-Controller ausschließlich über
● ein Interface IF_<Controllername>, das heisst diese Daten und Funktionen sind ausschließlich innerhalb der eigenen View sichtbar.
Die Lebensdauer der Controller-Elemente einer View beschränkt sich auf die Lebensdauer der View. Für die Erstellung einfacher Web-Dynpro-Anwendungen ist es ausreichend, den Component-Controller sowie die View-Controller einer Component zu pflegen. Die beiden im Folgenden beschriebenen Controller sind optional und helfen Ihnen, kompliziertere Components und Anwendungen besser zu strukturieren und die Wiederverwendbarkeit zu erleichtern.
Zu jedem in einer Web-Dynpro-Component angelegten Window wird auch ein Window-Controller erzeugt. Diese Window-Controller ist Component-weit sichbar, verhält sich also wie ein Component- bzw. Custom-Controller.
Als Bestandteil eines Web-Dynpro-Windows wird der Window-Controller jedoch, analog zum View-Controller, nicht mit dem Controller-Editor bearbeitet sondern die Pflege erfolgt mit Hilfe des Window-Editors.