Show TOC

Komponente aufrufenLocate this document in the navigation structure

Verwendung

Es gibt zwei Möglichkeiten für einen Haupt-Controller, Unter-Controller aufzurufen:

  1. über das Anlegen des Unter-Controllers in einer der Methoden des Haupt-Controllers,

  2. ü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.

Vorgehensweise

Variante 1

  • Fügen Sie in der Methode DO_INIT oder DO_REQUEST z.B. folgendes Coding hinzu:

    ...
    
      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

    ...
    
      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:

    <%@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>
                      

Variante 2

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:

<%@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.