Basic Web Service Call (SAP Library - SOAP Runtime for the SAP W...

Basic Web Service Call
The call of a Web Service in the SAP Web AS from external development tools such as Visual Studio .NET was described in the previous unit Calling a Web Service from VS.NET. The following describes how Web Services of the SAP Web AS can be called from ABAP programs. The unit Basic Concepts describes the main components of the SOAP Runtime for the calling side – the classes CSoapDocumentand CSoapTransportHttp of the include program SOAPINCL. This unit uses a concrete example to describe the procedure for developing a SOAP client.


Creating the Application Coding Inclusion of the include program SOAPINCL (using the include command) Generation and filling of an instance of the SOAP document class CsoapDocument (specification of the SOAP methods to be called and the parameters for the SOAP call). Generation and filling of an instance of the SOAP document class CSoapTransportHttp (decision between URL-based or destination-based call) Transfer of the document object to the transport object Execution of the call Error handling 2. Optional: If you are using a destination-based call, you need to create a corresponding destination of type H (server is a Web AS) or G (external server) in transaction SM59. 3. 4. Testing the Program Optional: If an error occurs, you can use the trace mechanisms of the ICF/ICM to perform error analysis (mainly in transactions SMICM or SM59). For more information on analyzing errors, see Administration.

The SOAP caller program used as an example in the following is contained in detail in Appendix C

Step 1: Creating the Application Coding First, you need to inform the main program of the ABAP classes of the client SOAP Runtime, as these do not exist as global classes in the Class Builder (SE24). To do this, use the include command: INCLUDE SOAPINCL. The SOAP Runtime, which is based on the RFC concept, works on the basis of a request/response communication paradigm, whereby the request/response data aspect is represented by an instance of the class CSoapDocument, and the communication aspect is represented by an instance of the class CsoapTransportHttp. The methods and the parameters to be called are determined in the document. The transport instance is used to determine the target system and execute the actual SOAP call. The call is then as follows: DATA: osoap TYPE REF TO CSoapDocument. CREATE OBJECT osoap. ²-- SOAP Document Reference ²-- Create Object

CALL METHOD osoap->set_method ²-- Specify Method EXPORTING nsprefix = ´saprfc´ nsvalue = ´CSoapConstants=>sc_rfc_function_ns´ name = ´STFC_CONNECTION´.

1 von 3

14.01.2008 09:24

Basic Web Service Call (SAP Library - SOAP Runtime for the SAP W...

GET REFERENCE OF p_requtext INTO dref. CALL METHOD osoap->add_parameter ²-- Specify Parameter EXPORTING direction = CSoapConstants=>ic_param_in name = 'REQUTEXT' value = dref. Note that you need to transfer all the parameters to the document before the call. This includes the output parameters, for example: GET REFERENCE OF p_echotext INTO dref. CALL METHOD osoap->add_parameter EXPORTING direction = CSoapConstants=>ic_param_out name = 'ECHOTEXT' value = dref. The direction of the SOAP parameter is specified using the parameter direction. The list constants CSoapConstants=>ic_param_in, CSoapConstants=>ic_param_out and CSoapConstants=>ic_param_inout (= in + out) are available. Proceed as follows to execute the call: DATA: isoap TYPE REF TO ISoapSerialize. DATA: otransp TYPE REF TO CSoapTransportHttp.
CALL METHOD CSoapTransport=>new_http_transport IMPORTING transport = otransp. CALL METHOD otransp->set_destination_by_name EXPORTING dest = ´MY_WEB_SERVER_DEST´. ²-- Create via Factory ²-- Destination via SM59

isoap = osoap. CALL METHOD otransp->set_payload EXPORTING payload = isoap.

²-- Set Document

CALL METHOD otransp->request_response. ²-- Execute Request First, an instance of the HTTP transport class is generated by calling a factory method, and it is then filled with information about the target system. The example shows the approach using a destination in SM59 (you can also use the URL directly; however, the approach using the destination is preferable in real productive programs). Afterwards, the SOAP document that has already been filled above is transferred to this transport instance, and the call is triggered.

To provide a clearer overview, the handling of exceptions and the check whether instance generation returns zero references has been omitted from the example. For a productive program, this is not a recommended approach – correct error handling should take place at this point as in the example program in Appendix C.

Step 2: Entry in SM59 The procedure is the same as that for creating RFC destinations. However, as a destination type you need to use either type H (HTTP connection to R/3 system) or type G (HTTP connection to external server). For more detailed documentation, see the online application help in the transactions SM59 or SICF.

2 von 3

14.01.2008 09:24

Basic Web Service Call (SAP Library - SOAP Runtime for the SAP W...

If you carry out a connection test to a destination that references the inbound SOAP Runtime, you receive a SOAP fault with the error code SOAP-ENV:Server, and an error message stating that the SOAP document class cannot initialize the buffer. This occurs because the connection test in SM59 sends an empty HTTP Body from which the inbound SOAP obviously cannot extract a valid SOAP call.

Step 3: Testing the Program This step is obviously application-specific. No further instructions can be provided. Step 4: Analyzing Errors If an error does occur in testing, and you suspect that it is an error in SOAP communication, you first need to analyze the error messages in the possible delivered exceptions of the SOAP Runtime. You can also use standard test programs to check whether the SOAP Runtime is actually working. The reports RSVSOAP1 and RSVSOAP3 are suitable for this, because the called Web Services both exist as function modules in every SAP Web AS.

If these approaches are not successful, it may help to analyze the trace files. For more information, see Notes for Analyzing Errors.

3 von 3

14.01.2008 09:24