Skip to Content

Dear SCN members ,

Recently I have worked on a requirement of sending mail in a tabular format using mail package .I want to share my knowledge on this as it took longer time for me to fine tune the code ,hope it might be useful for others to quickly develop interfaces with similar functionality .

Functionality: PI will receive employee pension reports in the form of IDocs from SAP ECC .PI need to send these details in mail (tabular format) to concerned parties .

I have used two mappings to achieve the above functionality

1)Mapping1 (Graphical Mapping) :To capture the employee pension report details from IDoc and put those in a temporary structure .

2)Mapping2 (XSLT Mapping) :To send the above details in tabular format to concern business parties .

Mapping1:

Mapping1.JPG

Mapping2:(Mapping1 O/P will be given as input to Mapping2)


<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:ns0="YourNameSpace">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
  <xsl:variable name="break">&lt;br&gt;</xsl:variable>
  <xsl:variable name="tableB">&lt;table BORDER="5"&gt;</xsl:variable>
  <xsl:variable name="tableE">&lt;/table&gt;</xsl:variable>
  <xsl:variable name="trB">&lt;tr&gt;</xsl:variable>
  <xsl:variable name="trE">&lt;/tr&gt;</xsl:variable>
  <xsl:variable name="tdB">&lt;td&gt;</xsl:variable>
  <xsl:variable name="tdE">&lt;/td&gt;</xsl:variable>
  <xsl:variable name="nbsp"> </xsl:variable>
  <xsl:variable name="thB">&lt;tr BGCOLOR="#CCCC99"&gt;</xsl:variable>
<xsl:template match="/">
<ns1:Mail xmlns:ns1="http://sap.com/xi/XI/Mail/30">
  <Subject>Error Report of XYZ interface</Subject>
<From>
  <xsl:value-of select="ns0:PensionErrorReports/FROM"/>
  </From>
<To>
  <xsl:value-of select="ns0:PensionErrorReports/TO"/>
  </To>
  <Content_Type>text/html</Content_Type>
<Content>
<b><xsl:text>Hi Team,</xsl:text></b>
<xsl:value-of select="$break" />
<xsl:value-of select="$break" />
<b><xsl:text>There was an error from SAP ECC while processing IDOC for the interface XYZ. Below are the details. Please take required action immediately.</xsl:text></b>
  <xsl:value-of select="$break" />
  <xsl:value-of select="$break" />
  <xsl:value-of select="$tableB" />
  <xsl:value-of select="$thB" />
  <xsl:value-of select="$tdB" />
<b>
  <xsl:text>Payroll number</xsl:text>
  </b>
  <xsl:value-of select="$nbsp" />
  <xsl:value-of select="$tdE" />
  <xsl:value-of select="$tdB" />
<b>
  <xsl:text>Name</xsl:text>
  </b>
  <xsl:value-of select="$nbsp" />
  <xsl:value-of select="$tdE" />
  <xsl:value-of select="$tdB" />
<b>
  <xsl:text>Formatted Name of Emp(or)Applicant</xsl:text>
  </b>
  <xsl:value-of select="$nbsp" />
  <xsl:value-of select="$tdE" />
  <xsl:value-of select="$tdB" />
<b>
  <xsl:text>COMMENT</xsl:text>
  </b>
  <xsl:value-of select="$nbsp" />
  <xsl:value-of select="$tdE" />
  <xsl:value-of select="$tdB" />
<b>
  <xsl:text>Date of Transfer</xsl:text>
  </b>
  <xsl:value-of select="$nbsp" />
  <xsl:value-of select="$tdE" />
  <xsl:value-of select="$trE" />
<xsl:for-each select="ns0:PensionErrorReports/Pension_ErrorReports">
  <xsl:value-of select="$trB" />
  <xsl:value-of select="$tdB" />
  <xsl:value-of select="PayrollNumber" />
  <xsl:value-of select="$nbsp" />
  <xsl:value-of select="$tdE" />
  <xsl:value-of select="$tdB" />
  <xsl:value-of select="EMPLOYEE_INITIALS" />
  <xsl:value-of select="$nbsp" />
  <xsl:value-of select="$tdE" />
  <xsl:value-of select="$tdB" />
  <xsl:value-of select="EDIT_NAME" />
  <xsl:value-of select="$nbsp" />
  <xsl:value-of select="$tdE" />
  <xsl:value-of select="$tdB" />
  <xsl:value-of select="COMMENT" />
  <xsl:value-of select="$nbsp" />
  <xsl:value-of select="$tdE" />
  <xsl:value-of select="$tdB" />
  <xsl:value-of select="DateOfTransfer" />
  <xsl:value-of select="$nbsp" />
  <xsl:value-of select="$tdE" />
  <xsl:value-of select="$trE" />
  </xsl:for-each>
  <xsl:value-of select="$tableE" />
  <xsl:value-of select="$break" />
  <xsl:value-of select="$break" />
  <xsl:value-of select="$break" />
  <xsl:value-of select="$break" />
  <b><xsl:text>Regards</xsl:text></b>
  <xsl:value-of select="$break" />
  <b><xsl:text>Appsupport Team</xsl:text></b>
  </Content>
  </ns1:Mail>
  </xsl:template>
  </xsl:stylesheet>



Zip and import the above .xsl file as a imported archive in PI.Now create the operation mapping as below

Source:IDoc

Target:Service Interface for standard Mail Package

Here I’m using From,To parameters to get From and To mail id’s dynamically.

OM.JPG

Now Create the ID objects as below. (You can also use ICO if you are using IDOC_AAE)

ID.JPG

Test Cases:


Input IDoC XML payload: PI received 2 IDocs in a package


Test1.JPGTest2.JPG



Output Mail generated :


output1.JPG



While doing this scenario a common doubt will be raised ,i.e “What if the length of the text is more ,does it gets skipped or will be populated ?”


Here is the answer:It automatically gets adjusted and populates the text .


output2.JPG



To report this post you need to login first.

6 Comments

You must be Logged on to comment or reply to a post.

Leave a Reply