File Content Conversion for Unequal Number of Columns

File Content Conversion for Unequal Number of Columns

Now consider this scenario, the input flat file is in the following format.
  • Books, CD, Video, Games
  • CD, Games, DVD
  • DVD, CD, Video, Games, Books
  • Books
  • CD, DVD

The input file has different number of column fields in every row. In the first row it has 4, then, 3 then 5, then 1 and finally it has 2.

We have to convert this, as an output file in which every item should be placed in the corresponding itemset. The output file has the following format.

Books

CD

Video

Games

CD

Games

DVD

DVD

CD

Video

Games

Books

Books

CD

DVD

Here is the structure of the Input data type and the Output data type in the Design part.

Input Data type

image

Output Data type

image

Create the corresponding Message Types and Message Interfaces.

Now we will see the Message mapping.

Message Mapping

image

In the mapping to do this conversion we need a user-defined function.

User-Defined Function




Finally create the Interface Mapping also.

In the Configuration part, both the Sender and Receiver Communication channels will use File adapter.

In the Sender Communication channel, we have to choose the Message Protocol as File Content Conversion and also fill the Content Conversion Parameters as shown in the following picture.

image

And also add the following columns in the Content Conversion Parameters. These columns are sufficient to do this conversion.

image

Then do the remaining Confiuration part for executing this scenario.



How to send a flat file with various field lengths and variable substructures to XI 3.0

How to send a flat file with various field lengths and variable substructures to XI 3.0


Suppose we have a flat file that looks like this:

"V00",01,"VEN",999000,272727,09
"A11","VR",13245,20050
"A11","VR",12345,90090
"A27","VR00027"

With various field lengths and have a variable number of substructures for Recordset Structure, then the substructures can occur multiple times,must be identified by the parser from their content. This means that a key field must be set with different constants for the substructures. You must specify a key field and the key fields are H1,sub1 and sub2 and the constant values V00,A11 AND A27.

In the configuration part

1) Specify the adapter type as sender

2) Message protocol to file content conversion

image

3) Set the Content conversion parameters

a) Document Name-Message Type (mi_test) inserted in the message as the main XML tag

b) Document Namespace-http://wipro/venksworkshop, namespace is added to the name of the document

c) Recordset Name- Root, Specify the name of the structure.

d) Recordset Structure-specify the sequence and the number of substructures H1,1, sub1,*, sub2,*

e) Key Field Name - KF

f) Key Field Type – String

image

4) Define the additional parameters

-H1.fieldNames:F1,F2,F3,F4,F5,F6

-H1.fieldSeparator: ,

-H1.endSeparator:'nl'

-H1.processFieldNames: fromConfiguration because in our example the flat file does not contain any header
Add similar Parameters for sub1 and sub2

image

Add key field value parameters to identify the substructures in the recordset

-H1.keyFieldValue: "V00"

-sub1.keyFieldValue: "A11"

-sub2.keyFieldValue: "A27"

image

This configuration should convert the flat file into an XML message like this:

image


NAB the TAB (File Adapter)

NAB the TAB (File Adapter)


“The biggest cause of trouble in the world today is that the stupid people are so sure about things and the intelligent folks are so full of doubts.” - Bertrand Russell

So let’s try and clear all doubts and make things sure on the TAB delimited file and hence process them with the file adapter. I hope this blog will prove helpful for all those forum posts on the same.

A TAB delimited file has its fields separated by a TAB. The following screenshot is of a TAB delimited file.

image

How do you read such a file using the file adapter?

Suppose we have our data type as follows:

image

Assuming that all other parameters for the sender file adapter has been provided we just focus on the content conversion for the same.

The hexadecimal notation for the TAB is 0x90.

Note:

The hyperlinks http://www.scit.wlv.ac.uk/cbook/chap1.Codes.html & http://www.cplusplus.com/doc/papers/ascii.html will help us to find the hexadecimal notation for a lot of escape sequences and printable/nonprintable characters.

So we can specify the (substructure).fieldSeparator as ‘0x09’.

image

Another way to accomplish the same (but a tricky one) is described below.

Open the notepad and press the TAB button once. Copy the space generated and paste it in the content conversion. The following screenshot will throw more light on the same.

To copy the space gererated by the TAB key :

image

Paste it into the content conversion parameters:

image

Amazingly this trick works too :-).

Hope this blog helps in answering the queries related to the TAB delimited file in the forums.

NAB the TAB (File Adapter)

Content Conversion (Pattern/Random content in input file)

Content Conversion (Pattern/Random content in input file)


Content Conversion (Pattern/Random content in input file)

The scenario deals with the content conversion so as to extract all the data in an input file wherein the content may follow a pattern or content is random.


The Data type is shown as below:


image
Note: During the creation of data type the header, hbatch, body , tbatch and trailer are created at the same level and a recordset creation is ignored.

Here it can be noted that header and trailer have their occurrences as 1 while the hbatch, body and tbatch are 0 to unbounded. In this case the pattern noticed is that the header and trailer comes once and within it hbatch, body and tbatch occur. The body comes repeating in between an hbatch and tbatch. The sample file below will throw more light.

The sample file:


0112345010101

021111112222

03100001111112222

03100011111212223

041000011111

021231116722

03100781119012332

041005611001

059453287699


In the Integration directory, the following has to be mentioned at the configuration of the communication channel.


image image


The recordset name is optional. Even though it is mentioned, it can be ignored by the statement ignoreRecordsetName = true . In the recordset structure, the occurrence for trailer has to be set to ‘ * ‘. The recordsets per message is set to ‘ * ‘. This specifies the number of recordsets to be grouped together in a message. All recordsets are thus included in the XML message.

The output XML thrown to XI for further processing is as shown below:


image

image
Suppose the trailer occurrence is mentioned as 1 (as in the data type created ) then the output XML would not have the complete data as in the input file, rather only the final hbatch, body and tbatch occurring before the trailer would be included in the message.

The output XML after content conversion would be then as follows for the same input file:
image


NOTE: In case, whole of the file follows a random content then all you need to change is the occurrence (make all the nodes as 0 - unbounded) during the creation of data type. At the communication channel configuration, the number of substructures need to be mentioned as * for the sequence.

File Receiver with Content Conversion

File Receiver with Content Conversion


cenario:
This scenario describes the steps involved in configuration of the receiver file adapter with file content conversion.

image
Fig1. File Content Conversion Scenario

Input Message:

This is the input message to the receiver file adapter sent from XI.
image
Fig2. Input XML message

Output Message:

image
Fig3. Output CSV Message

Steps:

XI sends a XML message as input to the receiver adapter.Now this XML needs to be converted to a File in CSV format, i.e. it may be a comma separated, tab separated etc. To generate the required output, the data type at the receiver’s side plays a crucial rule. The data type should abide to the rules of well formed XML.

The Receiver File Adapter is configured, using the following settings:
  • Choose File Content Conversion as the Message Protocol.
  • You may or may not give the ‘addHeaderLine’ parameter.
  • For the ‘fieldSeparator’ parameter you need to give field separator for both list and substructure (referring to the data type above). For eg: it may be a ‘,’ (comma) for substructure in a comma separated file.
  • The ‘endSeparator’ parameter needs to given for substructure only. For eg: it may be a ‘nl’ (new line)


  • image
    Fig4. Conversion Parameters in Adapter
  • · Give the file name, the directory and the Construction mode. Activate all the settings. Receiver File Adapter with F.C.C. is configured.
Result:
The file with desired output generated.

Introduction to simple (File-XI-File)scenario and complete walk through for starters(Part2)

Introduction to simple (File-XI-File)scenario and complete walk through for starters(Part2)


Configuration the contents in Integration Directory

The relevant objects are structured, organized, and saved in the Integration Directory in the form of configuration objects.

The Integration Directory is structured around the cross-system task areas.
1) Collaboration profile- Specify the potential senders and receivers of messages and the technical communication paths.
2) Receiver determination and interface determination define the flow of messages in a system landscape.
3)In Sender agreement and receiver agreement you define the technical details for message processing

image

The Business Scenario provides you with a central point of access for all integration objects such as interfaces, mappings, software components and so on.
To address a business system from the SLD as the sender or receiver of messages in logical routing, you must define it as a service (of type Business System) in the Integration Directory.
Create a Business System,Leave the party field empty to define the service as a Service Without Party.
Make specifications that specially refer to the service as a sender or receiver.

Now create two communication channels FILESENDER AND FILERECEIVER and assign them to the service.

Assign parameters for FILESENDER and FILERECEIVER communication channel

Select the File Adapter as shown from the adapter metadata.

image

Configure the Sender FTP adapter to be able to send files to the Integration Server.

image

FTP Connection Parameters

1)Enter the host name or IP address of the FTP server.
2)Specify the port number of the FTP server. The default is the standard port for the FTP server (21).
3)Connection mode Permanent
4)Set the FTP connection transfer mode to Binary.
5)Specify the directory where the files are located
6)set the Anonymous Logon User Name and password
7)specify the folder where the file is placed
8)Specify the name of the file that you want to process.

Since the text file to the Integration Engine,comprises complex data structures that are to be converted into an XML document, choose File Content Conversion and make the required entries for conversion under Parameters for Content Conversion as shown below

image

Configure the Receiver File/FTP adapter to save XML messages from the Integration Server in files

image

Now Define Sender Agreement, where you define how the message is to be transformed so that it can be processed by the Integration Engine. A sender agreement contains a reference to a communication channel. here the communication channel to define is FILESENDER.

image

In your Receiver Agreement you define how the message is to be transformed so that it can be processed by a receiver. A receiver agreement contains a reference to a communication channel In this case is the FILERECEIVER

image

ReceiverDetermination is a Configuration object in SAP Exchange Infrastructure that describes the assignment of a sender interface and an outbound interface to one or more receivers. Select the service and save.Then in the configuration overview refresh and check for the mapping program and Receiver Agreement.

image

You use an Interface Determination to specify for a sender and a receiver,which inbound interface is to be used for the inbound processing of a message.
In an interface determination you define the following for the outbound interface of a sender
1)An inbound interface(FILEOUTPUT_IB)
2)An interface mapping for the outbound and inbound interface (FILEINPUT_TO_FILEOUTPUT_INTERFACE)

image

Save and Activate in the change list where you select your saved objects. Now the status become from Being Processed to Active.

This configuration should convert the flat file like this.

image

The input.txt file placed in the Test folder is being picked and deleted since the processing mode is delete.

A new file output.txt is created with time stamp in the Test folder as shown below.



This completes the scenario.Please go through various blogs posted by fellow webloggers on to the sap exchange infrastructure forum for various other scenarios.

Introduction to simple(File-XI-File)scenario and complete walk through for starters(Part1)

Introduction to simple(File-XI-File)scenario and complete walk through for starters(Part1)

Here specifics of SLD are not covered.Scenario is simple the csv file is picked up by the file adapter from a business system and posted on to the same system using file adapter.At the end of this scenario I am sure you will be able to challenge with various other complex scenarios.

Overview

The Map Designer is a client component of the Design Builder used to develop maps defining input and output specifications and mapping rules that perform data transformation as desired. The Mapping Object of the Integration Repository uses the definitions of data stored or defined in the data type object (that are created using the Data Type Design editor) to specify the transformation logic in the form of map rules. Map rules operate on input data objects and build output data objects.

image

Basic Steps for Building the Desired Output Data

Building the desired output data consists of two main steps:
1 Choose the message types in the Mapping Design.
2 Defining the data definitions in the data type editor object.

Working on the Message Mapping Object

In order to use the Mapping Object, you must already have the data structure that defines your data in the data Type object. The Mapping Object uses the data object definitions that are stored in the Data type Object.

The Mapping Editor is used to:
1.Create maps to specify the logic necessary to transform the input data to the desired output data.
2.Identify the source and data objects of the input data.
3.Validate and resolve the source data type properties defined in the Data Type Object.
4.Identify the target and data objects of the output data.
5.Specify and build the output data according to the rules specified during mapping.
6.View the test results of the map execution.

Create Maps to Specify Sources and Targets
After defining data objects and their properties in the Data Type Editor, define the mapping in the Mapping Objects where you specify the outbound and inbound Data Types.
To create maps using the Map Designer
1 Select the message type source file and the Target file.
2. Specify the logic necessary by using various functions to transform the input data to the desired output data.
3 Map the respective elements
4 Test your maps with Test tab.

Development of all design objects for the Integration Repository at design time

The objects in the Integration Repository are assigned to a product using the software component version and can therefore be shipped with this product.

A data file is a simple example of data. The file consists of records and each record consists of fields. Three kinds of data objects exist in this data file: a file, a record, and a field. In a file of records, think of the data in terms of the three Data objects: 1)Define your Fields FirstName, MiddleName, LastName, Place, City, State, and Country

Samuel,J,Jackson,Lakefront Drive,Earth City,Missouri,USA
Kenny,m,George,North Beauregard street,Alexandria,Virginia,USA

To define this data , create a Data Type in your Integration Repository. create Three data types: FileInput, Record, and Row Define your fields FirstName,MiddleName,LastName,City,Place,State,Country as shown and their respective properties.

image

The entire contents of your data must be defined. Define the input data so that each data object of the source data is identified. Define the output data according to your output specifications.Here the requirement is output conatins the same fields as the input.

2)Define output data type structure name as FILEOUTPUT_TEST containing the same elements as the input.

image

3)Create a Message Type comprises a data type that describes the structure of a message.
This is used to refer the message in SAP XI to be exchanged at runtime.specify your datatype name in this case it is FILEINPUT

image

4)Create a Message Interface to describe interface, which you want to use to exchange messages between application components using SAP Exchange Infrastructure. for a message interface, it can either have the task of sending a request (outbound) or receiving a request (inbound). This is an outbound interface,where the Output message type is FILEINPUT and attributes are defined as shown.

image


This is an Inbound Interface where you specify the Input Message type FILEOUTPUT_TEST and the attributes as shown.

image/>


A mapping refers to the mapping of interfaces or messages to other interfaces or messages. You can define mappings for an interface pair (source and target interface) by using message interfaces and message types in the Integration Repository.

5)Create a Message Mapping FILE_TO_FILE which refers to a mapping of messages and is supported by a graphical mapping editor. The editor enables you to design a structure mapping between any two XML structures and connect to a value mapping.
Using the editor which enables you with the drag and drop metaphor,design your mapping by dragging the elements from the source FILEINPUT structure and dropping them on to the elements on the target structure FILEOUTPUT_TEST. load the two message types and define the mapping as shown.

image


6)Create an Interface mapping FILEINPUT_TO_FILEOUTPUT_NTERFACE.Interface mappings register your mapping program for an interface pair in the Integration Repository.
Enter the source and target interfaces which in this case are FILEINPUT_OB and FILEOUTPUT_IB.
To import the properties of the interfaces, choose Read Interfaces
An interface mapping can only refer mapping programs that belong to the same or an underlying software component version of the interface mapping.select the mapping program,in this case it is FILE_TO_FILE.

image


save and activate in the change list where you select your saved objects.Now the status become from Being Processed to Active.

image

Please Dont forget to follow up the Part-2 for configuration the contents,the Sender and Receiver File adapter in integration directory.

SYNCHRONOUS SOAP TO JDBC - END TO END WALKTHROUGH

SYNCHRONOUS SOAP TO JDBC - END TO END WALKTHROUGH


SYNCHRONOUS SOAP TO JDBC, USING STORED PROCEDURES.

END TO END WALKTHROUGH

This Web Log is aimed to Explain and provide a clear, step-by-step, end to end, walkthrough to implement a SOAP to JDBC synchronous scenario, executing a given stored procedure and processing the respective response.

The intended audience for this Web Log are the complete beginners, and people that needs a quick guide to implement the JDBC Receiver in their interfaces; With this in mind, I have made a effort to document all the necessary steps to successfully implement this interface.

BUSINESS SCENARIO

The company ABC needs an interface to synchronize their employee’s salary details.

They need to connect to an old SQL Server Database through a SOAP client, and check if the salary information of a given (or several) employee(s) has been updated. ( [RecordStatus] = “U”)

If so, the interface have to retrieve the updated record and update its status to Processed ([RecordStatus] = “P”)

Assumptions, prerequisites and known issues:

  • SQL Server 2000 is the DB Server used in this scenario.
  • For convenience we will create our objects in the database [Northwind] (you can create a brand new DB if you feel so).
  • If your SQL Server 200 is installed on a Windows using XP with SP2, I suggest to disable the Windows Firewall and, if needed, follow the Troubleshoting guide available at the end of this web log.

Naming conventions

To easily identify all the objects related to this interface, we will use a “y” or a capital “Y” at the beginning of all the object names.

SYSTEM LANDSCAPE DIRECTORY SETUP:

1- Go to [Software Catalog]

Create a [New Product] with the Following Details:

Vendor: YABCvendor

Name: YABC

Version: 1

Click on [Create]

Define a [New Software Component] with the Following Details:

Use the previously defined Product and Vendor

Name (upper case): YABC_SW_COMP

Version: 1

Click on [Create]

2- Return to the SLD Home and go to [Technical Landscape]

Create a [New Technical system] with the Following Details:

Technical System Type: Third Party

-> NEXT

System Name: YTSABC

Hostname: YABCSERVER

-> NEXT

Add the product: YABC, 1 of YABCVendor

-> FINISH

3- Return to the SLD Home and go to [Business Landscape]

Create a [New Business System]

Name: YBSABC

-> NEXT

Tech. Syst. Type: Third Party

-> NEXT

System: YTSABC on yabcserver

Logical System Name: YLSABC

-> NEXT

Select your preferred Integration Server

-> FINISH

We have finishing setting up the SLD for our SOAP to JDBC Synchronous Interface.

INTEGRATION REPOSITORY SETUP:

1. Import the SW Component:

First we will import the recently created Software Component

Go to [Tools] in the Menu Bar

-> Transfer from System Landscape Directory -> Import Software Component Versions …

Select [ YABC_SW_COMP, 1 of yabcvendor ]

-> [Import]

-> [Exit]

Fig. 1 Import SC Versions

The Software Component YABC_SW_COMP shall be available in the Objects Tab list.

2. Create The Namespace

Under SC YABC_SW_COMP create the following namespace: http://yabc.com/soap2jdbc/sync

3. Create The Data Types

We need to create four different Data Types for this interface as follows:

SOAP Request : ySoapEmpReq_dt

SOAP Response: ySoapEmpRes_dt


JDBC Request: yJDBCEmpReq_dt

JDBC Response: yJDBCEmpReq_dt_response

Please ensure that the name of the JDBC Response Data type and Message type have the string “_response” in the end, this is obligatory to properly handle the result of the stored procedure execution.

e.g. If your jdbc request message is named [xyz], the response have to be named [xyz_response].

Be very careful with all the names of the elements within the JDBC Request or Response Data Types, by example, the element getEmpDetails, needs to be the exact name of the stored procedure that we will execute in the Database, and the element EmpID is the exact input variable name that we will provide to the Stored Procedure.


Now you can proceed to create the Data Types as shown in the Figures 2, 3, 4 & 5.

Fig 2. SOAP Request : ySoapEmpReq_dt

Fig 2. SOAP Request : ySoapEmpReq_dt

Fig 3. SOAP Response: ySoapEmpRes_dt

Fig 3. SOAP Response: ySoapEmpRes_dt

Fig 4. JDBC Request: yJDBCEmpReq_dt

Fig 4. JDBC Request:  yJDBCEmpReq_dt

Fig 5. JDBC Response: yJDBCEmpReq_dt_response

Fig 5. JDBC Response: yJDBCEmpReq_dt_response

4. Create The Message Types

To continue we need to create a Message Type for each Data Type, this step is really simple, because the relation between the DT’s and MT’s is one to one.

The Figure 6 will give a clear idea of the relationship between the DT and MT in this Scenario.

Fig. 6 Data types and Message Types

Tip: While Creating the Message Types, you can drag and drop the desired Data type and Namespace to the Respective Text Boxes; Start with the namespace, and finish with the Name of the Data type, then save the Message Type.

Fig 7. Drag and Drop the DT and the Namespace

5. Create The Message Interfaces

We will require Two Synchronous Message Interfaces, one Outbound Synchronous and one Inbound Synchronous

Configure each Message Interface as is shown in the fires 8 & 9.

Fig 8: Outbound Message Interface

Fig 9: Inbound Message Interface

6. Create The Message Mappings

We will require two message mappings, one for the Request and another for the Response. Figure 10, 10a, 10b and Figure 11 shows the mapping details.

Fig. 10 SOAP Request to JDBC Request

Fig. 10a : Constant [EXECUTE] -> @action

Fig. 10b : Constant [CHAR] -> @type

Click on the link below for more information on the document format for the Receiver JDBC Adapter

http://help.sap.com/saphelp_nw04/helpdata/en/2e/96fd3f2d14e869e10000000a155106/frameset.htm

Fig. 11 JDBC Response to SOAP Response

7. Create The Interface Mapping

The last step that we will configure in the Integration Repository is the Interface Mapping.

We will only require one Interface Mapping.

Select the Source Interface and the Target Interface as shown in the Figure 12

Fig 12: Interface Mapping

Now Click on The button [Read Interfaces] and select the corresponding message mappings in the Request and Response Tab.

The figure 12a and 12b shows the message mappings already selected in each tab.


Fig. 12a.

Fig. 12b

We have finishing setting up the IR for our SOAP to JDBC Synchronous Interface.

INTEGRATION DIRECTORY SETUP

First of all, in the menu bar, select Enviroment -> Clear SLD Data Cache

This will ensure that our Business System is available for selection.

1. Create a New Configuration Scenario

In the Menu Bar Select Object -> New -> Configuration Scenario

Name it as : YSOAP_TO_JDBC_SYNC

2. Assign the Bussines System

- Open the Recently Created Config. Scenario

- Right Click on Business System

- Select Assign Bussines System

- [Continue]

- [Continue]

- Scroll Down as needed and select the YBSABC Business System.

- Unselect the Create Communication Channels Automatically box.

- Click on [Finish]

Figure 13 : Selecting Business System

3. Create the communication Channels

Create the Sender SOAP Comm. Channel as shown in the figure 14.

You only need to be careful when typing the namespace and the [Outbound] Interface Name.

Fig 14: YSOAP_SENDER

Now create the Receiver JDBC Comm. Channel with the following attributes:

NAME: YJDBC_RECVR

JDBC Driver: com.microsoft.jdbc.sqlserver.SQLServerDriver

Connection: jdbc:microsoft:sqlserver://127.0.0.1:3333;DatabaseName=Northwind;

(The IP 127.0.0.1 is just a sample, replace it with the IP of your SQL Sever; Also ensure that the port that you are using is correct)

User: I'm using the almighty sa user, you might need to use a different user for your connection.

Password: The correct password for the above user.

Check [Advanced Mode]

Number of Retries... : 2

Transaction Isolation Level: serializable

Activate the checkbox [Database Auto-Commit...]

Activate the checkbox [Disconnect from Database ...]

The Figure 15 is trimmed to show only the meaningful configuration.

Fig. 15: YJDBC_RECVR

4. Create the Receiver Agreement, Sender Agreement, Interface Determination and Receiver Determination.

The following steps should be very straight forward.

Refer to the figures 16, 17, 18 & 19 if you have problems setting up the ID components.

Fig. 16: Receiver Agreement

Fig. 17: Sender Agreement

Fig. 18: Interface Determination

Fig. 19 Receiver Determination

With this, we have finished our Integration Directory Configuration.

UNIT TESTING

1. CREATE THE SQL SERVER OBJECTS

We need to create the Table EMP_DETAILS and the stored procedure getEmpDetails

To make this simple, copy and paste the source code 1, avaialble at the end of this web log, and execute it to create all the objects and populate the table in the database.

Follow the procedure described below:

- Open the SQL Server Enterprise Manager

- In the menu bar select [Tools]

- Select [Query Analyzer]

- Copy and paste the source code 1, available at the end of this web log.

- Press [F5] key or Click on the Run button.

Figure 20 shows the Table with the rows already inserted

Fig. 20: EMP_DETAILS Table

2. CREATE THE SOAP CLIENT

The simplest way to test this interface is creating a client within an HTML file and execute it with the Internet Explorer.

You don't even need a html editor, just open the good old notepad and paste the code below, save the file and name it "SOAP_TO_JDBC.html"

Ensure that you didn't save a txt file, if so, just change the extension to html.

Open the File with Internet Explorer

Ensure that you Allow Blocked Content...

You can change the EmpID, or add several at the same time.

Click on [Enviar] (Send)

Fig. 21: Soap Client

A pop-up window will appear asking for your XI user and password.

Fill in, and click [ok.]

Fig 22. Pop-up Window

The Response message will appear in the Response box, scroll to the right and you will be able to see the message body.

If any error happens, it will be shown in the Response box aswell.

Fig. 23: Response message

We have Successfully created all the XI Objects that are needed for the SOAP to JDBC Sync. Interface.

At the end of this weblog you will find the source code needed for the unit testings and a brief conectivity trobuleshoting guide.



SAP Developer Network SAP Weblogs: SAP Process Integration (PI)