Saturday, December 18, 2010

Passing values from one Web Dynpro application to another Web Dynpro application

Summary: Simple example of calling and passing value from one Webdynpro Application to another Webdynpro Application. We will Create two Applications by name ‘ZZ_CALLING_APPLICATION’ and ‘ZZ_CALLED_APPLICATION’. In first Application that is ‘ZZ_CALLING_APPLICATION’ we will create an input parameter where user will enter a date & on clicking on a button it will show all header details of Purchase Order for that particular date and on lead selection of a Purchase Order details it will call our second Application that is ‘ZZ_CALLING_APPLICATION’ and show the item details for that particular PO which we have selected in our first Application means we will call and pass the Purchase Order Number from first to second Application.

1. Go to transaction SE80 and select “WebDynpro Comp./Intf” and create a new WebDynpro component by the name ZZ_CALLING_APPLICATION (as shown below), give window name as MAIN_WINDOW and view as FIRST_VIEW. Save the Web Dynpro Application as local object as shown below:

2. Now go to the Component Controller Context tab and create one node as shown below with the name ‘EKKO_NODE’ and take the Dictionary structure as EKKO with Cardinality ‘0..n’ and Selection ‘0..1’. Now select the ‘Add Attribute from Structure’ and select the fields you want in your table.

3. Now save your Application and go to view context and map the node ‘EKKO_NODE’ from Component Controller Context to view context by drag and drop as shown below.

4. Create one attribute with name DATE under the View Controller Context tab with type DATUM.

5. Now go to the Layout and create an element with name LABEL type label, INPUT as type Input Field. In element LABEL maintain its property ‘LabelFor’ as INPUT and in ‘Text’ write ‘Enter a date’. Now bind the property value of element INPUT with attribute date as shown below:

6. Create an element type Button with name SHOW and make the text property as ‘Show PO’ and create an action as SHOW_PO as shown below:


7. Now create a table with name TABLE, change the property ‘Layout Data‘ as ‘MatrixHeadData’, give the text as ‘Header data’ in the text property of CAPTION.

8. Right click on the table and create the binding as shown below, chose the context node as EKKO_NODE, make the Standard Cell Editor property as ‘TextView’ and click on ‘Confirm Entry’ as shown below:

9. Now double click in the Action SHOW_PO and write the below piece of code in the method ONACTIONSHOW_PO.

DATA:
lo_el_context
TYPE REF TO if_wd_context_element,
ls_context
TYPE wd_this->element_context,
lv_date
LIKE ls_context-date.

* get element via lead selection
lo_el_context = wd_context->get_element( ).

* get single attribute
lo_el_context->get_attribute(
EXPORTING
name =
`DATE`
IMPORTING
value = lv_date ).

Data:
fs_ekko
type ekko.

Data:
t_ekko
like standard table of fs_ekko.

select *
from ekko
into table t_ekko
where bedat EQ lv_date.

DATA:
lo_nd_ekko_node
TYPE REF TO if_wd_context_node,
lo_el_ekko_node
TYPE REF TO if_wd_context_element,
ls_ekko_node
TYPE wd_this->element_ekko_node.

* navigate from to via lead selection
lo_nd_ekko_node = wd_context->get_child_node( name =
wd_this->wdctx_ekko_node ).

CALL METHOD lo_nd_ekko_node->bind_table
EXPORTING
new_items = t_ekko.

10. Create one more WebDynpro component by the name ZZ_CALLIED_APPLICATION, give window name as MAIN_WINDOW and view as FIRST_VIEW. Save the Web Dynpro Application as local object. Now go to the Component Controller Context tab and create one node with the name ‘EKPO_NODE’ and take the Dictionary structure as EKPO with Cardinality ‘0..n’ and Selection ‘0..1’. Now select the ‘Add Attribute from Structure’ and select the fields you want in your table as you have done in step 2 and save you application.


11. Go to view context and map the node ‘EKPO_NODE’ from Component Controller Context to view context by drag and drop and then go to the layout create a table with name TABLE, give the text as ‘Item data’ in the text property of CAPTION and bind it with the node ‘EKPO_NODE’ as shown below:

12. Now save the application and come back to our first application that is ZZ_CALLING_APPLICATION, in that create a Action in the On lead selection event of the table ‘TABLE’ as SHOW_ITEM as shown below:

13. Now double click on the event SHOW_ITEM and write the below code in its method ONACTIONSHOW_ITEM.

Reading the value of ebeln in lead selection that has to be passed
DATA lo_nd_ekko_node TYPE REF TO if_wd_context_node.
DATA lo_el_ekko_node TYPE REF TO if_wd_context_element.
DATA ls_ekko_node TYPE wd_this->element_ekko_node.
DATA lv_ebeln LIKE ls_ekko_node-ebeln.

* navigate from to via lead selection
lo_nd_ekko_node = wd_context->get_child_node( name = wd_this->wdctx_ekko_node ).

* get element via lead selection
lo_el_ekko_node = lo_nd_ekko_node->get_element( ).

* get single attribute
lo_el_ekko_node->get_attribute(
EXPORTING
name =
`EBELN`
IMPORTING
value = lv_ebeln ).

DATA:
w_url
type string,
w_value
type string.

* Get the URL of the called application
call method cl_wd_utilities=>construct_wd_url
exporting
application_name =
'ZZ_CALLED_APPLICATION'
importing
out_absolute_url = w_url.

* make the Value type compatible that has to be passed with the URL
w_value = lv_ebeln.

* Attach the parameters and its value with the URL that
* have to be passed to the 2nd application
call method cl_http_server=>append_field_url
exporting
name =
'EBELN'
value = w_value
changing
url = w_url.

* generate a popup window for the 2nd application with the above URL
DATA lo_window_manager TYPE REF TO if_wd_window_manager.
DATA lo_api_component TYPE REF TO if_wd_component.
DATA lo_window TYPE REF TO if_wd_window.

lo_api_component = wd_comp_controller->wd_get_api( ).
lo_window_manager = lo_api_component->get_window_manager( ).

lo_window = lo_window_manager->create_external_window(

url = w_url ).

lo_window->open( ).

14. Now go to the Controller Initialization Method of the 2nd application that is ‘ZZ_CALLED_APPLICATION’ and write the below piece of code in its WDDOINIT method.

DATA:
lv_param
type string.

* get the value for ebeln that has been send for the 1st application
lv_param = wdr_task=>client_window->get_parameter(
'EBELN' ).

DATA:
fs_ekpo
type ekpo,
t_ekpo
like table of fs_ekpo.

* get the item deatils for the given ebeln
select *
from ekpo
into table t_ekpo
where ebeln eq lv_param.

DATA lo_nd_ekpo_node TYPE REF TO if_wd_context_node.
DATA lo_el_ekpo_node TYPE REF TO if_wd_context_element.
DATA ls_ekpo_node TYPE wd_this->element_ekpo_node.

* navigate from to via lead selection
lo_nd_ekpo_node = wd_context->get_child_node( name = wd_this-

>wdctx_ekpo_node ).

* bind the internal table of item details with the display table
call method lo_nd_ekpo_node->bind_table
exporting
new_items = t_ekpo.

15. Now SAVE and Activate both the Application. Test your Application after creating a WebDynpro application as shown below:

16. Now test the first application that is ‘ZZ_CALLING_APPLICATION’ as shown below:

Final Output:

Enter a date:

Click on the button ‘Show PO’.

Make a lead selection on any of the PO

Window of the Second Application with the item details for the PO selected in first Application.


No comments:

Tutorials on SAP-ABAP

Adobe Interactive Forms Tutorials

Business Server Pages (BSP)

Userexits/BADIs

Web Dynpro for ABAP (Step by step procedure for web dynpro,Tutorials on Web Dynpro,)

ALV Tutorials

Blog Archive

goodsites