You are on page 1of 14

Useful XSLT mapping functions in SAP XI/PI

Hello,

Recently, I have been working with a client where the Client specifically wants to develop XSLT mapping for
all the Interfaces. I am writing this document which might be helpful for those who are using XSLT mapping
for any type of transformation in SAP XI/PI. This document explains some commonly used mapping functions
which can be implemented through XSLT code.

SAP System Properties, Date and Time Function, Padding Template, Copy-of Function, Value Mapping,
Dynamic Configuration, ERD, Sender/Receiver Service

1) SAP System Properties

If the requirement is to find out the SAP system properties in mapping, then by using Graphical Mapping a
simple UDF can be created for fetching those details. If we are using XSLT, mapping needs to be enhanced
with Java Code to invoke those properties.
Write the code, compile it; copy both the files(.java and .class) and paste it in folder according to the package
created in the code.
Here, package is com.utils. So both the files (.java and .class) should go under folder Com/utils.
Below is the Java code
1. Class name
2. Calling getSystemProperty()
3. Calling getSAPSystem()
4. Calling getSAPSystemName()

Generated by Jive on 2016-09-23Z


1
Useful XSLT mapping functions in SAP XI/PI

XSLT code

1. Call the java class

First, include the .class file path in stylesheet, syntax is

xmlns: variable name =”file path”

For example in the snapshot xmlns:propertyUtil ="com.utils. PropertyUtil" here propertyUtil is used as
reference name and com.utils.PropertyUtil is file path.

2. Call the method required

Generated by Jive on 2016-09-23Z


2
Useful XSLT mapping functions in SAP XI/PI

For calling the method created in the Java code, syntax is

Reference name: method-name()

For example in the snapshot: propertyUtil:getSAPsystemName(); propertyUtil is reference name and


currentdatetime() is Method name in the Java code.

3. Assigning the called method value in the required field

2) Date Time Function

Most common requirement is to get the System date and time. For getting the current date and time in XSLT
1.0, there is no existing standard function. This can be achieved with the help of a Java code which has to be
imported into XSLT, for importing the java code into XSLT follow the below steps.

Simple java code to get the current System Date and Time.

Generated by Jive on 2016-09-23Z


3
Useful XSLT mapping functions in SAP XI/PI

- First, include the .class file path in stylesheet, syntax is


xmlns: variable name =”file path”
For example in the snapshot xmlns:com_xi_utils_DateTime="com.xi.utils.DateTime" here
com_xi_utils_DateTime is used
as reference name and com.xi.utils.DateTime is file path.
- Now for calling the method created in the Java code, syntax is
Reference name:Method-name()

For example in the snapshot: com_xi_utils_DateTime:currentdatetime(); com_xi_utils_DateTime is reference


name and
currentdatetime() is Method name in the Java code.

3) Padding Function Template

In some scenarios there might be a requirement of adding spaces or any special characters after or before
the value. This is called as Padding. In XSLT, there is no standard function available for padding. This can be
achieved by using XSLT template. Here is one template that can be called as many times as required.

Generated by Jive on 2016-09-23Z


4
Useful XSLT mapping functions in SAP XI/PI

This template is for Right Padding.

For Left padding, remove highlighted code and add this


<xsl:with-param name="padding_Var" select="concat($padding_Char,$padding_Var)"/>
For calling this template in XSLT code.

Explanation of Code:

In the code, padding template is used for the Job_Level attribute.


One local variable called Position is used to store the value of Designation which is coming from the Input.
<xsl:call-template name="template name”> is the command to call template.
As, the template name is “padding” syntax will be <xsl:call-template name="padding”>
padding_Char is used as a parameter which holds the padding character like ‘%’ in this case.
padding_Var is holding the value of local variable Position.
max_len is the maximum length up to which the specified variable has to be padded (including the length of the
variable).

Generated by Jive on 2016-09-23Z


5
Useful XSLT mapping functions in SAP XI/PI

4) copy-of Function

If there is any business requirement in which client wants the complete input xml in one field at
target side i.e., to return the input payload as an XML into a single field at the target then this can
be achieved by either XSLT mapping or Java mapping in SAP XI. If it is SAP PI 7.1 or higher, this
can be achieved in Graphical mapping by using ‘Return as Xml’ function. Below is the explanation
how to get the Input payload as an XML using copy-of function.

The <xsl:copy-of> element creates a copy of the current node, i.e., if we give the Parent node then child nodes
and attributes of the Parent node will be copied automatically.

For copying the complete Input Payload, give "*" in copy-of function and it will copy the complete Input
Payload with “Xml Tags”.

To eliminate the Tags from the Payload and copy only the data from the Payload, use <xsl:value-of
select="."/>

Below snapshot shows how to use it, for the same Input payload which I used in the copy-of function. Only the
data inside the tags will come up.

Generated by Jive on 2016-09-23Z


6
Useful XSLT mapping functions in SAP XI/PI

5) Value Mapping

Value Mappings are used to do a dynamic value lookup in PI. The advantage of using Value mapping is, it can
be maintained/modified in Production environment instead of using a transport. In this way it reduces the time
for change and does not need transport approvals.

If Graphical Mapping is used then value mapping function is available in Graphical Editor itself.
So, there might be a requirement where it is mandatory to use XSLT mapping and need to call Value Mapping.
In this case just copy the Value mapping template in the XSLT code.
Value Mapping Group is already maintained in ID, so that configuration part is not included here.

Generated by Jive on 2016-09-23Z


7
Useful XSLT mapping functions in SAP XI/PI

1. This namespace has to be included at the top for invoking the Value Mapping functionality.

xmlns:vm="com.sap.aii.mapping.value.api.XIVMService"

2. Calling the Value Mapping template for providing the input and getting the lookup output.

<xsl:call-template name="ValueMapping">
<xsl:with-param name="SenderParam" select="'3A"/>
</xsl:call-template>

SenderParam is the input parameter

3. Value Mapping template :


Providing the inputs like Sender Agency, Sender Schema, Input parameter, Receiver Agency, Receiver
Schema. It should be in
the same sequence.
<xsl:template name="ValueMapping">
<xsl:param name="SenderParam"/>
<xsl:value-of select="vm:executeMapping( 'Sender', 'Designation', $SenderParam, 'Receiver', 'Designation')"/>
</xsl:template>

Standard function is :

Generated by Jive on 2016-09-23Z


8
Useful XSLT mapping functions in SAP XI/PI

<xsl:value-of select="vm:executeMapping(<SenderAgency>,<Sender
Scheme>,InputParameter,<ReceiverAgency>,<ReceiverScheme)"/>

It can also be directly used in particular field rather than creating template.

6) Dynamic Configuration

The most frequent business requirement is to take the file name or directory path from the payload. Dynamic
Configuration is preferably used whenever there is a need to create the target directory and file name
st
dynamically. We need to write a simple XSLT function and import it in Operation Mapping as 1 mapping. Rest
of the configuration will remain same.

1. Three namespaces to be included at the top for invoking the Dynamic Configuration functionality.
xmlns:map="java:java.util.Map"
xmlns:dyn="java:com.sap.aii.mapping.api.DynamicConfiguration"
xmlns:key="java:com.sap.aii.mapping.api.DynamicConfigurationKey"

Generated by Jive on 2016-09-23Z


9
Useful XSLT mapping functions in SAP XI/PI

2. Code for Filename

In first line Filename variable is defined where input has to be given, may be from source structure or
hardcoded value.
Here the value is taken from source payload.
<xsl:variable name="Filename" select="d:MT_EmployeeData/Employee/FirstName"/>

3. Code for Directory

In first line Directory variable is defined where input has to be given, requirement may be to take a
particular value from source
structure and create the directory path or any hardcoded value. Here the value is hardcoded.
<xsl:variable name="Directory" select="'175105'"/>

It is not at all mandatory to use Step 2 and Step 3 code in sequence, Directory Code can be written
before the Filename code or
        vice–versa.

Last line code will copy and pass the whole input xml to the next mapping step.

<xsl:copy-of select="."/>

7) Enhanced Receiver Determination

Enhanced Receiver Determination is used to generate receiver name dynamically. This function is used
when we are not sure about the receiver names or want to generate receiver lists at runtime. To achieve this
functionality, a mapping needs to be done which can read the values from a Payload or from a table and this
mapping will be called in Receiver Determination under ERD section.

It is very simple to use ERD in graphical mapping and so it is in XSLT.

ESR configuration

Create DT, MT, SI for sender/Receiver and OM as required.


Here one more OM needs to be created for ERD functionality, where MT “Receivers” and SI
“ReceiverDetermination“ provided by SAP inside the Software component SAP BASIS, namespace
http://sap.com/xi/XI/System need to be used.

Generated by Jive on 2016-09-23Z


10
Useful XSLT mapping functions in SAP XI/PI

For creating XSLT, export the Source structure from Sender MT and export the structure from Receivers MT
(shown above).

1. Source structure
2. Target(Receiver) structure
3. Simple Mapping code

In the target field “Receivers/Receiver/Service”, name of the Receiver Business system/Business


component should be placed. Several conditions can be implemented to determine that or the Source field can
be mapped.
Here condition is to get all the Employee details in the Receiver Business component BC_ERD_T1 if the
source field DOB is blank, otherwise BC_ERD_T2.

Generated by Jive on 2016-09-23Z


11
Useful XSLT mapping functions in SAP XI/PI

In case, more than one receiver is required we have to add multiple Receivers in mapping.

8) Sender and Receiver Service

There might be some business requirement to find out the Sender/Receiver system name to route the
message to proper destination. From 7.x onwards, inbuilt functions to call Sender and Receiver are available in
graphical mapping. These functions are helpful to find out the sender and receiver service of messages used in
mapping.

Both the functions are available in XSLT and we have to call these functions inside the code and use their
values.
Now, the requirement is to send the correct BS name in SNDPRN. The correct value of Sender BS will be
useful at ECC side to distinguish from which BS the IDoc is coming.

Below is the snapshot of XSLT code.

1. Call “SenderService” Parameter


2. Assigning the value of SenderService parameter into a local Variable(SS)
3. Call “ReceiverService” Parameter
4. Assigning the value of ReceiverService parameter into a local Variable(RS)
5. Mapping of control records(EDI_DC40) of IDoc

Generated by Jive on 2016-09-23Z


12
Useful XSLT mapping functions in SAP XI/PI

SNDPRN – Sender Partner Number    – Sender Service Name Mapped


SNDPOR – Sender Port                   - Hardcoded to ‘SPORTNAME’
RCVPRN – Receiver Partner Number  - Receiver Service Name Mapped
RCVPOR– Receiver Port                  - Hardcoded to ‘RPORTNAME’

Similarly, more runtime properties like MessageId, Interface name, etc. can also be determined in XSLT.
XSLT code for MessageId and SenderInterface
1. Call “MessageId” Parameter
2. Assigning the value of MessageID parameter into a local Variable(MID)
3. Call “Interface” Parameter
4. Assigning the value of Interface parameter into a local Variable(SenderInterface)

Generated by Jive on 2016-09-23Z


13
Useful XSLT mapping functions in SAP XI/PI

Generated by Jive on 2016-09-23Z


14

You might also like