<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SAP Experts: VMware Virtualization &#124; Consulting &#124; Integration - DataXstream &#187; XI/PI</title>
	<atom:link href="http://www.dataxstream.com/tag/xipi/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dataxstream.com</link>
	<description>SAP Certified Consultants</description>
	<lastBuildDate>Sat, 04 Feb 2012 05:00:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>SAP EDI EDPAR Table Walkthrough &#8211; How to Cross Reference External Customer Number to SAP Customer Number (Part 2)</title>
		<link>http://www.dataxstream.com/2012/02/sap-edi-edpar-table-walkthrough-how-to-cross-reference-external-customer-number-to-sap-customer-number/</link>
		<comments>http://www.dataxstream.com/2012/02/sap-edi-edpar-table-walkthrough-how-to-cross-reference-external-customer-number-to-sap-customer-number/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 19:36:45 +0000</pubDate>
		<dc:creator>dkoch</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP EDI Blog]]></category>
		<category><![CDATA[SAP Interface Blog]]></category>
		<category><![CDATA[SAP PI Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[ALE]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[EDPAR]]></category>
		<category><![CDATA[IDOC]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP External Cross Reference]]></category>
		<category><![CDATA[SAP Integration]]></category>
		<category><![CDATA[VOE4]]></category>
		<category><![CDATA[XI/PI]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=9941</guid>
		<description><![CDATA[Let&#8217;s say you are receiving EDI ANSI X12 850 Sales Orders from you customers that need to be uploaded into your SAP System using the ORDERS05 IDOC.  Most customers will have their own internal customer numbers that they send in their EDI transmissions to represent the Sold-To and Ship-To partners. How do you convert these [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s say you are receiving EDI ANSI X12 850 Sales Orders from you customers that need to be uploaded into your SAP System using the ORDERS05 IDOC.  Most customers will have their own internal customer numbers that they send in their EDI transmissions to represent the Sold-To and Ship-To partners.</p>
<p>How do you convert these external customer numbers into your internal SAP customer numbers?</p>
<p>Some may hard code these conversions into their EDI maps.  This approach can be very high maintenance as customers can add new ship-to locations or reorganize their internal numbers which would require changes to your maps.</p>
<p>Others may set up a cross reference table within their EDI translation table to perform the conversion.  This works well at times, but then you are at the mercy of your EDI group to update the table with any new additions or changes to existing entries.<span id="more-9941"></span></p>
<p>I find the best way to perform this conversion is within your SAP system.  Mainly because SAP has given you a standard utility to perform the conversion.  All you need to do is populate a few fields of the incoming IDOC and populate the EDPAR table using transaction VOE4 with the internal and external customer numbers.  The Function Module used to process the IDOC takes care of the rest.  SAP uses the Sender Partner Number of the IDOC Control record along with the PARVW and LIFNR elements from the E1EDKA1 segment to look up the correct entry in the EDPAR table.  In your EDI maps you would populate the PARVW element with the partner function code for the external customer number (AG = Sold-To, WE = Ship-To) and populate the LIFNR field with the external customer number received in the EDI file from that partner.  All other fields would remain blank in the E1EDKA1 segment.</p>
<p><em>Sender Information Partner Number from the Control Record:</em></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/blog11.png" rel="shadowbox[sbpost-9941];player=img;"><img class="alignnone size-full wp-image-10006" src="http://www.dataxstream.com/wp-content/uploads/blog11.png" alt="" width="645" height="568" /></a></p>
<p><em>E1EDKA1 Segment for the Sold-To Partner (AG):</em></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/blog2.png" rel="shadowbox[sbpost-9941];player=img;"><img class="alignnone size-full wp-image-9997" src="http://www.dataxstream.com/wp-content/uploads/blog2.png" alt="" width="626" height="535" /></a></p>
<p><em>E1EDKA1 Segment for the Ship-To Partner (WE):</em></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/blog3.png" rel="shadowbox[sbpost-9941];player=img;"><img class="alignnone size-full wp-image-9998" src="http://www.dataxstream.com/wp-content/uploads/blog3.png" alt="" width="638" height="535" /></a></p>
<p>Use transaction VOE4 to populate the EDPAR table.  You enter the value from the Sender Partner Number in the IDOC control record in the Customer field, the function code for the partner in the Ext. Function field.  <strong>Note: The Ext. Function field will not be the same as the Partner Function (PARVW) element of the IDOC.  (AG in IDOC = SP on VOE4, WE = SH).</strong>  The External Partner is the number received in the EDI data from the customer which is also the number in the LIFNR element of the IDOC.  Int. no is the SAP customer number associated with the External number.</p>
<p><em>VOE4 transaction with required entries for the Sold-To and Ship-To for IDOC information above:</em></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/blog41.png" rel="shadowbox[sbpost-9941];player=img;"><img class="alignnone  wp-image-10011" src="http://www.dataxstream.com/wp-content/uploads/blog41.png" alt="" width="639" height="388" /></a></p>
<p>Using the EDPAR table for customer conversion allows this function to remain in control of those responsible for customer accounts.  Users can be trained to use the VOE4 transaction to update the EDPAR table so when new ship-to or sold-to numbers need to be added they can be done in a timely matter and not rely on other departments.  It also takes this responsibility away from the EDI group so they don&#8217;t have to maintain maps or tables for this function.</p>
<p>This function can be used for other incoming IDOCs as well.  You will need to check the Function Modules used to process incoming IDOCs to determine if EDPAR can be used for customer number conversion and on which IDOC segment you would send the external number.</p>
<p>Outbound IDOCs can use either the EDPAR table or the PUMA table to cross reference external customer numbers.  Again, it depends on the IDOC type.  I will cover this topic in a separate blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2012/02/sap-edi-edpar-table-walkthrough-how-to-cross-reference-external-customer-number-to-sap-customer-number/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP EDI EDPAR Table Walkthrough &#8211; How to Cross Reference SAP Customer Number to External Customer Number (Part 1)</title>
		<link>http://www.dataxstream.com/2012/01/sap-edpar-table-sap-customer-number-cross-reference-to-external-customer-number/</link>
		<comments>http://www.dataxstream.com/2012/01/sap-edpar-table-sap-customer-number-cross-reference-to-external-customer-number/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 05:00:37 +0000</pubDate>
		<dc:creator>dkoch</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP EDI Blog]]></category>
		<category><![CDATA[SAP Functional]]></category>
		<category><![CDATA[SAP Interface Blog]]></category>
		<category><![CDATA[SAP PI Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[ALE]]></category>
		<category><![CDATA[EDI]]></category>
		<category><![CDATA[IDOC]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[PI]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP Integration]]></category>
		<category><![CDATA[SAP PI]]></category>
		<category><![CDATA[XI/PI]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=10105</guid>
		<description><![CDATA[When creating IDOCs in SAP to send Invoices to customers via EDI you will likely have to send the customers their internal partner numbers on the EDI ANSI X12 810 Invoice Document.  In almost all cases this will not be the same as the SAP partner numbers.  So how can we set up a cross [...]]]></description>
			<content:encoded><![CDATA[<p>When creating IDOCs in SAP to send Invoices to customers via EDI you will likely have to send the customers their internal partner numbers on the EDI ANSI X12 810 Invoice Document.  In almost all cases this will not be the same as the SAP partner numbers.  So how can we set up a cross reference of SAP and external partner numbers?  Well, the answer is simple because SAP has set up a utility to handle this for you.  All you need to do is populate the EDPAR table in SAP using the VOE4 transaction.  Once this is completed the IDOC_OUTPUT_INVOIC function module will read the EDPAR table when the Invoice document output is processed and populate the LIFNR element of the E1EDKA1 or E1EDPA1 segments of the INVOIC IDOC with the external partner number.  Entries in EDPAR can be set up for multiple partners including the Sold-to, Ship-to, and Bill-To numbers so that external customer number cross-references can be passed on the IDOC if needed.</p>
<p>Let&#8217;s look at how this process works.  Let&#8217;s say we have created an invoice document in SAP.  In this case, the Sold-to, Ship-to, and Bill-to partners are all SAP customer number 15.  If we want to create an INVOIC02 IDOC on which the external customer numbers are populated for all three of these partners we would have to set up three EDPAR entries as displayed on the below screen shot.  The Customer field will contain the SAP partner number (Sold-to, Ship-to, Bill-to).  The Ext. Function field will contain the Partner Function (SP = Sold-to, SH = Ship-to, BP = Bill-to).  The External Partner field will contain the external partner number that the customer is expecting on the EDI file.  And the Int. no. field will contain the SAP partner number (Same as the Customer field).</p>
<p><span id="more-10105"></span></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/blog5.png" rel="shadowbox[sbpost-10105];player=img;"><img class="alignnone size-full wp-image-10164" src="http://www.dataxstream.com/wp-content/uploads/blog5.png" alt="" width="622" height="198" /></a></p>
<p>&nbsp;</p>
<p>After we have set up the Partner Profile (WE20) for the INVOIC for this customer we can produce the output through transaction VF02 to create the IDOC.  The INVOIC02 IDOC will display the Sold-to and the Bill-to partners at the Header level in the E1EDKA1 segments, but because we could have multiple Ship-tos on an invoice the Ship-to partner(s) are located at the Item level in the E1EDPA1 segments.  In both segments, the external partner numbers will be populated in the LIFNR element.  The segments for the three partners are displayed below:</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/blog6.png" rel="shadowbox[sbpost-10105];player=img;"><img class="alignnone size-full wp-image-10165" src="http://www.dataxstream.com/wp-content/uploads/blog6.png" alt="" width="642" height="559" /></a></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/blog7.png" rel="shadowbox[sbpost-10105];player=img;"><img class="alignnone size-full wp-image-10166" src="http://www.dataxstream.com/wp-content/uploads/blog7.png" alt="" width="621" height="526" /></a></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/blog8.png" rel="shadowbox[sbpost-10105];player=img;"><img class="alignnone size-full wp-image-10167" src="http://www.dataxstream.com/wp-content/uploads/blog8.png" alt="" width="635" height="560" /></a></p>
<p>&nbsp;</p>
<p>As you have probably noticed, the Partner Functions on the IDOCs do not match the Partner Functions in the EDPAR table.  Those would translate as follows: SP in EDPAR = AG in the IDOC, SH = WE, BP = RE.  As you can see the LIFNR field is populated with the values in the External Partner field of the EDPAR table.  These values can now be used in the EDI mapping tool to send the value to the customer.</p>
<p>This is a useful tool as new partners can be added easily using the VOE4 table by a customer service representative.  It also keeps the cross reference within SAP so that the EDI group does not have to build their own functionality to convert the partner numbers and maintain it as new customers are added or locations are changed.</p>
<p>This table can be used for other partner types and other outbound IDOCs.  You would need to check the function module that processes the output to see if it uses the EDPAR table and for which partners.  Another internal SAP table that is used for partner cross reference is the PUMA table.  This is used when creating DELVRY and SHPMNT IDOCs whose function modules do not use the EDPAR utility.  The use of the PUMA table will be discussed in a separate blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2012/01/sap-edpar-table-sap-customer-number-cross-reference-to-external-customer-number/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How To: SAP PI Data Type Enhancements</title>
		<link>http://www.dataxstream.com/2011/10/how-to-sap-pi-data-type-enhancements/</link>
		<comments>http://www.dataxstream.com/2011/10/how-to-sap-pi-data-type-enhancements/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 15:15:43 +0000</pubDate>
		<dc:creator>Craig Stasila</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP Interface Blog]]></category>
		<category><![CDATA[SAP PI Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[BADI]]></category>
		<category><![CDATA[Craig Stasila]]></category>
		<category><![CDATA[Data Type Enhancement]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Message Mapping]]></category>
		<category><![CDATA[PI]]></category>
		<category><![CDATA[SAP PI]]></category>
		<category><![CDATA[XI/PI]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=5217</guid>
		<description><![CDATA[I have worked with SAP PI since it was called SAP XI (version 3.0).  SAP XI was pretty rough around the edges and was not what I would call an enterprise class integration tool.  Each successive SAP PI release and enhancement pack has steadily added functionality such that the latest version of SAP PI is [...]]]></description>
			<content:encoded><![CDATA[<p>I have worked with SAP PI since it was called SAP XI (version 3.0).  SAP XI was pretty rough around the edges and was not what I would call an enterprise class integration tool.  Each successive SAP PI release and enhancement pack has steadily added functionality such that the latest version of SAP PI is finally starting to resemble a fully functional EAI platform.</p>
<p>One such example of additional functionality is the ability to enhance delivered integration content.</p>
<p>Recently, I had to make some modifications to an integration scenario where an SAP ERP system was sending data to an external custom solution.  The good news was the SAP ERP and PI objects were built and delivered by SAP!</p>
<div id="attachment_5218" class="wp-caption alignnone" style="width: 511px"><a href="http://www.dataxstream.com/wp-content/uploads/Blog_dte00.jpg" rel="shadowbox[sbpost-5217];player=img;"><img class="size-full wp-image-5218" title="Delivered Content" src="http://www.dataxstream.com/wp-content/uploads/Blog_dte00.jpg" alt="SAP ERP Delivered Content" width="501" height="333" /></a><p class="wp-caption-text">SAP ERP Delivered Content</p></div>
<p>The bad news was that the interface, as designed, did not meet the business&#8217; need&#8230;</p>
<div id="attachment_5219" class="wp-caption alignnone" style="width: 615px"><a href="http://www.dataxstream.com/wp-content/uploads/Blog_dte01.jpg" rel="shadowbox[sbpost-5217];player=img;"><img class="size-full wp-image-5219" title="Blog_dte01" src="http://www.dataxstream.com/wp-content/uploads/Blog_dte01.jpg" alt="How to add fields to delivered content?" width="605" height="508" /></a><p class="wp-caption-text">How to add fields to delivered content?</p></div>
<p>So, the $64,000 question is, how do we add fields to delivered SAP PI content?<br />
<span id="more-5217"></span><br />
<h2>SAP PI Data Type Enhancement</h2>
<p>SAP PI data type enhancements allow developers to customize delivered SAP PI content.  Here&#8217;s a quick rundown of how it works:</p>
<h3>Step by Step SAP PI Data Type Enhancement Instructions</h3>
<ol>
<li>First, create a new data type enhancement in the SAP PI ESR:<br />
<a href="http://www.dataxstream.com/wp-content/uploads/Blog_dte02.jpg" rel="shadowbox[sbpost-5217];player=img;"><img class="alignnone size-full wp-image-5220" title="Blog_dte02" src="http://www.dataxstream.com/wp-content/uploads/Blog_dte02.jpg" alt="" width="624" height="382" /></a></li>
<li>Add the required fields to the required data elements and then save and activate your SAP PI changes.</li>
<li>The newly created data elements are now in message type:<a href="http://www.dataxstream.com/wp-content/uploads/Blog_dte04.jpg" rel="shadowbox[sbpost-5217];player=img;"><img class="alignnone size-full wp-image-5222" title="Blog_dte04" src="http://www.dataxstream.com/wp-content/uploads/Blog_dte04.jpg" alt="" width="669" height="438" /></a></li>
<li>Login to the SAP ERP system and activate the proxy changes via transaction SPROXY.  This will create/update the proxy structures that correspond to the newly created data elements in the ERP system:<a href="http://www.dataxstream.com/wp-content/uploads/Blog_dte05.jpg" rel="shadowbox[sbpost-5217];player=img;"><img class="alignnone size-full wp-image-5223" title="Blog_dte05" src="http://www.dataxstream.com/wp-content/uploads/Blog_dte05.jpg" alt="" width="439" height="456" /></a></li>
<li>Finally, create a BADI to populate the new data fields in the SAP ERP system:<br />
<a href="http://www.dataxstream.com/wp-content/uploads/Blog_dte06.jpg" rel="shadowbox[sbpost-5217];player=img;"><img class="alignnone size-full wp-image-5224" title="Blog_dte06" src="http://www.dataxstream.com/wp-content/uploads/Blog_dte06.jpg" alt="" width="639" height="246" /></a></li>
<li>Save and activate your ERP changes. Now you&#8217;re ready to rock and roll!</li>
</ol>
<p>SAP PI data type enhancements blends the stability and functionality of delivered content with the flexibility of custom development. It is definitely one of my favorite advances in the SAP PI platform.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2011/10/how-to-sap-pi-data-type-enhancements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simplify SAP PI Mapping Logic with FixValues Mapping</title>
		<link>http://www.dataxstream.com/2011/10/clean-up-sap-pi-mapping-logic-with-fixvaluemapping/</link>
		<comments>http://www.dataxstream.com/2011/10/clean-up-sap-pi-mapping-logic-with-fixvaluemapping/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 18:00:05 +0000</pubDate>
		<dc:creator>Dave Morin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP Interface Blog]]></category>
		<category><![CDATA[SAP PI Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[David Morin]]></category>
		<category><![CDATA[Message Mapping]]></category>
		<category><![CDATA[PI]]></category>
		<category><![CDATA[SAP PI]]></category>
		<category><![CDATA[XI]]></category>
		<category><![CDATA[XI/PI]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=5159</guid>
		<description><![CDATA[I was trying to think of something to write about this weekend, when I happened to stumble upon this gem: After I stopped laughing, I started to cry, because I realized that this happens all the time in SAP PI&#8211;it just looks a little different&#8230; However, most of the time complex mappings can be simplified [...]]]></description>
			<content:encoded><![CDATA[<p>I was trying to think of something to write about this weekend, when I happened to stumble upon this gem:</p>
<p><iframe src="http://player.vimeo.com/video/9981123?byline=0&amp;portrait=0" frameborder="0" width="500" height="375"></iframe></p>
<p>After I stopped laughing, I started to cry, because I realized that this happens all the time in SAP PI&#8211;it just looks a little different&#8230;</p>
<p><span id="more-5159"></span></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/needlessly-complex-mapping1.png" rel="shadowbox[sbpost-5159];player=img;"><img class="alignnone size-full wp-image-9657" title="Needlessly Complex Mapping" src="http://www.dataxstream.com/wp-content/uploads/needlessly-complex-mapping1.png" alt="" width="606" height="272" /></a></p>
<p>However, most of the time complex mappings can be simplified by using a different approach.  The mapping block FixValues is a great tool to reduce needless. So let&#8217;s expand on this example.</p>
<h2>Reducing Complexity with FixValues Mapping Block</h2>
<p>Let&#8217;s say I am developing an interface between a database with information about goods/materials  and a file for system that needs the database data in an easy to read format. To help visualize here is some pseudo-XML of the database:</p>
<pre style="background-color: #eaeaea; color: #222;">&lt;Database&gt;
  &lt;row&gt;
    &lt;goodName /&gt;
    &lt;goodType /&gt;
    &lt;goodQuantity /&gt;
  &lt;/row&gt;
&lt;/Database&gt;</pre>
<p>And here is some pseudo-XML of the file layout:</p>
<pre style="background-color: #eaeaea; color: #222;">&lt;Report&gt;
  &lt;row&gt;
    &lt;goodNumberUOM /&gt;
    &lt;goodName /&gt;
   &lt;/row&gt;
&lt;/Report&gt;</pre>
<p>In this example, the database categorizes goods by a category code (A-Z). The type of good determines the unit of measure.  In this imaginary scenario, maybe all but 5 categories have unit of measure assignments.  Everything else has the unit of measure of furlongs.  If we were converting the values using code (ABAP, perhaps?), we could implement the logic using a case statement:</p>
<pre style="background-color: #eaeaea; color: #222;">  CASE L_CATEGORY.
    WHEN 'D'.
      L_UOM = 'pounds'.
    WHEN 'C'.
      L_OUM = 'ounce'.
    WHEN 'B'.
      L_OUM = 'kilogram'.
    WHEN 'Y'.
      L_OUM = 'Units'.
    WHEN 'Q'.
      L_OUM = 'SQFT'.
    WHEN 'J'.
      L_OUM = 'Other unit of measure'.
    WHEN 'G'.
      L_OUM = 'Quarks'.
    WHEN 'F'.
      L_OUM = 'Kilograms'.
    WHEN 'E'.
      L_OUM = 'Units'.
    WHEN OTHERS.
      L_UOM = 'Furlongs'.
  ENDCASE.</pre>
<p>But how would we accomplish the same using an SAP PI message mapping? Well, one option would be to implement the logic with nesting IF blocks, but that has the nasty side effect of producing the messy message mapping shown above.  Another option is to implement the case statement in a UDF.  But a simpler option exists.  Use a FixValues mapping block.</p>
<p>Here is the same mapping logic using a FixValues mapping block:</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/Manipulate-TRUEFALSE_1.png" rel="shadowbox[sbpost-5159];player=img;"><img title="Manipulate TRUEFALSE_1" src="http://www.dataxstream.com/wp-content/uploads/Manipulate-TRUEFALSE_1.png" alt="" width="607" height="560" /></a></p>
<p>And here are the FixValues settings: </p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/Easier-to-understand-mapping_2.png" rel="shadowbox[sbpost-5159];player=img;"><img title="Easier to understand mapping_2" src="http://www.dataxstream.com/wp-content/uploads/Easier-to-understand-mapping_2.png" alt="" width="585" height="372" /></a></p>
<p>Another favorite trick of mine is to use FixValues to evaluate TRUE and FALSE. This can be useful on filtering at the root level (e.g. a requirement to not send a record when the good is a type not relevant to the report you are generating).  In this example mapping, the row will not get generated if the type isn’t a D, A, T, X, S, R, E, or M:</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/Manipulate-TRUEFALSE_1.png" rel="shadowbox[sbpost-5159];player=img;"><img title="Manipulate TRUEFALSE_1" src="http://www.dataxstream.com/wp-content/uploads/Manipulate-TRUEFALSE_1.png" alt="" width="607" height="560" /></a></p>
<p>And here are the FixValues settings: </p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/Manipulate-TRUEFALSE_2.png" rel="shadowbox[sbpost-5159];player=img;"><img title="Manipulate TRUEFALSE_2" src="http://www.dataxstream.com/wp-content/uploads/Manipulate-TRUEFALSE_2.png" alt="" width="585" height="372" /></a></p>
<p>The FixValues mapping block is a very useful message mapping block that can be used to streamline complicated SAP PI message mappings.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2011/10/clean-up-sap-pi-mapping-logic-with-fixvaluemapping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP PI CTS+: Letting CTS+ Out of the Bag to Get Better Change Management</title>
		<link>http://www.dataxstream.com/2010/08/sap-pi-cts-plus-better-change-management/</link>
		<comments>http://www.dataxstream.com/2010/08/sap-pi-cts-plus-better-change-management/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 14:00:43 +0000</pubDate>
		<dc:creator>Dave Morin</dc:creator>
				<category><![CDATA[SAP Interface Blog]]></category>
		<category><![CDATA[SAP PI Blog]]></category>
		<category><![CDATA[SAP Project Management]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[Change Management]]></category>
		<category><![CDATA[CTS+]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[David Morin]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Message Mapping]]></category>
		<category><![CDATA[PI]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP Integration]]></category>
		<category><![CDATA[SAP NetWeaver]]></category>
		<category><![CDATA[SAP PI]]></category>
		<category><![CDATA[Transports]]></category>
		<category><![CDATA[XI]]></category>
		<category><![CDATA[XI/PI]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=5460</guid>
		<description><![CDATA[Anybody familiar with older versions of SAP XI/PI understand that transporting interface development and configuration changes is often a prickly situation.  Standard change management in PI relies on the manual packaging and processing of changes into files.  These files have many issues: No documentation A different means of transport than standard SAP transports (need some [...]]]></description>
			<content:encoded><![CDATA[<p>Anybody familiar with older versions of SAP XI/PI understand that transporting interface development and configuration changes is often a prickly situation.  Standard change management in PI relies on the manual packaging and processing of changes into files.  These files have many issues:</p>
<ul>
<li>No documentation</li>
<li>A different means of transport than standard SAP transports (need some training people used to ABAP transports)</li>
<li>Manual audit accountability (what do you do if you lose an exported PI .tpz file)</li>
</ul>
<p>To help resolve these issues, SAP released CTS+.  But, what is CTS+ and how can it help?</p>
<p><span id="more-6102"></span></p>
<h2>What is CTS+?</h2>
<p>CTS (with out the plus) is stands for SAP&#8217;s <em>Change and Transport System</em>.  This is the transport capability of the SAP NetWeaver AS ABAP.   SAP has enhanced CTS with the capability to transport non-ABAP objects&#8211;hence CTS+.  Change management on SAP NetWeaver AS ABAP has been a strength of SAP Netweaver for a very long time. In SAP PI, CTS+ leverages this strength by allowing Enterprise Service Registry (ESR) development objects and Integration Directory (ID) objects on the Java stack to be exported and packaged into standard transports that reside on the ABAP stack.</p>
<h2><strong>How Can CTS+ Help?</strong></h2>
<h3><strong>Documentation</strong></h3>
<p>With CTS+ you have the ability to document your transport when you create your request. This is amazingly helpful when it’s time to go to production, as you can see what changes were imported and when they were imported. Documentation is also helpful for the Integration Directory (ID) transports, which require activation and input of values.  To get to transport organizer, export what you want to export (namespace, scenario, etc.) using CTS+ (which should be default once it is set up).  Click on create/modification of request and you will see a screen like this:</p>
<p><a href="http://beta.dataxstream.com/wp-content/uploads/CTS+-01.png" rel="shadowbox[sbpost-6102];player=img;"><img class="alignnone size-full wp-image-5729" title="CTS+ 01" src="http://beta.dataxstream.com/wp-content/uploads/CTS+-01.png" alt="" width="660" height="413" /></a></p>
<p>Here you can put in details of the transport in the description as well as configure various other parameters about the transport.</p>
<p>Additionally, if your project has transport naming standards that require RICEF ID, defect numbers, change request number, trouble ticket number, etc., you can add that information here.</p>
<h3><strong>Standardization of Transports</strong></h3>
<p>With CTS+ it is possible to configure a standard way of handling transports that is consistent with your ECC environment. This will improve the overall reliability and robustness of environment change management, and will make life a lot easier for the people responsible for handling transports.  Someone accustomed to ABAP transports in ECC but who hasn’t worked with PI can jump in and change management with CTS+ will make sense. CTS+ also allows SAP PI to be compliant with your standard SAP change management governance.</p>
<p><a href="http://beta.dataxstream.com/wp-content/uploads/CTS+-02.png" rel="shadowbox[sbpost-6102];player=img;"><img class="alignnone size-full wp-image-5730" title="CTS+ 02" src="http://beta.dataxstream.com/wp-content/uploads/CTS+-02.png" alt="" width="639" height="206" /></a></p>
<h2>For More Information</h2>
<p>CTS+ is available with AS ABAP and AS Java from SAP NetWeaver SPS 12 onwards, although you will have better results with SPS 14 or higher. The following OSS Notes will be helpful:</p>
<ul>
<li><a href="http://service.sap.com/sap/support/notes/1003674" target="_blank">1003674</a> Enhancement for non-ABAP systems in CTS</li>
<li><a href="http://service.sap.com/sap/support/notes/1145268" target="_blank">1145268</a> CTS+: Changes from NW 7.0 SP12 -&gt; NW 7.0 SP13</li>
<li><a href="http://service.sap.com/sap/support/notes/1146170" target="_blank">1146170</a> CTS+: Changes from NW 7.0 SP13 -&gt; NW 7.0 SP14</li>
</ul>
<p>In short, CTS+ is a great tool for transport management. It is totally integrated with SAP PI, it is easy to set up, and has huge advantages when it comes to documenting transports and maintaining consistency with ECC standards.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/08/sap-pi-cts-plus-better-change-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What’s in a Naming Convention? Part II</title>
		<link>http://www.dataxstream.com/2010/05/what%e2%80%99s-in-a-naming-convention-part-ii/</link>
		<comments>http://www.dataxstream.com/2010/05/what%e2%80%99s-in-a-naming-convention-part-ii/#comments</comments>
		<pubDate>Tue, 25 May 2010 13:30:29 +0000</pubDate>
		<dc:creator>Dave Morin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP Interface Blog]]></category>
		<category><![CDATA[SAP PI Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[Basis/Netweaver]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[David Morin]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[namespace]]></category>
		<category><![CDATA[NetWeaver]]></category>
		<category><![CDATA[SAP PI]]></category>
		<category><![CDATA[XI]]></category>
		<category><![CDATA[XI/PI]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=5056</guid>
		<description><![CDATA[ I would like to say that I had a great DataXstream ESR-specific naming convention, however the SAP naming convention guide for PI 7.1 does the job perfectly.  In this post I would like to point out some things that I feel most people miss, as well as some things that I think are particularly interesting.]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://www.dataxstream.com/2010/05/what’s-in-a-naming-convention/">last post</a>, I discussed naming the naming convention that DataXstream recommends for SAP PI Integration Directory (ID) objects.  I would like to say that I had a great DataXstream ESR-specific naming convention, however the SAP naming convention guide for PI 7.1 does the job perfectly. Here is the link to the  PI 7.1 naming convention guide <a href="http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/40a66d0e-fe5e-2c10-8a85-e418b59ab36a?QuickLink=index&amp;overridelayout=true">http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/40a66d0e-fe5e-2c10-8a85-e418b59ab36a?QuickLink=index&amp;overridelayout=true</a> . I would like to point out some things that I feel most people miss, as well as some things that I think are particularly interesting.</p>
<h3><strong>Object Name Prefixes</strong></h3>
<p>I have seen a lot of places use prefixes or suffixes before objects such as or dt_ or _mt. I have never really been a fan of these prefixes and suffixes, and apparently neither is the above linked naming convention guide. The reason being is that they are unnecessary. It would be difficult to confuse a message type with a data type in a real interface scenario, even if troubleshooting an unknown broken object. Plus it makes message mapping unnecessarily confusing and long since it’s not clear whether to add the prefix, i.e. MT_one_to_MT_two. Good descriptive names are usually all that you need e.g. DEBMAS_to_Customer. The only possible exception to a no-suffix-or-prefix-policy is the service interface, as sometimes it is useful to know which direction and type a service interface is. An argument for a prefix or a suffix to describe a service interface would be to assist in understanding the flow from an SAP perspective in the event that someone who didn’t develop the interface had to come behind and troubleshoot. A argument against would be the fact that it looks silly if you use it for a web service, because you have a name that doesn’t mean anything to a third party user (note operation mappings are told to omit the prefix of direction and mode in the SAP guide).</p>
<p>One interesting thing that I noticed in my investigation of PI 7.1 EHP1 is that it appears that naming conventions on PI can be validated. If the object names do not conform to a naming convention a message will appear. Ter perform this check in the ESR go to menu <em>Tools&gt;Component Check</em>.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/05/ESB-Component-Check1.jpg" rel="shadowbox[sbpost-5056];player=img;"><img class="alignnone size-full wp-image-5115" title="ESB-Component-Check" src="http://www.dataxstream.com/wp-content/uploads/2010/05/ESB-Component-Check1.jpg" alt="" width="551" height="434" /></a></p>
<p>Select &#8220;Governance&#8221; and &#8220;Interface Name Checks&#8221;:</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/05/Interface-Name-Checks1.jpg" rel="shadowbox[sbpost-5056];player=img;"><img class="alignnone size-full wp-image-5116" title="Interface Name Checks" src="http://www.dataxstream.com/wp-content/uploads/2010/05/Interface-Name-Checks1.jpg" alt="" width="598" height="494" /></a></p>
<p>If the service interface does not end with (In/Out)(SYNC/ASY) the interface check will show as an error (does not impact interface processing). I created 2 interfaces: one good and one bad to show this error.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/05/Results.jpg" rel="shadowbox[sbpost-5056];player=img;"><img class="alignnone size-full wp-image-5117" title="Results" src="http://www.dataxstream.com/wp-content/uploads/2010/05/Results.jpg" alt="" width="599" height="494" /></a></p>
<p>My suspicion is that SAP will put more in place to force consistent naming standards depending on the service interface pattern in future releases.</p>
<h3><strong>Using a software component and Namespace for each “side” of an interface</strong></h3>
<p>All objects of an interface should not be grouped in a single namespace. They should to be split among the Software Component Versions of the systems being interfaced. Otherwise when you go to configure, you will not be able to see your operational mapping (OM) in the dropdown box without having to select all in the dropdown menu. A general rule of thumb is: if it’s not easy to configure, odds are you have probably done something wrong. Another reason why an object might not appear in the dropdown menu (for example for an operations mapping on an interface mapping) would be if the installed checkbox is not clicked on the SLD. When done correctly, most interfaces should be able to be configured quickly and intuitively in the integration directory (ID) without the need to select from all SWCV from dropdown menus on the integration builder.</p>
<p>Whatever naming convention you choose to use for the ESR, the important thing to remember is that adhering to the standard makes production support and troubleshooting faster and easier.<br />
<script src="http://www.stumbleupon.com/hostedbadge.php?s=5"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/05/what%e2%80%99s-in-a-naming-convention-part-ii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Troubleshooting the Services Registry</title>
		<link>http://www.dataxstream.com/2010/02/troubleshooting-the-services-registry/</link>
		<comments>http://www.dataxstream.com/2010/02/troubleshooting-the-services-registry/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 02:07:45 +0000</pubDate>
		<dc:creator>Dave Morin</dc:creator>
				<category><![CDATA[SAP Interface Blog]]></category>
		<category><![CDATA[SAP PI Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[David Morin]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[PI]]></category>
		<category><![CDATA[SAP PI]]></category>
		<category><![CDATA[UDDI]]></category>
		<category><![CDATA[web service]]></category>
		<category><![CDATA[XI]]></category>
		<category><![CDATA[XI/PI]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=4441</guid>
		<description><![CDATA[Recently I set up the services registry for PI 7.1 EHP1 for a client of ours. Although it seemed like it would be a simple process, I ran into a 401 authorization issue and another issue where  web services were not publishing to the services registry. Looking online there are a lot of people who ran [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I set up the services registry for PI 7.1 EHP1 for a client of ours. Although it seemed like it would be a simple process, I ran into a 401 authorization issue and another issue where  web services were not publishing to the services registry. Looking online there are a lot of people who ran into the same issues as I did, so I am providing, here, the steps to perform if your services registry isn’t working.</p>
<p><span id="more-4441"></span></p>
<p>Please note that I was unable to find the wizard for setting it the Services registry in PI 7.1 EPH1, which means I did it manually.</p>
<h3><strong>Make sure everything is correct in the Services Registry Management </strong></h3>
<p>Go to the NWA (http://host:port/nwa).</p>
<p>Go to <em>SOA Management&gt; Technical Configuration&gt;Services Registry Management</em>.<br />
In theory, there is nothing to do here, however I did specify the discovery URL api parameter as the hostname of the server (no port). If you have changed some settings, on the maintenance tab you can click reinitialize, which should reset any changes you have made back to the initial state.</p>
<h3><strong>Configure the ServicesRegistrySiPort</strong></h3>
<p>Go to <em>SOA Management&gt; Application and Scenario Communication&gt; Single Service Administration</em></p>
<p>Click the Consumer Proxies tab.</p>
<p>Search for &#8220;ServicesRegistrySi&#8221;.</p>
<p>Click on the result and click the Configuration Tab and click on ServicesRegistrySiPort.</p>
<p>The service endpoint name should be ServicesRegistrySiPort.  Don’t change it.</p>
<p>Click security.</p>
<p>You have to give it an http authentication. If you don&#8217;t give the authentication, you will eventually have problems like not being able to publish to the SR, even though you may be able to access the registry.</p>
<p>Click on the user ID/ password, click details, and input your http authentication parameters.</p>
<p style="text-align: center;"><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/ServiceRegistrySI1.png" rel="shadowbox[sbpost-4441];player=img;"><img class="aligncenter size-full wp-image-4455" src="http://www.dataxstream.com/wp-content/uploads/2010/02/ServiceRegistrySI1.png" alt="" width="567" height="596" /></a></p>
<h3><strong>Configure the third party UDDI (Only if not using SAP’s UDDI)</strong></h3>
<p>If you are using a non-sap UDDI, you will need to go to <em>NWA&gt;Destination Template Management</em> and create a UDDI_DESTINATION and a CLASSIFICATION_DESTINATION to point to the respective urls of your uddi. Don’t forget to click security and select User ID/Password Authentication for both destinations. Otherwise, you will get a 401 not authorized error when you try to access the services registry&#8211;similar to if you mistyped your password at ServicesRegistrySiPort.</p>
<p style="text-align: center;"><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/3rd-party-uddi.png" rel="shadowbox[sbpost-4441];player=img;"><br />
</a><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/3rd-party-uddi.png" rel="shadowbox[sbpost-4441];player=img;"></a><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/3rd-party-uddi1.png" rel="shadowbox[sbpost-4441];player=img;"><img class="aligncenter size-full wp-image-4453" src="http://www.dataxstream.com/wp-content/uploads/2010/02/3rd-party-uddi1.png" alt="" width="493" height="503" /></a></p>
<h3><strong>Security</strong></h3>
<p style="text-align: center;">Make sure that your user has  UDDI_TierN and SERVICES_REGISTRY_READ_WRITE authorizations or you will get a 401 not authorized error.  Of course. in your system you should use a technical user instead of your userid as which I did for the purposes of this blog.<a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Security-Authorizations1.png" rel="shadowbox[sbpost-4441];player=img;"><img class="aligncenter size-full  wp-image-4454" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Security-Authorizations1.png" alt="" width="557" height="441" /></a></p>
<p>Please note, I did run into an issue where it suddenly stopped working a day everything was configured. All I can say is Gremlins. I switched the user to a technical user with the authorization listed above on the ServicesRegistrySiPort as well as on the destination templates and I haven’t had a problem since.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/02/troubleshooting-the-services-registry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changed RFC Structure Not Propagating to XI/PI Runtime</title>
		<link>http://www.dataxstream.com/2009/11/changed-rfc-structure-not-propagating-to-xipi-runtime/</link>
		<comments>http://www.dataxstream.com/2009/11/changed-rfc-structure-not-propagating-to-xipi-runtime/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 15:04:14 +0000</pubDate>
		<dc:creator>Craig Stasila</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP PI Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[Craig Stasila]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[PI]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[XI]]></category>
		<category><![CDATA[XI/PI]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=3257</guid>
		<description><![CDATA[In support of an synchronous XI interface (SOAP-&#62;XI-&#62;RFC), I changed the underlying structure of one of the RFC parameters.  I appended some fields to the end of a return structure in ECC.  I re-imported the RFC meta data to the Integration Repository as always and mapped the fields accordingly.  When I executed the interface, the fields that [...]]]></description>
			<content:encoded><![CDATA[<p>In support of an synchronous XI interface (SOAP-&gt;XI-&gt;RFC), I changed the underlying structure of one of the RFC parameters.  I appended some fields to the end of a return structure in ECC.  I re-imported the RFC meta data to the Integration Repository as always and mapped the fields accordingly.  When I executed the interface, the fields that I added did NOT appear in the XML.  This is because the XI runtime cache did not have the updated metadata for the RFC.</p>
<p>To update the runtime cache (called CPA Cache), enter the following URL in your web browser <em>http://&lt;host&gt;:5&lt;sys#&gt;00/CPACache/refresh?mode=full</em>.  XI will do the rest of the work for you.  After the CPA cache is refreshed, the new RFC meta data reflects the newly added fields.</p>
<p>These other CPA Cache URLs may also be helpful:</p>
<blockquote><p><strong>CPA Cache Monitoring: </strong> http://&lt;host&gt;:5&lt;sys#&gt;00/CPACache</p>
<p><strong>Delta CPA Cache Refresh: </strong> http://&lt;host&gt;:5&lt;sys#&gt;00/CPACache/refresh?mode=delta</p>
<p><strong>Full CPA Cache Refresh: </strong> http://&lt;host&gt;:5&lt;sys#&gt;00/CPACache/refresh?mode=full</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2009/11/changed-rfc-structure-not-propagating-to-xipi-runtime/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Allow Additional Mapping Types in SAP XI/PI</title>
		<link>http://www.dataxstream.com/2009/09/allow-additional-mapping-types/</link>
		<comments>http://www.dataxstream.com/2009/09/allow-additional-mapping-types/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 13:00:06 +0000</pubDate>
		<dc:creator>Craig Stasila</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP PI Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[Craig Stasila]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[PI]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[XI]]></category>
		<category><![CDATA[XI/PI]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=2256</guid>
		<description><![CDATA[SAP PI is a powerful integration engine that allows developers a variety of methods for implementing transformation logic.  As a long-time ABAP developer, one of my favorite methods to implement transformation logic is using ABAP.  This transformation option is not enabled in SAP XI/PI out of the box.  While information regarding how to enable ABAP [...]]]></description>
			<content:encoded><![CDATA[<p>SAP PI is a powerful integration engine that allows developers a variety of methods for implementing transformation logic.  As a long-time ABAP developer, one of my favorite methods to implement transformation logic is using ABAP.  This transformation option is not enabled in SAP XI/PI out of the box.  While information regarding how to enable ABAP transformations can be found in SAP help, I have found it easier to have step-by-step instructions.</p>
<p><span id="more-2256"></span></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2009/09/01-Default-Mapping-Types.jpg" rel="shadowbox[sbpost-2256];player=img;"><img class="alignleft size-full wp-image-2257" title="01 - Default Mapping Types" src="http://www.dataxstream.com/wp-content/uploads/2009/09/01-Default-Mapping-Types.jpg" alt="01 - Default Mapping Types" width="342" height="144" /></a>By default XI/PI allows message mappings, Java class maps, Java XSLT maps. All these mapping types execute on the Java Stack.  There are times where mapping could/should be done on ABAP stack. XI/PI allows for the ABAP stack to handle mapping, but it is not enabled by default.  My next blog posting will cover when to use a ABAP map and how to implement transformation in ABAP.</p>
<p>The graphic at left shows the default mapping types in the Interface Mapping definition of the Integration Repository.</p>
<p>The first step to enable ABAP stack mapping logic is to navigate your browser to the SAP XI/PI Administration application.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2009/09/02-XI-Administration1.jpg" rel="shadowbox[sbpost-2256];player=img;"><img class="size-full wp-image-2259 alignnone" title="02 - XI Administration" src="http://www.dataxstream.com/wp-content/uploads/2009/09/02-XI-Administration1.jpg" alt="02 - XI Administration" width="602" height="290" /></a></p>
<p>We will be modifying the Exchange Profile to allow SAP XI/PI to utilize the additional mapping types.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2009/09/03-Exchange-Profile.jpg" rel="shadowbox[sbpost-2256];player=img;"><img class="size-full wp-image-2260 alignnone" title="03 - Exchange Profile" src="http://www.dataxstream.com/wp-content/uploads/2009/09/03-Exchange-Profile.jpg" alt="03 - Exchange Profile" width="602" height="407" /></a></p>
<p>The Exchange Profile setting we want to change is com.sap.aii.repository.mapping.additionaltypes.  This setting is located via the following hierarchy: &#8220;IntegrationBuilder\IntegrationBuilder.Repository&#8221;</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2009/09/04-com.sap.aii.repository.mapping.additionaltypes.jpg" rel="shadowbox[sbpost-2256];player=img;"><img class="size-full wp-image-2261 alignnone" title="04 - com.sap.aii.repository.mapping.additionaltypes" src="http://www.dataxstream.com/wp-content/uploads/2009/09/04-com.sap.aii.repository.mapping.additionaltypes.jpg" alt="04 - com.sap.aii.repository.mapping.additionaltypes" width="626" height="421" /></a></p>
<p>Once you navigate to the correct Exchange Profile setting, enter the following value:</p>
<p><code>R3_ABAP|Abap-class;R3_XSLT|XSL (ABAP Engine)</code></p>
<p>The above string specifies that, in addition to the standard mapping types delivered by the Java stack, we will also be using ABAP code, and XSLT translations using the ABAP stack.</p>
<p>Once you have entered the data, press the save button.</p>
<p>Changes to the Exchange Profile require the Java instance to be restarted.  When appropriate, restart the Java instance.</p>
<p>Once the Java instance has been restarted, the new mapping types can be seen in the Interface Mapping definition of the Integration Repository.  Your SAP PI system is now ready to execute data transformations using the ABAP stack.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2009/09/05-ABAP-class-mapping.jpg" rel="shadowbox[sbpost-2256];player=img;"><img class="alignnone size-full wp-image-2266" title="05 - ABAP-class mapping" src="http://www.dataxstream.com/wp-content/uploads/2009/09/05-ABAP-class-mapping.jpg" alt="05 - ABAP-class mapping" width="337" height="174" /></a></p>
<p>For more information, refer to <a href="http://help.sap.com/saphelp_nw04/helpdata/en/10/5abb2d9df242f6a62e22e027a6c382/content.htm" target="_blank">SAP Help</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2009/09/allow-additional-mapping-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fun With SAP PI Message-Mapping</title>
		<link>http://www.dataxstream.com/2009/06/fun-with-message-mapping/</link>
		<comments>http://www.dataxstream.com/2009/06/fun-with-message-mapping/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 18:12:49 +0000</pubDate>
		<dc:creator>Craig Stasila</dc:creator>
				<category><![CDATA[SAP PI Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[Craig Stasila]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Message Mapping]]></category>
		<category><![CDATA[XI/PI]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=1188</guid>
		<description><![CDATA[My previous post discussed the &#8220;hidden&#8221; menu in the SAP PI message mapping tool that can only be unlocked by pressing &#60;Ctrl&#62; + &#60;Shift&#62; while right clicking in the data flow editor area.  Hands down, the best feature of this menu is the import/export functionality.  I have no idea why the SAP developers buried such [...]]]></description>
			<content:encoded><![CDATA[<p>My previous post discussed the &#8220;hidden&#8221; menu in the SAP PI message mapping tool that can only be unlocked by pressing &lt;Ctrl&gt; + &lt;Shift&gt; while right clicking in the data flow editor area.  Hands down, the best feature of this menu is the import/export functionality.  I have no idea why the SAP developers buried such a useful feature in such a hard-to-find menu.  Whatever the reason, now that we know that we can import and export message mappings, we can exploit this fact to make our map-developing lives easier.</p>
<p>Most SAP PI developers have had a situation where a relatively minor change to the target message causes real havoc to the entire message mapping.  For <span>relatively</span> small maps, it may not be a big deal. For maps with complex logic, this can be a big deal requiring hours of tedious rework.  Recently, I was faced with a requirement change that required my message mapping to change correlations from 1:1 to 1:N.  Since this interface used the RFC adapter (which supports multiple messages), I was able to implement a 1:N multi-mapping message split. In the new interface design, the file adapter will process one file and pass it to the integration engine.  The integration engine will perform a multi-mapping message split to break-up the message.  The new, individual messages will be sent via one adapter engine call to the RFC adapter.  The RFC adapter will handle each message individually, calling each in a separate logical unit of work (LUW).</p>
<p>The steps below will detail how to switch a message mapping from a 1:1 correlation to a 1:N correlation <strong>without remapping anything!</strong><br />
<span id="more-1188"></span><br />
<em><strong>Note:</strong> The steps outlined below assume a moderate understanding of SAP XI/PI and gives does not give comprehensive instructions for every step.  Please post any questions to the comments section of this blog.</em></p>
<ul>
<li><strong>Step 1</strong> Before starting anything, make a safe copy of your message mapping. This will give you the ability to perform before and after comparisons and afford you some protection if something were to happen to your original mapping</li>
<li><strong>Step 2</strong> Use the hidden menu command (&lt;Ctrl&gt; + &lt;Shift&gt; + right click for those of you not paying attention) to download the current version of your message mapping.  SAP PI will save a file with the extension .mte.<a href="http://www.dataxstream.com/wp-content/uploads/2009/06/02-export.jpg" rel="shadowbox[sbpost-1188];player=img;"><img src="http://www.dataxstream.com/wp-content/uploads/2009/06/02-export.jpg" alt="" width="472" height="238" /><br />
</a>The .mte file you just exported is really just an XML file.  Opening the .mte file in Internet Explorer will yield something that looks like this<br />
<a href="http://www.dataxstream.com/wp-content/uploads/2009/06/03-mapping-xml.jpg" rel="shadowbox[sbpost-1188];player=img;"><img src="http://www.dataxstream.com/wp-content/uploads/2009/06/03-mapping-xml.jpg" alt="" width="588" height="660" /></a><br />
The entire message mapping is contained in the file, including any user-defined functions, brick layout, and test cases.  This will be <strong>very</strong> useful!</li>
<li><strong>Step 2</strong> Change the target occurrence in the message mapping. This is done on the <em>Messages</em> tab of the message mapping.<br />
<a href="http://www.dataxstream.com/wp-content/uploads/2009/06/00-messages.jpg" rel="shadowbox[sbpost-1188];player=img;"><img src="http://www.dataxstream.com/wp-content/uploads/2009/06/00-messages.jpg" alt="" width="560" height="347" /><br />
</a>Changing the occurrence on the target message <em>appears</em> to have little effect on the message mapping, until you switch back to the <em>Design</em> tab and you see this ugly message box:<br />
<img src="http://www.dataxstream.com/wp-content/uploads/2009/06/01-error-message.jpg" alt="" /><br />
<strong>Oh noes!</strong> PI added <em>&lt;Messages&gt;</em> and <em>&lt;Message1&gt;</em> tags to the source and target messages! Since the target message structure changed,  all of my hard-fought mappings are lost! Who can save me from hours of tedious remapping?<br />
Fear not, plucky mapper, in a few steps, <strong>you</strong> can save the day by  converting the entire map without remapping a thing!</li>
<li><strong>Step 3</strong> Use your favorite text editor to open the .mte mapping file.  We will use the find/replace functionality to mass change the source mappings.  You will need the services of the copy of the map you made in step 1.  To get the value to find, copy the path of the root node in the unscathed map. To get the value to replace, copy the path of the node just below the &lt;Message1&gt; node in the new map.<br />
<a href="http://www.dataxstream.com/wp-content/uploads/2009/06/04-copy-path.jpg" rel="shadowbox[sbpost-1188];player=img;"><img src="http://www.dataxstream.com/wp-content/uploads/2009/06/04-copy-path.jpg" alt="" width="328" height="107" /></a><br />
Here is the find/replace text for the example in the graphic:</p>
<p><code>Replace:<br />
/ns0:Personnel_MT<br />
with<br />
/ns0:Messages/ns0:Message1/ns1:Personnel_MT</code></li>
<li><strong>Step 4</strong> Repeat step 3 for the target message.<code>Replace:<br />
/ns1:Z_BAPI_II_KENEXA<br />
with<br />
/ns0:Messages/ns0:Message1/ns2:Z_BAPI_II_KENEXA</code></p>
<p>Save the .mte file in the text editor</li>
<li><strong>Step 5</strong> Providing you didn&#8217;t inadvertently screw something up, you should be able to import the .mte file to the Integration Builder<br />
<a style="text-decoration: none;" href="http://www.dataxstream.com/wp-content/uploads/2009/06/05-import.jpg" rel="shadowbox[sbpost-1188];player=img;"><img src="http://www.dataxstream.com/wp-content/uploads/2009/06/05-import.jpg" alt="" width="450" height="196" /></a></li>
<li><strong>Step 6</strong> Now change the occurrence on the corresponding interface mapping to match the message mapping occurrence set in step 2.  Save and activate all of your changes.</li>
<li><strong>Step 7</strong> The final step is to change the Interface Determination in the Integration Directory to utilize your new multi-mapping message split.</li>
</ul>
<p>As you can see, the ability to export/import message mappings can really save you a lot of time.  If you have any other tips regarding message mapping export/import, please share the in the comments.</p>
<p>Happy Mapping!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2009/06/fun-with-message-mapping/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

