Runtime analysis of WebUI navigation
Analysis of WebUI Navigation at runtime.
You want to understand how a particular WebUI navigation is implemented.
This document does not intend to provide the concept of navigation in WebUI and how that could be implemented. It is assumed that reader understands navigation.
View, View Area, View Sets, Navigation
In WebUI multiple views could be assigned to a view area. This assignment is maintained in repository of a component. At any point during runtime, only one of the assigned views could be displayed. This is referred to as current viewarea content.
Navigation in WebUI is nothing but a request to change the content of the view area with another view.
This achieved by navigation link which holds the target view. Framework do not need view area information as a view can be present in only one viewarea which can be read from repository.
These requests are build up into a queue and processed by view manager. There are two webui methods which are used in this regard.
CL_BSP_WD_WINDOW-IF_BSP_WD_NAVIGATION~NAVIGATE and CL_BSP_WD_VIEW_MANAGER- PROCESS_NAV_QUEUE.
CL_BSP_WD_WINDOW-IF_BSP_WD_NAVIGATION~NAVIGATE is responsible for posting request to nav queue while CL_BSP_WD_VIEW_MANAGER- PROCESS_NAV_QUEUE is for processing queue elements and trigger navigation.
Just before performing the user action which will do navigation, put external break points in these two methods and then take the action like button click etc.
You will get hit in CL_BSP_WD_WINDOW- IF_BSP_WD_NAVIGATION~NAVIGATE method one or multiple times as there are number of navigation requests. You would easily understand from call stack which controller is triggering that.
After you come out of all navigate method calls you will reach CL_BSP_WD_VIEW_MANAGER-PROCESS_NAV_QUEUE and can look into queue.
During trigger of individual navigation from queue entries there may be other navigation requests adding up in the queue.
Navigation is only completed for this http request / response cycle once the control comes out of process_nav_queue.
It may be noted here that CL_BSP_WD_WINDOW- IF_BSP_WD_NAVIGATION~NAVIGATE is a public method which could be overridden in a window and you could have skipped a major navigation request. However the chance of happening this is very less, as it is not required to redefine this functionality