Web Dynpro for ABAP – Fix for Tutorial 6 – Component Usage (How to create a reusable component)
My interest in Web Dynpro for ABAP has been piling up so I finally took the time to try it out and run through some tutorials.
Like many others, I started here http://scn.sap.com/docs/DOC-8863 , an excelent set of tutorials by Antje Boehm-Peters and Razi Mateen. However, in Tutorial 6, which teaches you how to reuse other components, the component used (TECHED_05S_CUSTOMER_DATA) did not exist in my system. I googled around and it seemed that there were others in my situation. So, to help out others, and also for educational purposes, I took the time to learn how to create a reusable component that could be used to complete this tutorial.
So let’s start!
1 – Creating a new component
Start by creating a new component and name it whatever you like. I named it ZZ_00_CUSTDISPLAY. I entered the same name for the window and left the default name for the view.
2 – Creating the attributes in the component controller’s context
Switch to the context tab of the component’s controller. Create a node and use structure BAPICUSTOMER_04. For simplicity I added 4 attributes from the structure: Customer, Name, City and Street.
In the end it should look something like this:
3 – Map the component’s context to the view’s context
Now you need to map the component’s context to the view’s context. Switch to the context tab of the component view to be able to do this. Drag the component’s context node to the view’s context node.
If done properly, it should look like this:
4 – Creating the layout
Now you have to change to the layout tab and draw it out, mapping the fields to the respective attributes in the view’s context.. I used read-only input fields and labels.
This is how it looks like in the end:
5 – Creating the method
Now we need to implement the method that will get the information from the customer and display it on the screen. Switch to the method tab of the component controller and create method SHOWCUSTOMER. Don’t forget to check the interface checkbox or it won’t be available for the component usage controller.
Double click it. Now you have to implement the method. We need an importing parameter, CUSTOMER_ID, of type S_CUSTOMER, like this:
Here’s the code for the method (sorry for the poor formatting):
METHOD showcustomer .
lv_kunnr TYPE kunnr,
ls_cust TYPE bapicustomer_04.
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
input = customer_id
output = lv_kunnr.
CALL FUNCTION ‘BAPI_CUSTOMER_GETDETAIL2’
customerno = lv_kunnr
customeraddress = ls_cust.
DATA lo_nd_cust_data TYPE REF TO if_wd_context_node.
DATA lo_el_cust_data TYPE REF TO if_wd_context_element.
DATA ls_cust_data TYPE wd_this->element_cust_data.
* navigate from <CONTEXT> to <CUST_DATA> via lead selection
lo_nd_cust_data = wd_context->get_child_node( name = wd_this-
* @TODO handle non existant child
* IF lo_nd_cust_data IS INITIAL.
* get element via lead selection
lo_el_cust_data = lo_nd_cust_data->get_element( ).
* @TODO handle not set lead selection
IF lo_el_cust_data IS INITIAL.
* @TODO fill static attributes
ls_cust_data = ls_cust.
* set all declared attributes
static_attributes = ls_cust_data ).
6 – Save it and activate everything!!
Save and activate everything! You should now be able to proceed with tutorial 6 – component usage!
Hope this is helpful.