05-04-2009 11:27 AM
Hi All,
I created web service in one back-end e.g. DEV1 and i want to call him from other back-end DEV2.
How can i do that ?
Best Regards
Nina
Edited by: Nina C on May 4, 2009 12:53 PM
05-04-2009 1:08 PM
Hello,
You can modify this program to call your webservice
you will need to change the url to the url of your webservice
the url can be reached by deploying the webservice from transaction wsadmin
also make sure that host file entries are present if needed
*&---------------------------------------------------------------------*
*& Report ZKRIS_SENDSMS
*&
*&---------------------------------------------------------------------*
*& Author : /people/durairaj.athavanraja/blog/2005/07/12/send-sms-to-india-from-abap
*& Date : 16-06-2008
*& Purpose: Send SMS to BPL mobile in bombay
*&---------------------------------------------------------------------*
*& Date Changed by Tag Description
*&
*&---------------------------------------------------------------------*
REPORT ZKRIS_SENDSMS.
DATA: http_client TYPE REF TO if_http_client .
DATA: wf_string TYPE string ,
result TYPE string ,
r_str TYPE string .
DATA: result_tab TYPE TABLE OF string.
SELECTION-SCREEN: BEGIN OF BLOCK a WITH FRAME .
PARAMETERS: mail(100) LOWER CASE,
m_no(20) LOWER CASE ,
m_mss(120) LOWER CASE.
SELECTION-SCREEN: END OF BLOCK a .
START-OF-SELECTION .
CLEAR wf_string .
CONCATENATE
'http://www.webservicex.net/SendSMS.asmx/SendSMSToIndia?MobileNumber='
m_no
'&FromEmailAddress='
mail
'&Message='
m_mss
INTO
wf_string .
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = wf_string
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
CALL METHOD http_client->send
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2.
CALL METHOD http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3.
CLEAR result .
result = http_client->response->get_cdata( ).
REFRESH result_tab .
SPLIT result AT cl_abap_char_utilities=>cr_lf INTO TABLE result_tab .
LOOP AT result_tab INTO r_str.
WRITE:/ r_str .
ENDLOOP .
05-04-2009 12:30 PM
HI All ,
Any Idea, i am stuck?
Regards
Nina
Edited by: Nina C on May 4, 2009 2:00 PM
05-04-2009 1:08 PM
Hello,
You can modify this program to call your webservice
you will need to change the url to the url of your webservice
the url can be reached by deploying the webservice from transaction wsadmin
also make sure that host file entries are present if needed
*&---------------------------------------------------------------------*
*& Report ZKRIS_SENDSMS
*&
*&---------------------------------------------------------------------*
*& Author : /people/durairaj.athavanraja/blog/2005/07/12/send-sms-to-india-from-abap
*& Date : 16-06-2008
*& Purpose: Send SMS to BPL mobile in bombay
*&---------------------------------------------------------------------*
*& Date Changed by Tag Description
*&
*&---------------------------------------------------------------------*
REPORT ZKRIS_SENDSMS.
DATA: http_client TYPE REF TO if_http_client .
DATA: wf_string TYPE string ,
result TYPE string ,
r_str TYPE string .
DATA: result_tab TYPE TABLE OF string.
SELECTION-SCREEN: BEGIN OF BLOCK a WITH FRAME .
PARAMETERS: mail(100) LOWER CASE,
m_no(20) LOWER CASE ,
m_mss(120) LOWER CASE.
SELECTION-SCREEN: END OF BLOCK a .
START-OF-SELECTION .
CLEAR wf_string .
CONCATENATE
'http://www.webservicex.net/SendSMS.asmx/SendSMSToIndia?MobileNumber='
m_no
'&FromEmailAddress='
mail
'&Message='
m_mss
INTO
wf_string .
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = wf_string
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
CALL METHOD http_client->send
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2.
CALL METHOD http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3.
CLEAR result .
result = http_client->response->get_cdata( ).
REFRESH result_tab .
SPLIT result AT cl_abap_char_utilities=>cr_lf INTO TABLE result_tab .
LOOP AT result_tab INTO r_str.
WRITE:/ r_str .
ENDLOOP .
05-04-2009 2:58 PM
Hi Kris,
Thank You,
I call to the endpoint and what i get is one long XML string (one line) .
How i can get the data, i.e. i build FM (wrap in WS) with import and export parameters and i want maintain them, do u have idea how i can do that?
BR
Nina
Edited by: Nina C on May 4, 2009 4:57 PM
05-04-2009 4:35 PM
Hi Nina,
read [SAP Help|http://help.sap.com/saphelp_nw70ehp1/helpdata/en/bf/d005244e9d1d4d92b2fe7935556b4c/frameset.htm] about consuming a web service.
There you'll find the needed information and code examples.
Best Regards,
CW
05-04-2009 4:58 PM
HI Cornelia,
Thanks,
Do i have to create proxy and logical port if i want to call to WS from backend1 to backend2 ?
IF yes ,where I have to create it in the tatget system or the host system ?
Best Regards
Nina
05-04-2009 5:25 PM
Hi Nina,
you have to create the proxy and the logical port on client side.
Client side is the backend, that calls the web service.
Server side is providing the web service, that's the backend where you implemented your FM wrapped by the web service.
Best regards,
CW
05-04-2009 5:58 PM
Hi ,
Thank you very much for all your answers!!!
I find this sample code that I think I should use in the program after i create the proxy like You tell in your previous post.
My question is where I have to put the WSDL or the Endpoint so the program will know to whom to call ?
DATA: proxy TYPE REF TO z00co_za_id_wsd2,
in TYPE z00my_operation_name,
out TYPE z00my_operation_name_response.
in-depa-city = u2019franku2019.
in-depa-country = u2019deu2019.
TRY.
CREATE OBJECT proxy
EXPORTING
logical_port_name = u2019L00u2019.
CATCH cx_ai_system_fault.
ENDTRY.
TRY.
CALL METHOD proxy->my_operation_name
EXPORTING
input = in
IMPORTING
output = out.
CATCH cx_ai_system_fault.
CATCH cx_ai_application_fault.
ENDTRY.
WRITE: / out-departure-airportid,
/ out-departure-city,
/ out-departure-country.
Best Regards
Nina
Edited by: Nina C on May 4, 2009 9:25 PM
Edited by: Nina C on May 4, 2009 10:38 PM
Edited by: Nina C on May 5, 2009 8:01 AM
05-05-2009 7:24 AM
hai nina ,
to call a webservice from one back end to other,
first create a client proxy using the wsdl file of the function module,
u can test the client proxy from SE80 , before that u have to create the logical port
it can be created using transaction LPCONFIG or SOAMANAGER if release is latest
if once logical port is created u can test it by executing the client proxy
and u can also use the code which u have posted from any program
instantiate it and call the method by properly passing the parameters
but logical port is necessary , logical port must be created in the system from which ur calling i.e client proxy system
if solved close the thread
Edited by: mohammad afzal on May 5, 2009 8:31 AM
05-05-2009 8:14 AM
HI ,
Thank You!
So if i get you right, this is the following procedure.
1. Create WS on the Target system (in the Server).
2. Generate proxy on the client (in the client).
3. create logical port Via lpconfig (in client).
Am i correct ?
But How can I fill the WS parameters (fill the import to get the export data) ?
Best Regards
Nina
05-05-2009 8:29 AM
hello nina,
ur right with the steps in creation of webservices
and during testing when u execute the webservice u get a pop up window where u have a check box generate template data , if it is checked the parameters are autmotically proposed and u get the result
if u want to pass explicitly the paramters then u have to write a program and pass the values in input parameters , the paramters for the method have deep structure and u have to pass properly
i have doen a sample webservice where i pass a project definition and get its details
the sample code for the proxy is
the results is fetched in out parameter form where i can fetthed detials
REPORT ZDEMOPROXY.
Data : l_proxy type ref to ZPRJCO_ZPROJECTPORT_TYPE,
lo_sys_exception TYPE REF TO cx_ai_system_fault,
out type ZPRJZPROJECTOUTPUT,
in type ZPRJZPROJECTINPUT,
it_controller type PRXCTRLTAB,
wa_controller type prxctrl.
create object l_proxy.
in-PROJECT = 'T-10068'.
TRY.
CALL METHOD l_proxy->zproject
EXPORTING
input = in
IMPORTING
output = out
.
. CATCH cx_ai_system_fault into lo_sys_exception .
CATCH cx_ai_application_fault .
ENDTRY.
write out-details-description.
regards
afzal
05-05-2009 11:37 AM
HI mohammad,
Thanks for your time.
I try the solution you propose and i think i get it.
i still not get the out parameters (coming empty)
i think that the problem is in LPCONFIG , but this is other issue so i open new post for that .
Thanks again
Nina
05-05-2009 11:46 AM
hi nina,
as u said r u able to call the service from other system
and as u said u are getting empty paramters , check wether u haev used the export paramter of ur RFC
as that will be available in out paramter of proxy which is response from ur webserivce
may be LPCONFIG might not be working u can try to create in logical port in SOAMANAGER( this is applicable to latest versions of SAP) ,
i too faced lot of problem in creating a web service in r/3 and consume it in other r/3
atlast it was successful , in creatign logical port dotn forget to make the port as default port
regards
afzal