Skip to Content
Author's profile photo Rodrigo Pertierra

SOAP Lookup from UDF

I saw many thread about how to create a SOAP Lookup in PI since the standard function up today involves only the RFC and JDBC Lookup

until this point become standard, the only way to implement it is manually,

below you will find a detailed executed scenario to show you how to do it.

you can also refer to this similar blog by Bravesh: Web Service Call from UDF

In this case i will use a simple structure that send two parameter to a service and it returns the sum of them.

so a Message Mapping has to be created.

lookup_Mapping.jpg

The same structure is used as source and target to make this scenario more simple, as you can see a UDF was created (SOAP_LookUp) to invoke a service to summarize both values.

Libraries used:

import java.io.*;

import java.util.Map;

import com.sap.aii.mapping.lookup.*;

import javax.xml.parsers.*;

import javax.xml.transform.*;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.*;

import org.xml.sax.*

Function CODE

*********************************************************************************************************************

AbstractTrace trace = container.getTrace();

String suma = “”;

try {

//instance the channel to invoke the service.

Channel channel = LookupService.getChannel(“CCR_SOAP_LookUP”,”cc_SOAP_Lookup_receiver”);

SystemAccessor accessor = LookupService.getSystemAccessor(channel);

// The Request message in XML. THIS IS THE LOOKUP SERVICE

String SOAPxml = “<?xml version=\”1.0\” encoding=\”UTF-8\”?><ns0:SendDataToStorage xmlns:ns0=\”http://Test.Service.SchemaIn\”> <Valor1>”

+ var1

+ “</Valor1><Valor2>”

+ var2

+ “</Valor2></ns0:SendDataToStorage>”;

InputStream inputStream =new ByteArrayInputStream(SOAPxml.getBytes());

XmlPayload payload = LookupService.getXmlPayload(inputStream);

Payload SOAPOutPayload = null;

//The response will be a Payload. Parse this to get the response field out.

SOAPOutPayload = accessor.call(payload);

/* Parse the SOAPPayload to get the SOAP Response back.  

The conversion rate is available under the Field Name ConversionRateResult */ 

InputStream inp = SOAPOutPayload.getContent();  

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  

/* Create DOM structure from input XML */  

DocumentBuilder builder = factory.newDocumentBuilder();  

Document document = builder.parse(inp); 

  /* ConversionRate is available in the TAG ConversionRateResult in the Response XML */

NodeList list = document.getElementsByTagName(“Response”);

Node node = list.item(0);   

if (node != null) {

node = node.getFirstChild();        

if (node != null) {  

suma = node.getNodeValue();        

}  

}

} catch (Exception e) { 

trace.addWarning(“Error” + e);  }

  1. a.     trace.addInfo(“Service XXX success executed”);

return suma;


*****************************************************************************

Once all the configuration is made in the ESR and ID we can execute the scenario, in my case i will use the soft HTTP Client for SAP Process integration that could be downloaded from: http://sappihttpclient.codeplex.com

lookup_Test.jpg

Don’t get confuse with the QoS, even if the Lookup is sync, the QoS of our interface is Exactly Once.

Message Monitor

to check whether the interface process success is let go to SXI_MONITOR to see what happened

lookup_Test.jpg

so as far we can see the scenario process success, so, let’s check if the data process success in the adapter engine., so let’s go to Runtime Workbench–>communication component–> adapter engine–>Communication channel monitoring.

Select the proper channel associated to our backend system press the USE FILTER button.

lookup_Teswt.jpg

if every looks like the picture, click on “Message Processing completed …” to get the payload of message

Once the popup comes up, go to Message Content tab and select the option “PAYLOAD……..” from the drop-down-list. a message similar to the below picture should be displayed.

lookup_Test.jpg

and that it, hope you can get a more clear idea about how to configure such scenarios using SOAP Lookup

Assigned Tags

      3 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Michal Krawczyk
      Michal Krawczyk

      Hi,

      1. can you please add a similar post:

      http://scn.sap.com/community/pi-and-soa-middleware/blog/2006/11/20/webservice-calls-from-a-user-defined-function

      2. can you please correct spelling mistakes ?

      Thank you,

      Regards,

      Michal Krawczyk

      Author's profile photo Rodrigo Pertierra
      Rodrigo Pertierra
      Blog Post Author

      done,is there something missing now to aprove the document.

      Regards

      Author's profile photo Former Member
      Former Member

      HIĀ Alejandro Per

      I use same code for Currency Converter that you post but I got some error may I know how to solve this issue

      ESR Objects

      ID Objects

      Please suggest me to solve this issue.