Komponente aufrufen 
Es gibt zwei Möglichkeiten für einen Haupt-Controller, Unter-Controller aufzurufen:
über das Anlegen des Unter-Controllers in einer der Methoden des Haupt-Controllers,
über das Anlegen des Unter-Controllers von einem View aus.
Hinweis
Variante 1 ist flexibler als Variante 2, insbesondere wenn der Unter-Controller nur einmal in der Methode DO_INIT initialisiert werden soll.
Fügen Sie in der Methode DO_INIT oder DO_REQUEST z.B. folgendes Coding hinzu:
Syntax
...
data: addresscontroller type ref to CL_C_MYPROJ_ADDRESS.
* create the controller
addresscontroller ?= create_controller(
controller_name = 'address.do'
component_id = 'ad'
).
* set some attributes with a self defined methods
addresscontroller->Init_data( ... ).
...
oder
Syntax
...
data: subcontroller type ref to CL_BSP_CONTROLLER2.
* create the controller
subcontroller ?= create_controller(
controller_name = 'address.do'
controller_id = 'ad'
).
* set some attributes with standard method
subcontroller->set_attributes( name = 'address'
value = ship_address ).
Rufen Sie im View den Controller auf.
Im vorliegenden Beispiel werden zwei Komponenten aufgerufen, einmal die Adress-Komponente (address.do) und einmal die Flug-Komponente (flights.do).
Der Controller wird über die COMPONENT_ID erkannt. In der Methode CREATE_CONTROLLER ist dies der Parameter COMPONENT_ID und im <bsp:call>-Element ist dies das Attribut COMP_ID:
Syntax
<%@page language="abap"%>
<%@extension name="htmlb" prefix="htmlb"%>
<%@extension name="bsp" prefix="bsp"%>
<htmlb:content id="ComponentTest" >
<htmlb:page title = "Component Test">
<H1>Component Test</H1>
<htmlb:form id="myFormId" method="post">
<htmlb:tray id = "tray1"
title = "Address"
design = "form"
width = "350"
isCollapsed = "false" >
<bsp:call url="address.do" comp_id="ad">
</bsp:call>
</htmlb:tray>
<htmlb:tray id = "tray2"
title = "Flights"
design = "form"
width = "350"
isCollapsed = "false" >
<bsp:call url="flights.do" comp_id="fl">
</bsp:call>
</p>
<htmlb:button id="SAVE" text="SAVE DATA" onClick="SAVE" />
<htmlb:button id="CANCEL" text="CANCEL" onClick="CANCEL" />
</htmlb:form>
</htmlb:page>
</htmlb: content>In dieser Variante brauchen Sie den Unter-Controller nicht im Coding des Haupt-Controllers anzulegen. Stattdessen fügen Sie nur die Parameter dem View-Aufruf hinzu, dann wird der Controller erzeugt und aufgerufen. Im vorliegenden Beispiel ist ship_address ein Attribut des Views und wird vom Controller gesetzt:
Syntax
<%@page language="abap"%>
<%@extension name="htmlb" prefix="htmlb"%>
<%@extension name="bsp" prefix="bsp"%>
<htmlb:content id="ComponentTest" >
<htmlb:page title = "Component Test">
<H1>Component Test</H1>
<htmlb:form id="myFormId" method="post">
<htmlb:tray id = "tray1"
title = "Address"
design = "form"
width = "350"
isCollapsed = "false" >
<bsp:call url="address.do" comp_id="ad">
<bsp:parameter name="address" value="<%=ship_address%>"/>
</bsp:call>
</htmlb:tray>
<htmlb:tray id = "tray2"
title = "Flights"
design = "form"
width = "350"
isCollapsed = "false" >
<bsp:call url="flights.do" comp_id="fl">
</bsp:call>
</htmlb:tray>
</p>
<htmlb:button id="SAVE" text="SAVE DATA" onClick="SAVE" />
<htmlb:button id="CANCEL" text="CANCEL" onClick="CANCEL" />
</htmlb:form>
</htmlb:page>
</htmlb:content>
Fahren Sie fort mit dem Festlegen der Eingabeverarbeitung.