Web Service Call in SAP Data Services
This article demonstrates, how to implement external web services call in SAP Data Services.
In this particular example, we will try to call an External Web Service by passing two currency codes as arguments and will capture the currency conversion rate as returned by the web service function. So let's get started. The web service accepts a particular XML format for the input parameters and also returns the value as XML message type.
To implement in SAP Data Services first of all we need to create a Web Service type of Datastore. Next we need to Import the required function module. Lastly we will build a Job and a Dataflow to consume the function module.
First of all we need to create the Datastore. Go to Project -> New -> Datastore.
Alternatively, Go to the Datastores tab of the Local Object Library. Right-click and select New to create a Datastore.
Let's name the Datastore as DS_WebService. Select the Datastore type as Web Service from the drop down selection list. Next enter the web service information in the Web Service URL section of the Web Service Datastore.
Here for this demonstration we are using the below Currency Conversion web service.
http://www.webservicex.net/CurrencyConvertor.asmx?WSDL
Next from the Local Object Library, right-click the Datastore and select Open, to explore the External Metadata. Alternatively, double-click the Datastore to open the Datastore Explorer
Next from the External Metadata, right-click the function module and select Import. This will basically save the external information as Data Services Repository Metadata.
So now we can find the Imported function under the Functions section of the Web Service Datastore of the Local Object Library.
Next double-click the function module to preview the Schema Definition. As mentioned previously this function module expects an input XML Schema as REQUEST and also returns an output XML Schema as REPLY or response.
So we are good to design a Data Services Job and Dataflow to consume the function call. Below is the implementation screenshot of the Dataflow.
In this example we have a Source Table having a pair of columns FROMCURRENCY and TOCURRENCY. Here the requirement is to capture these currency types and the currency conversion rate to an output table.
Next we take a Row Generation Transform in the Dataflow. Keep the properties as default. We are using this to generate a single row for the Header tag of the XML schema that we are going to create. Next we will pass this XML schema information to the Web Service Function and will receive the XML Reply message as the return from the function module.
Now we will generate a XML Schema as per the required input template for the Web Service Function. So let's take a Query Transform. Next Join the Source Table, namely CONVERT_CURRENCY and the Row Generation Transform to the Query Transform. Next double-click the Query Transform to open the Query Editor to design the Schema Out.
Select the Parent Schema of the Schema Out, here it is Query_Set_Schema. Go to the FROM tab and Check the Input Schema i.e. the Source Table only, here it is CONVERT_CURRENCY. Next from the Schema In select the 3 columns of the Source Table and select Map to Output. Here the purpose is to pass through these Source Table columns to the Target Table.
Next in the Schema Out, right-click and select New Output Schema and provide a Schema Name; here the New Output Schema Name is CURRENCY_RATE. We will be passing this Schema definition to the Web Service Function. Next right-click the New Output Schema and select Make Current. Next go to the FROM tab and Check the Input Schema i.e. the Row Generation Transform only, here it is Row_Generation. Next from the Schema In select the columns FROMCURRENCY and TOCURRENCY of the Source Table and select Map to Output. Now our XML Schema as required by the Web Service Function is ready to be used.
Next we take another Query Transform in the Dataflow to call the Web Service Function. Map the pass through Source Columns to the Schema Out. Next in Schema-Out right-click and select New Function Call.
Next Select the Web Service Function. So select the Web Service Datastore as appears on the Function categories. Next select the Web Service Function Name.
Now we need to pass the generated XML schema as input arguments to the Web Service Function. So select the Schema from the Input schema of query here CURRENCY_RATE and drag-drop to the textbox below i.e. mapped to the ConversionRate of the Input Schema of the Function Module.
Since the Web Service Function sends the REPLY in the form of XML schema; so in order to flatten the Hierarchy Schema and load in a Target Table we will use another Query Transform to UNNEST the Return Schema with the Parent Schema. So right-click the Sub-Schema in the Schema Out namely ConversionRateResponse and select UNNEST.
We are finally good to map the Query transform to the Target Table.
Below is the sample screenshot of the Source and Target Data Preview of this demo.