Basic Web Dynpro ABAP: Step by Step Guide
Basic Web Dynpro ABAP: Step by Step Guide
Agenda
Web Dynpro is the SAP Netweaver programming model for user interfaces (UIs).
The Web Dynpro programming model is based on the Model View Controller paradigm,
and has the following features that build on the classic dynpro model:
Clear separation of business logic and display logic
Uniform Meta model for all types of user interfaces
Execution on a number of client platforms
Extensive platform independence of interfaces
Web Dynpro for ABAP (WD4A, WDA) is the SAP standard UI technology for
developing Web applications in the ABAP environment. It consists of a runtime
environment and a graphical development environment with special Web Dynpro tools
that are integrated in the ABAP Workbench (SE80).
Stateful applications are supported – that is, if the page is changed and the
required data remains intact so that you can access it at any time throughout the
entire application context.
_______________________________________________________________________
_
Page 2 of 51
Ver 1.0
Model-based UI development
Enforce clear separation between UI logic and business logic
Little coding, lots of design
Declarative UI development
Central implementation of user interface standards
Accessibility support
Adobe Forms integration
Centrally provided UI elements
Internationalization support
SAP Web Dynpro uses principles of MVC paradigm
Controller: handle the user input and steers the application
Views : define the layout
Model : holds and provides the business logic
_______________________________________________________________________
_
Page 3 of 51
Ver 1.0
_______________________________________________________________________
_
Page 4 of 51
Ver 1.0
Component Interface
Interface Controller
Interface View
View
Is embedded into window
Defines the visible layout via predefined UI elements
Don’t contain any HTML or scripting
UI elements
Are the smallest UI building blocks (button, input field)
Available as provided UI element libraries
Have properties which steer their behavior
Can be nested with Container UI elements
Are positioned in hierarchical structure
Controller
Contains the logic of the UI layer
Implements event handlers
Implements action handlers
Each view has its own view controller
Context
Hierarchy of nodes and attributes
Nodes and attributes can be bound to properties of UI elements
Framework cares about updating the values
Each node can be a collection of elements.
Min and max number of elements in a node is steered by
Cardinality
(0...1) The node contains only one element instance, which must not be instantiated
(1...1) The node contains only one element instance, which is instantiated automatically
(0...n) The node can contain multiple element instances, of which none have to be
instantiated
(1...n) The node can contain multiple element instances, of which at least one must
always be instantiated (and is instantiated automatically)
Component Controller
Controller which is the backbone of the component
Has its own Context
Contains the logic for interaction with the model (ABAP class, function modules,
BAPIs, Web Services)
_______________________________________________________________________
_
Page 5 of 51
Ver 1.0
Node Elements
2. Enter transaction code SE80 (As shown in the above screenshot) to launch the
Object Navigator, where you can create Web Dynpro Component or Web Dynpro
interface.
Taking an example of a Web Dynpro Component, I will explain you the step by step
procedure how to work on.
_______________________________________________________________________
_
Page 6 of 51
Ver 1.0
3. Enter WD component name in ‘Z’ name space to create new one and press
‘ENTER’.
_______________________________________________________________________
_
Page 7 of 51
Ver 1.0
_______________________________________________________________________
_
Page 8 of 51
Ver 1.0
It will prompt to specify package and select “Local Object” button to store
under local objects (temporary-> non transportable)
_______________________________________________________________________
_
Page 9 of 51
Ver 1.0
How to create a view: Follow the screenshots shown below to create a view.
_______________________________________________________________________
_
Page 10 of 51
Ver 1.0
Views are embedded into windows and these actually displayed on the WD application
screen when executed.
_______________________________________________________________________
_
Page 11 of 51
Ver 1.0
It will open a new popup to maintain the View name and description. Click on OK’
button.
Click on ‘SAVE’
‘VIEW’ will contain following methods which can be controlled at view level.
WDDOMODIFYVIEW - Method for Modifying the View before Rendering
WDDOINIT - Controller Initialization Method
WDDOBEFOREACTION - Method for Validation of User Input
WDDOAFTERACTION - Method for non-action specific operations before
Navigation
WDDOEXIT - Controller Clean-Up Method
_______________________________________________________________________
_
Page 12 of 51
Ver 1.0
A view has exactly one view context, which contains the data required for the view.
Windows
In the Window maintenance screen, If you right-click on window ZWD_EXAMPLE, you
can choose ‘Embed View’ from the Context Menu. Embed the V_FLIGHT_DETAILS
View.
Note: View MAIN is already embedded in to the window, since it has assigned when
WD component was created.
_______________________________________________________________________
_
Page 13 of 51
Ver 1.0
Select ‘Embed view’ it will open a popup to assign the view to be embedded Click
on F4 to display the number of views that created select the view
V_FLIGHT_DETAILS.
_______________________________________________________________________
_
Page 14 of 51
Ver 1.0
Select the view ‘MAIN’ to define the inbound plugs as shown in the below screenshots.
Inbound Plug is TARGET_PLUG_NAME
_______________________________________________________________________
_
Page 15 of 51
Ver 1.0
Select the view V_FLIGHT_DETAILS to define the inbound plugs as shown in the
below screenshot.
Note: Outbound plugs can also be created here, but in our case we are creating the
outbound plugs when buttons are created.
Map the inbound plugs and outbound plugs to happen navigation between views as
shown in the below screenshot. (Click here to see how outbound plugs has created)
_______________________________________________________________________
_
Page 16 of 51
Ver 1.0
Here, we will describe each and every tab displayed in the Web Dynpro component
controller.
Properties:
Properties will contain details such as description, created by, created on...Etc...You can
see them in the below screenshot.
_______________________________________________________________________
_
Page 17 of 51
Ver 1.0
Context:
The data used in the component or in the view are stored in the context.
Each context has a root node, underneath which the individual data fields (attributes) are stored in a
tree structure.
This property of a node is known as its cardinality.
Context Programming
Global Interface methods that will be used to work with the contexts
IF_WD_CONTEXT – the context itself
IF_WD_CONTEXT_NODE – a context node
IF_WD_CONTEXT_ELEMENT – an element of a node
IF_WD_CONTEXT_NODE_INFO – context node info
_______________________________________________________________________
_
Page 18 of 51
Ver 1.0
Click on ‘node’
_______________________________________________________________________
_
Page 19 of 51
Ver 1.0
_______________________________________________________________________
_
Page 20 of 51
Ver 1.0
Repeat the same steps to create another node (FLIGHT_DETAILS) which will display
flight details on the WD table.
Select the required fields whichever you wanted to show them on the
FLIGHT_DETAILS table.
_______________________________________________________________________
_
Page 21 of 51
Ver 1.0
Now, we have two nodes created for the current component controller.
The nodes whichever has been created at the component controller level can be used only
at component controller level and the data stored in these nodes can be accessed only at
component controller level.
But, to make use of these nodes at view level, we have to map them irrespective of the
views created in the current WD component.
For that, we will call it as context mapping.
_______________________________________________________________________
_
Page 22 of 51
Ver 1.0
Context Mapping
Nodes of Component Controller context can be mapped to nodes of other contexts(views)
WD Framework cares about data transport (references)
See the below screenshot to find, how does it displays when context mapping has been
done to the current view.
_______________________________________________________________________
_
Page 23 of 51
Ver 1.0
Now, select the second view V_FLIGHT_DETAILS where the flight details have been
displayed, do the context mapping as required.
_______________________________________________________________________
_
Page 24 of 51
Ver 1.0
Attributes
The following screenshot have 3 attributes.
WD_CONTEXT Reference to Local Controller Context (IF_WD_CONTEXT_NODE)
WD_THIS Self-Reference to Local Controller Interface
WD_ASSIST Reference to the Instance of Assistance Class
We also can create our own attributes here depends on the requirement.
Events
Currently, we don’t have any events used
Methods
_______________________________________________________________________
_
Page 25 of 51
Ver 1.0
These methods are called as hook methods, which comes default when WD component is
created successfully.
WDDOINIT is called automatically when a controller is initialized for the first time.
As we know this method is used for initializing, send the reference of WD_CONTEXT
(reference of IF_WD_CONTEXT_NODE) to the assistance class.
Method WDDOINIT.
* ------------------------ Initialize Assistance Class --------------
endmethod.
WDDOEXIT is called by the runtime when exiting the controller and can be used for
releasing locks, for example.
_______________________________________________________________________
_
Page 26 of 51
Ver 1.0
Depending on the controller settings, the local controller interface also contains the
methods WDDOBEFORENAVIGATION, WDDOPOSTPROCESSING.
Select the MAIN view here, which acts as initial screen for entering the flight details.
_______________________________________________________________________
_
Page 27 of 51
Ver 1.0
If you want to see the detailed documentation for the selected element type, follow the below
screen shot.
Transparent Container UI element allows you to arrange its inserted UI elements through
the specified layout. It makes you to manage the inserted elements very easily.
Repeat the same steps to design the MAIN view as shown here. (Step1 to insert an
element in to the view)
_______________________________________________________________________
_
Page 28 of 51
Ver 1.0
_______________________________________________________________________
_
Page 29 of 51
Ver 1.0
Repeat the same steps to design the view layout to be displayed as shown in the below
screenshot.
_______________________________________________________________________
_
Page 30 of 51
Ver 1.0
Matrix Layout
Row Layout
A standard Web Dynpro layout (for Matrix Layout) is used to arrange the UI elements on
the Web Dynpro view.
Recommended to use
‘Matrix Layout’
Select the ‘transparent container’ to set the layout property and recommended to use
‘Matrix layout’ across all the view elements.
_______________________________________________________________________
_
Page 31 of 51
Ver 1.0
_______________________________________________________________________
_
Page 32 of 51
Ver 1.0
_______________________________________________________________________
_
Page 33 of 51
Ver 1.0
Follow the same steps to bind the corresponding ‘node elements’ to the other ‘view
elements’.
_______________________________________________________________________
_
Page 34 of 51
Ver 1.0
Create a button ‘Display Flights’. Upon clicking this button we will navigate to next
screen where we can see the list of available flights.
_______________________________________________________________________
_
Page 35 of 51
Ver 1.0
The UI element Button represents the pushbutton on the screen. Create an event handler
to execute when button is pressed.
Click on ONACTION event it will open a new popup maintain the action name and
outbound plug as shown here in the below screenshot.
Click OK button it will ask you to create an outbound plug click YES.
_______________________________________________________________________
_
Page 36 of 51
Ver 1.0
Click Create button to create a OTR text. Click ‘SAVE’ OTR text is created
_______________________________________________________________________
_
Page 37 of 51
Ver 1.0
Copy the Alias name from OTR text Specify the text property for view element as
‘$OTR:$TMP/DISP_FLIGHTS’ as shown in the below screenshot (Red colored circle).
_______________________________________________________________________
_
Page 38 of 51
Ver 1.0
Select the table element that created right click on it select ‘create binding’ property
to create the table columns.
_______________________________________________________________________
_
Page 39 of 51
Ver 1.0
Click OK button on the ‘Define context binding’ popup now create binding to the
table element.
_______________________________________________________________________
_
Page 40 of 51
Ver 1.0
Do the same to create a BACK button in this view (follow the same how created ‘Display
Flights’ button created in the MAIN view)
_______________________________________________________________________
_
Page 41 of 51
Ver 1.0
_______________________________________________________________________
_
Page 42 of 51
Ver 1.0
You can store coding there that is required within the component, but is not linked
directly with the layout or with the function of a controller. This could be, for example, a
call of the application layer or UI-based editing of the data.
Method calls of the assistance class are much better from a performance point of view
than calls of methods of a Web Dynpro controller.
The second important function of the assistance class is the management of dynamic
texts. Texts that are combined at runtime only and/or contain variables can be stored in
the text pool of the assistance class as text symbols.
The assistance class is automatically instantiated when a component is called. The
instance is available to each controller of the component through the attribute
WD_ASSIST.
Select WD component (double click) Give an assistance class name in the place of
input field. (Red Color circle from below screenshot)
Press ‘ENTER’ button it will ask you to create an assistance class for this
component click YES Save as local object save the WD component and activate.
Now we can work with assistance class.
Create 2 methods in the assistance class.
GET_FLIGHT_DETAILS is to get the list of flight details and
INITIALIZE is to initialize the assistance class
_______________________________________________________________________
_
Page 43 of 51
Ver 1.0
Write the following code in method INITIALIZE with one importing parameter
(see below screenshot)
Method INITIALIZE.
mo_context = io_context.
Endmethod.
_______________________________________________________________________
_
Page 44 of 51
Ver 1.0
END OF ty_flight.
DATA: lo_nd_flight_input TYPE REF TO if_wd_context_node,
lo_el_flight_input TYPE REF TO if_wd_context_element,
lo_nd_flight_det TYPE REF TO if_wd_context_node, "FLIGHT_DET
node reference
lo_el_flight_det TYPE REF TO if_wd_context_element,
ls_flight_input TYPE ty_flight,
lt_flight_det TYPE STANDARD TABLE OF ty_flight.
SELECT carrid
connid
fldate
price
currency
planetype
seatsmax
seatsocc
paymentsum
FROM sflight
INTO TABLE lt_flight_det WHERE carrid = ls_flight_input-carrid OR
connid = ls_flight_input-connid OR
fldate = ls_flight_input-fldate.
ELSE.
***Raise an error message, if there are no input given in the main scre
en
RETURN.
ENDIF.
***get the reference of node 'FLIGHT_DETAILS'
lo_nd_flight_det = mo_context->get_child_node( name = 'FLIGHT_DETAILS'
).
***Bind the internal table to the node 'FLIGHT_DETAILS' to display in t
he next screen
***which has list of flights available for the given conditions
CALL METHOD lo_nd_flight_det->bind_table
EXPORTING
new_items = lt_flight_det.
ENDMETHOD.
_______________________________________________________________________
_
Page 45 of 51
Ver 1.0
Upon clicking the ‘Display Flights’ button we have to get the list of flights available for
the given filter criteria call the method GET_FLIGHT_DETAILS.
Since method can only be called (Reference of Assistance class (wd_assist) is not
available at view level) from component controller method create a method at component
controller level and then this method will be executed and then we can see the list of
available flights in the next screen.
_______________________________________________________________________
_
Page 46 of 51
Ver 1.0
_______________________________________________________________________
_
Page 47 of 51
Ver 1.0
_______________________________________________________________________
_
Page 48 of 51
Ver 1.0
If you don’t see the below screen, probably you can refresh or launch the WD
component once again.
_______________________________________________________________________
_
Page 49 of 51
Ver 1.0
You can see the initial screen, where you will have to enter the filter criteria click on
‘Display Flights’ button.
_______________________________________________________________________
_
Page 50 of 51
Ver 1.0
Here, you can see the list of available flights for the given filter criteria.
_______________________________________________________________________
_
Page 51 of 51