OSB 11g & SAP – Single Channel/Program ID for Multiple IDOCs
- by Shub Lahiri, A-Team
Background
This note is a supplement to the blog entry, SOA 11g & SAP – Single Channel/Program ID for Multiple IDOCs by Greg Mally.
Greg has shown how a single SOA Suite composite can be used with iWay Adapters to receive multiple IDOC types via a single channel in the adapter, corresponding to a single programID on the SAP system.
We will try to address the same requirements within the OSB framework here.
Project Built - Design Time
The basic build of an OSB project with iWay SAP Adapter, as seen in another entry in this blog, consists of working in OSB Design console and Application Explorer.
OSB Design Time - Part 1
We will create a placeholder project first in OSB with a proper directory structure, so that we can export the WSDL, XSD and the JCA binding information from Application Explorer directly into this project.
Application Explorer - iWay Design Time Tool
Receiving IDOCs is classified as an inbound event within Application Explorer. For setting up events, a channel is first defined (e.g. iDoc_Channel) using the same PROGRAMID (RFC destination), as defined within SAP for the OSB server.
Next, the same channel is used to export the JCA Inbound Event artifacts for the candidate IDOC, e.g. DEBMAS06 directly to the pre-created OSB project.
Note that the validation for schema has been turned off. As a result, this will allow the adapter, at runtime, to use a single channel to receive multiple IDOC types from SAP and pass them on to the OSB runtime engine without any validation. In other words, we do not have to repeat the above step for each IDOC type.
OSB Design Time - Part 2
Create 2 simple XML based Business Services to write to a file, e.g. SAP_DEBMAS_File and SAP_MATMAS_File.
Next, generate a Proxy Service using the JCA binding file exported from Application Explorer in the previous section. In the generated proxy service, edit the message flow and add a route node.
Add a routing table in the route node with the following routing function.
fn:local-name-from-QName(fn:node-name($body/*[1]))
This function takes advantage of the fact that the XML payload at runtime, after translation by adapter, has the IDOC type as the top element.
With the routing function in place, build the routing table to add 2 branches to route the IDOCs to the appropriate Business Service for writing the XML payload to files in separate directories.
This completes the build of the OSB project.
Testing - Run-Time
After deployment and activation, the SAP adapter will wait to receive multiple types of IDOCs sent from the SAP system using a single channel. Upon receipt of the IDOCs, the OSB project will route them appropriately to save the corresponding XML payloads for different IDOC types in different directories.