You are on page 1of 42

WebUI Navigation guide

Summary

This document is aimed at understanding navigation concepts in CRM WebUI. It covers the
various scenarios of navigation.

Author(s): Ashish Walke

Company: Deloitte Consulting India Pvt. Ltd.

Created on: 01 May 2012

Author Bio

Ashish Walke is a Consultant at Deloitte consulting. He has worked on multiple


implementations in SAP CRM across versions.

Table of Contents

Concept of navigation
1. Outbound plug (OP)
2. Inbound plug (IP)
3. Navigational link
4. Runtime repository editor
1. Navigation between views within one component
2. Navigation from view of an outer component to view of the inner component
3. Navigation from view of an inner component to view of the outer component
4. Navigation using Work Area Component Repository
5. Navigation using Navigation descriptor
6. Related Content

Generated by Jive on 2013-03-14+01:00


1
WebUI Navigation guide

Navigation from one view / window to another involves the following elements:-

• Outbound plug
• Inbound plug
• Navigational link
• Runtime repository editor

Outbound plug (OP)


The outbound plug is a method of the controller class of the navigation source. It is fired
when moving away from the source (view / window).

Inbound plug (IP)


The inbound plug is a method of the controller class of the navigation source. It is fired when
moving towards the destination (view / window).

Navigational link
The navigational link is an element of the runtime repository. It provides the mapping
between source and destination. It typically consists of the following:-

Generated by Jive on 2013-03-14+01:00


2
WebUI Navigation guide

• Navigational link Id
• Source (view / window)
• Outbound plug
• Destination (view / window)
• Inbound plug

Runtime repository editor


The runtime repository is an XML file. But since maintaining it is no so convenient the
component workbench offers an editor that visualizes the xml coding and offers an easy
maintenance of the different elements. The runtime repository editor allows the following:-

• Creation of navigational links


• Assignment of views to view sets
• Assignment of view / view sets to window
• Assignment of component set
• Definition of component interface
• Definition of component usages

a) Create a component with two views “view1” and “view2” each with a
context node (BuilHeader).

Generated by Jive on 2013-03-14+01:00


3
WebUI Navigation guide

Create view configuration for both view1 and view2 and add fields to the configuration.

b) Create a button in view1 (code added to view1.htm).

Generated by Jive on 2013-03-14+01:00


4
WebUI Navigation guide

c) Create an event handler for the button and an outbound plug for view1.

Generated by Jive on 2013-03-14+01:00


5
WebUI Navigation guide

d) Create an inbound plug for view2.

Generated by Jive on 2013-03-14+01:00


6
WebUI Navigation guide

e) In the Runtime repository add both the views to the Window “MainWindow”. Assign “view1” as
default.

Generated by Jive on 2013-03-14+01:00


7
WebUI Navigation guide

f) In the Runtime repository add Navigational link “ToPage2”. Specify the source and target views
and the corresponding outbound and inbound plugs.

Generated by Jive on 2013-03-14+01:00


8
WebUI Navigation guide

Generated by Jive on 2013-03-14+01:00


9
WebUI Navigation guide

g) Navigational link is created in the runtime repository.

h) Handle the event for button click i.e. call the Outbound plug from the event handler for button.

Sample code:-

METHOD eh_onbtn1.

Generated by Jive on 2013-03-14+01:00


10
WebUI Navigation guide

CALL METHOD op_topage2.

ENDMETHOD.

i) In order to navigate from View1 to View2, we will call the navigational link from the outbound plug.

Sample code:-

METHOD op_topage2. view_manager->navigate( source_rep_view = rep_view outbound_plug =


'ToPage2' ).ENDMETHOD.

a) Create a component (i.e. outer component) with view “view1” and a context
node (BuilHeader).

Generated by Jive on 2013-03-14+01:00


11
WebUI Navigation guide

    Create a component (i.e. inner component) with view “view2” and a context
node (BuilHeader).

Create view configuration for both view1 and view2 and add fields to the configuration.

b) Assign view1 and view2 to “MainWindow” in their respective components.

c) Create a button in view1 (Outer component). For sample code refer to point b) in Navigation
between views within one component.

d) Create an event handler for the button and an outbound plug for “view1” (Outer component).
Create outbound plug for “MainWindow” (Outer component).

Generated by Jive on 2013-03-14+01:00


12
WebUI Navigation guide

e) Create an inbound plug for “view2” and “MainWindow” (Inner component).

Generated by Jive on 2013-03-14+01:00


13
WebUI Navigation guide

f) In the runtime repository create Component interface (Inner Component). Specify the inbound and outbound
plugs created and add the context BuilHeader.

Generated by Jive on 2013-03-14+01:00


14
WebUI Navigation guide

g) In the runtime repository create Component usage (Outer Component).

Generated by Jive on 2013-03-14+01:00


15
WebUI Navigation guide

h) Assign the Interface view from Usage (created above) to the MainWindow of Outer component.

Generated by Jive on 2013-03-14+01:00


16
WebUI Navigation guide

i) Create navigational link in the runtime repository (Outer Component) to specify source as
“view1” and destination as “view2”.

Specify values as below:-

Source = MainWindow of Outer component (OP = TOPAGE2)

Target = MainWindow of Inner component (IP = FROMPAGE1)

Generated by Jive on 2013-03-14+01:00


17
WebUI Navigation guide

j) Handle the event for button click i.e. call the Outbound plug of “view1” from event handler for
button.

Sample code:-

METHOD eh_onbtn1. CALL METHOD op_topage2.ENDMETHOD.

k) Following would be the navigation path from “view1” to “view2”.

Generated by Jive on 2013-03-14+01:00


18
WebUI Navigation guide

Call OP of MainWindow (Outer) from OP of “view1”

Sample code:-

METHOD op_topage2. DATA: lr_window TYPE REF TO cl_bsp_wd_window. lr_window = me-


>view_manager->get_window_controller( ). lr_window->call_outbound_plug( 'TOPAGE2' ).ENDMETHOD.

Call Navigational link from OP of MainWindow (Outer)

Sample code:-

METHOD op_topage2. me->view_manager->navigate( source_rep_view = me->rep_view


outbound_plug = 'TOPAGE2').ENDMETHOD.

Call IP of “view2” from IP of MainWindow (Inner)

Sample code:-

METHOD ip_frompage1.

Generated by Jive on 2013-03-14+01:00


19
WebUI Navigation guide

DATA : lr_view TYPE REF TO zl_znav_scn_view2_impl.

TRY.
lr_view ?= get_subcontroller_by_viewname( 'ZNAV_SCN2_INNER/view2' ).
CATCH cx_sy_move_cast_error.
ENDTRY.

CHECK lr_view IS NOT INITIAL.


lr_view->ip_frompage1( ).ENDMETHOD.

Generated by Jive on 2013-03-14+01:00


20
WebUI Navigation guide

a) Create a component (i.e. Search component) with view “view1” and a context node
(BuilHeader).

    Create a component (i.e. Header component) with view “view2” and a context
node (BuilHeader).

Create a component (i.e. Main Component). Both the above components would be
included in the Main component.

Create view configuration for both view1 and view2 and add fields to the configuration.

b) Assign view1 and view2 to “MainWindow” in their respective components.

Generated by Jive on 2013-03-14+01:00


21
WebUI Navigation guide

c) Create a button in view1 (Outer component).

For sample code refer to point b) in Navigation between views within one component.

d) Create an event handler for the button and an outbound plug for “view1” (Outer component).

Create outbound plug for “MainWindow” (Outer component).

Generated by Jive on 2013-03-14+01:00


22
WebUI Navigation guide

e) Create an inbound plug for “view2” and “MainWindow” (Inner component).

Generated by Jive on 2013-03-14+01:00


23
WebUI Navigation guide

f) In the runtime repository create Component interface (Search Component).

Specify the inbound and outbound plugs created and add the context BuilHeader.

Generated by Jive on 2013-03-14+01:00


24
WebUI Navigation guide

g) In the runtime repository create Component interface (Header Component).

Specify the inbound and outbound plugs created and add the context BuilHeader.

Generated by Jive on 2013-03-14+01:00


25
WebUI Navigation guide

h) In the runtime repository of Main Component, create Component usage for Search and Header component.
Also, include the Inbound and Outbound plugs respectively.

Generated by Jive on 2013-03-14+01:00


26
WebUI Navigation guide

i) Assign the Interface view from Usage (created above) to the MainWindow of Main Component.

Also, include the inbound and outbound plugs in the MainWindow.

Generated by Jive on 2013-03-14+01:00


27
WebUI Navigation guide

j) Delegate the outbound plug of Interface window (Component usage SEARCH) to MainWindow outbound
plug.

Generated by Jive on 2013-03-14+01:00


28
WebUI Navigation guide

k) Create navigational link in the runtime repository (Main Component) to specify source as “MainWindow”
of Main Component and destination as

    “InterfaceWindow” of Component usage HEADER.

Specify values as below:-

Source = MainWindow of Main component (OP = TOPAGE2)

Generated by Jive on 2013-03-14+01:00


29
WebUI Navigation guide

Target = InterfaceWindow of Header component (IP = FROMPAGE1)

l) Handle the event for button click i.e. call the Outbound plug of “view1” from event handler for
button.

Sample code:-

METHOD eh_onbtn1. CALL METHOD op_topage2.ENDMETHOD.

m) Following would be the navigation path from “view1” to “view2”.

Generated by Jive on 2013-03-14+01:00


30
WebUI Navigation guide

Call OP of MainWindow (SEARCH) from OP of “view1”

Sample code:-

METHOD op_topage2. DATA: lr_window TYPE REF TO cl_bsp_wd_window. lr_window = me-


>view_manager->get_window_controller( ). lr_window->call_outbound_plug( 'TOPAGE2' ).ENDMETHOD.

Fire outbound plug of MainWindow(MAIN) from MainWindow(SEARCH)

Sample code:-

Generated by Jive on 2013-03-14+01:00


31
WebUI Navigation guide

METHOD op_topage2. fire_outbound_plug( iv_outbound_plug = 'TOPAGE2' ).ENDMETHOD.

Call Navigational link from OP of MainWindow (MAIN)

Sample code:-

METHOD op_topage2. me->view_manager->navigate( source_rep_view = me->rep_view


outbound_plug = 'TOPAGE2').ENDMETHOD.

Call IP of “view2” from IP of MainWindow (Inner)

Sample code:-

METHOD ip_frompage1.

DATA : lr_view TYPE REF TO zl_znav_scn_view20_impl.

TRY.
lr_view ?= get_subcontroller_by_viewname( 'ZNAV_SCN3_HDR/view2' ).
CATCH cx_sy_move_cast_error.
ENDTRY.

CHECK lr_view IS NOT INITIAL.

lr_view->ip_frompage1( ).ENDMETHOD.

Generated by Jive on 2013-03-14+01:00


32
WebUI Navigation guide

a) Create a component (i.e. Custom component) with view “view1” and a context node
(BuilHeader).

Create view configuration for view1 and add fields to the configuration.

Create a button for navigating back to Identification screen (For sample code refer to point
b) in Navigation between views within one component).

Assign this component such that it loads on clicking the work center link in navigation bar as follows:-

Generated by Jive on 2013-03-14+01:00


33
WebUI Navigation guide

b) Create an event handler for the button and an outbound plug for
“view1” (Custom component).

    Create outbound plug for “MainWindow” (Custom component).

Generated by Jive on 2013-03-14+01:00


34
WebUI Navigation guide

c) Create Component Interface for the Custom component (This would be used in the next step).

Generated by Jive on 2013-03-14+01:00


35
WebUI Navigation guide

d) Create an entry for the Custom component in Work Area Component Repository.

Generated by Jive on 2013-03-14+01:00


36
WebUI Navigation guide

e) Create an entry for outbound plug. The outbound plug name should correspond to the name specified in
Outbound plug of Window in Custom

component (Step b)

Source ID can be any free text. However, it has to be unique (i.e. cannot be used more than once).

Generated by Jive on 2013-03-14+01:00


37
WebUI Navigation guide

f) Define Object Type which determines the navigation target.

For the appropriate Navigation bar profile define the Generic OP Mapping.

The Generic OP mapping can contain either of the following that defines the navigation
target:-

- TargetID

- Logical link

Generated by Jive on 2013-03-14+01:00


38
WebUI Navigation guide

g) Following would be the navigation path from “Custom component” to


“Identification screen”.

Call OP of MainWindow from OP of “view1”

Sample code:-

METHOD op_backtoident. DATA: lr_window TYPE REF TO cl_bsp_wd_window.


lr_window = me->view_manager->get_window_controller( ). lr_window-
>call_outbound_plug( 'BACKTOIDENT' ).ENDMETHOD.

Fire outbound plug of WorkArea Component repository from MainWindow

Generated by Jive on 2013-03-14+01:00


39
WebUI Navigation guide

Sample code:-

METHOD op_topage2. fire_outbound_plug( iv_outbound_plug = 'BACKTOIDENT' ).ENDMETHOD.

a) Get instance of the BOL core and Activity root object.

lr_core = cl_crm_bol_core=>get_instance( ).

lr_activity = lr_core->get_root_entity( iv_object_name = 'BTOrder'

iv_object_guid = lv_activity_guid ).

CHECK lr_activity IS BOUND.

Generated by Jive on 2013-03-14+01:00


40
WebUI Navigation guide

Assumption:- Activity GUID has been fetched in variable “lv_activity_guid”

b) Create an object for navigation.

CREATE OBJECT lr_coll_for_navigate TYPE cl_crm_bol_bo_col.

c) Add the Activity entity to the navigation collection.

lr_coll_for_navigate->add( iv_entity = lr_activity

iv_set_focus = abap_true ).

d) Get Activity object type.

lv_object_type = cl_crm_uiu_ibase_tool=>get_bt_ui_object_type( lr_activity ).

Assumption:- The BOL entity for Activity has already been fetched in variable “lr_activity”

e) Create the navigation descriptor.

cl_crm_ui_descriptor_obj_srv=>create_ui_object_based(

EXPORTING iv_ui_object_type = lv_object_type

iv_ui_object_action = lc_action

RECEIVING rr_result = lr_nav_descr ).

Generated by Jive on 2013-03-14+01:00


41
WebUI Navigation guide

CHECK lr_nav_descr IS NOT INITIAL.

f) Insert the navigation descriptor in navigation collection at position 1.

lr_coll_for_navigate->insert( iv_bo = lr_nav_descr

iv_index = 1 ).

g) Register the current page in history so that we can navigate back to it.

RAISE EVENT history_trigger .

h) Call outbound plug for navigation and pass the navigation collection.

op_toactivity( lr_coll_for_navigate ).

i) Get instance of the navigation service and navigate to the component dynamically along with collection.

DATA: lr_nav_serv TYPE REF TO if_crm_ui_navigation_service.

lr_nav_serv = cl_crm_ui_navigation_service=>get_instance( ).

lr_nav_serv->navigate_dynamically( iv_data_collection = iv_data_collection ).

Generated by Jive on 2013-03-14+01:00


42

You might also like