
Eine Interface-View einer dynamisch eingebetteten Component muss auch dynamisch in die Navigation eines Windows eingebunden werden. Dies kann zum Beispiel in einer Methode des Controllers derjenigen View implementiert werden, von der die Navigation ausgehen soll. Das folgende Code-Fragment zeigt zunächst die Instanziierung der dynamisch eingebetteten Component.
data: L_VIEW_CONTROLLER_API type ref to IF_WD_VIEW_CONTROLLER, L_COMPONENT_USAGE type ref to IF_WD_COMPONENT_USAGE, COMPONENT_NAME type STRING. if L_COMPONENT_USAGE->HAS_ACTIVE_COMPONENT( ) is initial. L_COMPONENT_USAGE->CREATE_COMPONENT( COMPONENT_NAME ). endif.
Im weiteren Verlauf wird die Methode PREPARE_DYNAMIC_NAVIGATION des Laufzeit-APIs des View-Controllers gerufen. Alle Attribute der eigenen, also der verwendenden Component, sind bekannt und können fest implementiert werden (source-Attribute). Alle Attribute der verwendeten Component sind zur Design-Zeit nicht bekannt und werden als Variablen übergeben (target-Attribue, Werte sind als Platzhalter in spitzen Klammern dargestellt).
L_VIEW_CONTROLLER_API = WD_THIS->WD_GET_API( ). L_VIEW_CONTROLLER_API->PREPARE_DYNAMIC_NAVIGATION( source_window_name = 'W0' source_vusage_name = 'MAIN_USAGE_1' source_plug_name = 'TO_V1' target_component_name = <component_name> target_component_usage = <component_usage_name> target_view_name = <interface_view_name> target_plug_name = <inbound_plug_name> target_embedding_position = <embedding_position> ).
Die Methode PREPARE_DYNAMIC_NAVIGATION der API des View-Controllers bettet die Interface-View <interface_view_name> der Component <component_name> an die entsprechende Einbettungsposition <embedding_position> ein. Außerdem wird ein Navigationslink vom Outbound-Plug TO_V1 der View MAIN zum Inbound-Plug <inbound_plug_name> der Interface-View <interface_view_name> angelegt. Die in <component_name> angegebene Component muss das Component-Interface implementieren, auf das die Component-Verwendung <component_usage_name> zeigt.
Im letzen Schritt dieses Fragments wird dann der Outbound-Plug gerufen.
WD_THIS->FIRE_TO_V1_PLG( ).
Die Einbettungsposition der Interface-View
Bei der Einbettung der Interface-View können verschiedene Fälle relevant sein :
Dieses View-Container-Element kann in der einbettenden View vorhanden, weil statisch deklariert worden, sein. Auch in diesem Fall wird die eingebettete Interface-View nach Angabe des View-Container-Elements als Wert für die Einbettungsposition in der Methode PREPARE_DYNAMIC_NAVIGATION automatisch und zwar zusammen mit der einbettenden View angezeigt.
Es kann jedoch auch der Fall eintreten, dass der View-Container dynamisch zur Laufzeit erst erzeugt werden muss. Das folgende Code-Fragment zeigt ein Beispiel für die Erzeugung eines solchen zusätzlichen Containers, die immer in der Methode WDDOMODIFYVIEW der betreffenden View programmiert werden muss:
data: L_ROOT_CNT type ref to CL_WD_UIELEMENT_CONTAINER, L_VIEW_CNT type ref to CL_WD_VIEW_CONTAINER_UIELEMENT, L_MATRIX_HEAD_DATA type ref to CL_WD_MATRIX_HEAD_DATA. if first time = abap_true. L_ROOT_CNT ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ). L_VIEW_CNT = CL_WD_VIEW_CONTAINER_UIELEMENT=>NEW_VIEW_CONTAINER_UIELEMENT( ID = 'CNT1' ). L_ROOT_CNT->ADD_CHILD( L_VIEW_CNT ). L_MATRIX_HEAD_DATA = CL_WD_MATRIX_HEAD_DATA=>NEW_MATRIX_HEAD_DATA( ELEMENT = L_VIEW_CNT ). endif.