<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>SAP XI Tutorials | SAP XI Training | SAP PI Tutorials|SAP XI Step by Step Senarioas</title><link>http://sapxitutorials.blogspot.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SapXiTutorials" /><description>SAP XI Tutorials ,This blog will give complete infomation about Exchange Infrastructure ,SAP XI Tutorials and SAP XI Tcodes,SAP XI step by step senarios. and SAP XI interview questions . and many moreee.............</description><language>en</language><managingEditor>noreply@blogger.com (SAP XI Tutorials)</managingEditor><lastBuildDate>Thu, 26 Jan 2012 00:59:51 PST</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">254</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><feedburner:info uri="sapxitutorials" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><itunes:explicit>no</itunes:explicit><itunes:subtitle>SAP XI Tutorials ,This blog will give complete infomation about Exchange Infrastructure ,SAP XI Tutorials and SAP XI Tcodes,SAP XI step by step senarios. and SAP XI interview questions . and many moreee.............</itunes:subtitle><feedburner:browserFriendly></feedburner:browserFriendly><item><title>HTTP Client for SAP Process Integration</title><link>http://sapxitutorials.blogspot.com/2012/01/http-client-for-sap-process-integration.html</link><category>SAP PI Tools</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Thu, 26 Jan 2012 00:59:51 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-2848509697844756382</guid><description>&lt;p&gt;&lt;b&gt;Project Description&lt;/b&gt;    &lt;br /&gt;SAP Process Integration (PI) is SAP's SOA Middleware and Integration Platform.    &lt;br /&gt;This tool makes it easier for SAP PI Consultants to post messages to SAP PI.    &lt;br /&gt;Features like Saving and Loading a project are provided.    &lt;br /&gt;It's developed in .net.     &lt;br /&gt;&lt;i&gt;Screenshot&lt;/i&gt;    &lt;br /&gt;&lt;img title="MainScreen.JPG" alt="MainScreen.JPG" src="http://i3.codeplex.com/Download?ProjectName=SapPiHttpClient&amp;amp;DownloadId=67303" /&gt;&lt;/p&gt;  &lt;h5&gt;&lt;u&gt;&lt;b&gt;&lt;a href="http://sappihttpclient.codeplex.com/releases/view/26723"&gt;Download&lt;/a&gt;&lt;/b&gt;&lt;/u&gt;&lt;/h5&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-2848509697844756382?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T00:59:51.570-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>SAP PI ABAP Transaction codes</title><link>http://sapxitutorials.blogspot.com/2012/01/sap-pi-abap-transaction-codes.html</link><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Thu, 26 Jan 2012 00:45:09 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-467456620057864050</guid><description>&lt;p&gt;SAP PI is one of the core components of NetWeaver.It stands for Process Integration. Here is a list of important transaction codes used in SAP PI ABAP.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Administration Transaction codes&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SXMB_IFR: Start Enterprise Service Integration Builder &lt;/li&gt;    &lt;li&gt;SXMB_ADM: Integration Engine Administration &lt;/li&gt;    &lt;li&gt;SXI_SUPPORT: Test all Repository and Directory Objects &lt;/li&gt;    &lt;li&gt;SMQR: qRFC monitoring to display the status of QIN Scheduler and Registration. &lt;/li&gt;    &lt;li&gt;SMQ1: qRFC monitoring the Outbound Queue. &lt;/li&gt;    &lt;li&gt;SMQ2: qRFC monitoring the Inbound Queue. &lt;/li&gt;    &lt;li&gt;SLDAPICUST: Customizing API for System Landscape Directory. &lt;/li&gt;    &lt;li&gt;AL11: SAP Directories Display to check the profile parameter DIR_TRANS. &lt;/li&gt;    &lt;li&gt;SU01: User Address Maintenance &lt;/li&gt;    &lt;li&gt;SICF: HTTP Server Configuration &lt;/li&gt;    &lt;li&gt;RZ20: CCMS Monitoring &lt;/li&gt;    &lt;li&gt;AL08: Logged in user list screen. &lt;/li&gt;    &lt;li&gt;SM21: System Error Logs &lt;/li&gt;    &lt;li&gt;ST22: ABAP Runtime Errors &lt;/li&gt;    &lt;li&gt;SLDCHECK:&amp;#160;&amp;#160; Check the connection to the System Landscape Directory (SLD). &lt;/li&gt;    &lt;li&gt;SM58: tRFC error Logs &lt;/li&gt;    &lt;li&gt;SMICM: ICM Monitor &lt;/li&gt;    &lt;li&gt;STRUST: Trust Manager &lt;/li&gt;    &lt;li&gt;RZ70: SLD Administration &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Web Services Transaction codes&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SUDDIREG:&amp;#160;&amp;#160;&amp;#160; Maintaining UDDI Registry &lt;/li&gt;    &lt;li&gt;WSADMIN: Administration tasks for Web services &lt;/li&gt;    &lt;li&gt;WSCONFIG: Configuration of Web Services in the Web Service Framework &lt;/li&gt;    &lt;li&gt;SOAMANAGER: Start SOA Manager &lt;/li&gt;    &lt;li&gt;WSPUBLISH: Publish Web Services &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;IDOC transaction codes in PI&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;IDX1:&amp;#160;&amp;#160; Assign Port (RFC destination) in IDOC Adapter &lt;/li&gt;    &lt;li&gt;IDX2: IDOC Metadata administration &lt;/li&gt;    &lt;li&gt;IDX5:&amp;#160;&amp;#160; IDoc tracking like display IDOC XML Messages &lt;/li&gt;    &lt;li&gt;WE02, WE05: IDOC Display and IDOC list respectively &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Business Process Management (BPM) Tcodes&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SWF_XI_ADM_BPE: Start and Stop BPE &lt;/li&gt;    &lt;li&gt;SXMB_MONI_BPE: Monitoring tool for Business Process Engine (BPE) &lt;/li&gt;    &lt;li&gt;SWF_XI_PBUILDER: Detailed BPM Process Builder &lt;/li&gt;    &lt;li&gt;SWF_XI_CUSTOMIZING: Check Integration Process prerequisite &lt;/li&gt;    &lt;li&gt;SWF_XI_ADM_BPE_DISP:&amp;#160;&amp;#160; Display the status of BPE &lt;/li&gt;    &lt;li&gt;SWELS: Switch Event Trace On/Off &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Monitoring transactions in PI&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SMGW: Gateway Monitor &lt;/li&gt;    &lt;li&gt;SXMB_MONI: Monitoring Integration Engine &lt;/li&gt;    &lt;li&gt;SXI_MONITOR: Monitor for Processed XML Messages &lt;/li&gt;    &lt;li&gt;SXI_CACHE: PI Runtime Cache &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-467456620057864050?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T00:45:09.920-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Migration to SAP PI</title><link>http://sapxitutorials.blogspot.com/2011/12/migration-to-sap-pi.html</link><category>SAP PI Mappings</category><category>SAP PI Tut</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 10:56:51 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-4752139685223921563</guid><description>&lt;p align="justify"&gt;&lt;em&gt;Disclaimer: These are all my own views only, and do not represent that of my employer's or anybody else's&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;I am fortunate enough to get to the vicinity of a couple of migration projects, where we had been replacing some other middleware(eg. eGate , Mercator) with SAP PI. During the process, I have learned that migration requirements pose a different set of challenges than implementation requirements. During implementations, our main focus remains on getting clarity on the requirement, which generally changes, and gets refined in some form or the other, till the point of go live and beyond, and then use the middleware tool's features to best design the interfaces. Thus, best design is driven by the tool's abilities and out of box features provided. Over that custom codes are written to supplement the gaps and fulfill the requirement.&lt;/p&gt;  &lt;p align="justify"&gt;However, when we are talking about migration, the requirement is already known and functional with a different middleware tool. The present design is based on the present available tool's capabilities and best practices. These capabilities and best practices will differ from tool to tool , so, what is best designed on one tool might not be the best design for PI, thus posing frequent challenges to the migrating tool's capability. Thus an as is migration might not be the best possible way to choose, and in most cases might not be possible altogether. These technical challenges will lead to greater complexities, and might lead to a very clumsy situation unless dealt with properly from the very beginning of the project.&lt;/p&gt;  &lt;p align="justify"&gt;Thus approaching a migration project turns out to be a vital parameter for the success of the project. Below are some of the factors which should be taken into account from the Blue Printing phase.:&lt;/p&gt;  &lt;p align="justify"&gt;1.&amp;#160; It is important that a comparative study between the tools is handy.&lt;/p&gt;  &lt;p align="justify"&gt;2.&amp;#160; Study the present requirement and try to classify them (based on the visible PI design). examples might be &amp;quot;Control M&amp;quot; - Signifying interfaces which works along with the scheduler Control M; another example may be &amp;quot;External Web services&amp;quot; , denoting interfaces interacting with external Web services. Below are the few patterns /&amp;quot;pointers to define patterns&amp;quot; that I can think about now:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Synchronous / Asynchronous &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Interfaces working along with other scheduling tools. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;EDI Interfaces &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Stateful Requirements / potential ccBPM requirements &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Special Scheduling requirement &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Dependency requirements &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;High Volume interfaces &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;High Frequency&amp;#160; &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Real time requirement &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Protocol support required which are not provided by PI standard adapters &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Special security requirements, eg: involves digital certificate / sFTP requirements etc. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Publish-Subscribe pattern &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Business Critical Interfaces &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Any requirement for High availability for specific set of interfaces &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Any other patterns specific to the requirement &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Third Party systems -- in most cases 3rd party systems pose unique(specific to the 3rd party) interface challenges&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Next, carry out a high level design and feasibility study of each pattern. Incase adequate time is provided , a deeper look at the individual interfaces is worth. Try to narrow down the classifications into PI design patterns.&lt;/p&gt;  &lt;p align="justify"&gt;In the process, certain limitations of the tool is expected to crop up. There are chances that these limitation will have a certain common solution and should be studied carefully for something which is generic / at least can apply to a group of interfaces as generic-parameterizable solution. This solution might range from --a design pattern, writing custom Java or ABAP Maps/ proxies / Adapter Modules / operating system scripts , creating a map convertor etc. A cost analysis needs to be carried out to gauge the advantages / disadvantages of building the generic solutions - it is more likely that certain generic solutions will pass and will be applicable for a significant mass of the interfaces.&lt;/p&gt;  &lt;p align="justify"&gt;At this point of time, we should have some generic solutions available and some specific problems to be addressed which looks to be much simpler and less clumsy to be dealt with than where we started from. A lengthy Blue print/ requirement analysis / design phase is worth invested!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-4752139685223921563?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T10:56:51.223-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>PI 7.3 - Adapter User-Defined Message Search</title><link>http://sapxitutorials.blogspot.com/2011/12/pi-73-adapter-user-defined-message.html</link><category>SAP PI  Administration</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sun, 25 Dec 2011 10:35:49 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-7279719208631862294</guid><description>&lt;p align="justify"&gt;As all of us know one of the interesting feature enabled with PI 7.1 EHP1 dealt with User-Defined Message Search. But since (as mentioned in Note 1247043) PI monitors in NetWeaver Administrator (NWAPI) is not supported for production scenarios most of us could not use this feature any further. With PI 7.1 EHP1 Support Package 6 the user defined search could only be configured in &amp;amp; used for the integration server ABAP client. As all of must be aware of by now the PI 7.3 comes with a JAVA only installation option (AEX). So does this mean we cannot use user defined message serach with AEX. Well the good news is now the user defined message search can be configured and monitored from an AEX installation. The user defined message search has been integrated with the new configuration and monitoring tool (pimon).&lt;/p&gt;  &lt;p align="justify"&gt;In this blog I will show how to configure and monitor user defined message search for an AEX installation (PI Adapter User-Defined Message Search). This holds true for a dual stack installation as well.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Configuration:&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Navigate to PI Adapter User-Defined Message Search either via pimon-&amp;gt;Configuration and Administration from the directory start page or via NWA -&amp;gt; SOA -&amp;gt;Monitoring -&amp;gt; PI Adapter User-Defined Message Search Configuration&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251864589/Navigation.jpg" width="700" height="151" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Now click on the new button to create a filter and Provide the values for required fields along with sender and receiver components as shown below. All the values will be available via drop down (search help).&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251864589/Filter-1.jpg" width="700" height="309" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Now we need to create the search criteria for this filter (in the details section). This means we need to enter the fields we want to monitor on a given payload. You can monitor more than one field of a payload at once, only thing you need to create separate search criteria for them. You have an option of either monitoring a payload value (XPATH expression) or a field from the SOAP dynamic header. Please note the XPATH expression must yield a single value.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251864589/Searchcriteria.jpg" width="700" height="285" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;I am using the following test payload for this blog&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251864589/payload.jpg" width="360" height="108" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Now we need to provide the namespace for the prefix value we have used in our XPATH expression. The only restriction is the prefix value cannot be longer than 8 characters.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251864589/prefix.jpg" width="700" height="271" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Now if needed we can test our filter configuration by using the Test Search Criteria button.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251864589/TestSearchCriteria.jpg" width="700" height="202" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Monitoring:&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Now we can process a message which satisfies the filter criteria and navigate to the Message Monitoring section to check for the payload and the filter. In the Message Monitoring-&amp;gt;Database we can use the user defined search criteria under Advanced option to provide our filter and corresponding values. Here you can provide more than one search criteria for a payload search which you have defined in the configuration step earlier.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251864589/AddPredifnedSerachCriteria.jpg" width="655" height="500" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;You should see all the message that satisfy the filter condition.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251864589/result.jpg" width="700" height="362" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Note: &lt;/strong&gt;Now you can see a new tab has been added to the messages that satisfy a given filter with the set attribute and their corresponding values as shown below.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251864589/MessageDetails.jpg" width="700" height="383" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The user-defined search is one of the many ways to find messages in the Advanced Adapter Engine using the message monitor without the use of TREX. Optionally the user-defined search is also available for searching messages in the Integration Engine. You can configure it using transaction SXMS_LMS_CONF in a dual stack installation as well.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-7279719208631862294?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-25T10:35:49.311-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Top 5 Things to Learn at SAP TechEd 2011 about SAP NetWeaver Process Integration (PI)</title><link>http://sapxitutorials.blogspot.com/2011/08/top-5-things-to-learn-at-sap-teched.html</link><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sun, 25 Dec 2011 10:43:58 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-5120906188897093389</guid><description>&lt;p&gt;In May 2011, &lt;strong&gt;SAP NetWeaver PI 7.3&lt;/strong&gt; was made generally available after a successful ramp-up earlier this year. SAP TechEd 2011 is a good time to learn about ramp-up experience, new and enhanced features, and our plans going forward – to shape your plans and gain firsthand experience. We have compiled a comprehensive program covering SAP’s integration technology with 12 hours of hands-on sessions and more than 10 hours of lectures (all being offered at least twice in Las Vegas). You can find the full agenda and schedule on the SAP TechEd websites for &lt;a href="http://bit.ly/nQgHhk"&gt;Las Vegas&lt;/a&gt;, &lt;a href="http://bit.ly/qFs5tg"&gt;Madrid&lt;/a&gt;, and &lt;a href="http://bit.ly/obzXYO"&gt;Bangalore&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;It’s hard to pick the best sessions as this depends on your role and experience with SAP NetWeaver PI (unless you decide to simply attend all). Still, here’s a list of the top 5 things to learn at SAP TechEd 2011 with respective sessions:&lt;/p&gt;  &lt;p&gt;1. Gain firsthand experience with the latest release (our hands-on sessions – you’ll get your own Java-only PI instance running in the TechEd cloud!)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SAP NetWeaver PI - Integration Flows Deep Dive (PMC164) &lt;/li&gt;    &lt;li&gt;SAP Netweaver PI - AEX (Improvements &amp;amp; New Features) (PMC266) &lt;/li&gt;    &lt;li&gt;Build system centric processes using the combined BPM/PI offering (PMC165) &lt;/li&gt;    &lt;li&gt;Combining SAP NetWeaver BRM and SAP NetWeaver PI (PMC166) &lt;/li&gt;    &lt;li&gt;The SAP NetWeaver PI Java API (PMC360)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; 2. Learn about improvements for operating and maintaining SAP NetWeaver PI&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Monitoring Enhancements for SAP NetWeaver PI (PMC108) &lt;/li&gt;    &lt;li&gt;Near Zero Downtime Maintenance for SAP NetWeaver PI (ALM220)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;3. Prepare your upgrade to SAP NetWeaver PI 7.3&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SAP NetWeaver PI 7.3: Overview and Feedback from Ramp-up (PMC203) &lt;/li&gt;    &lt;li&gt;Moving productive landscapes to PI 7.3 single-stack (PMC300)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; 4. Get up to date on our road to an integrated stack (and other enhancements)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SAP NetWeaver PI Roadmap (PMC202) &lt;/li&gt;    &lt;li&gt;Deep Dive into what is New in SAP NetWeaver PI (PMC201) &lt;/li&gt;    &lt;li&gt;BPMN for System Integration (PMC106) &lt;/li&gt;    &lt;li&gt;Running system centric processes on SAP NetWeaver BPM and SAP NetWeaver PI (PMC204)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;5. Learn from SAP NetWeaver PI customers and partners (ASUG sessions in Las Vegas; Madrid still in planning phase)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SAP NetWeaver Process Integration 7.1 Performance, Scaling, and Security (TEC115)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Moreover, we’ll be around for pod and networking sessions. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-5120906188897093389?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-25T10:43:58.215-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Proxy Configuration for PI 7.3 Java only</title><link>http://sapxitutorials.blogspot.com/2011/08/proxy-configuration-for-pi-73-java-only.html</link><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sun, 25 Dec 2011 10:39:19 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-5686868489940960558</guid><description>&lt;p align="justify"&gt;The purpose of this document to highlight new changes and steps required to configure proxy communication between SAP PI 7.3 (Java only installation) and backend SAP systems like ECC, CRM etc.  &lt;p align="justify"&gt; PI7.3 is coming with 2 installation options- Java only installation (AEX) and Dual stack (ABAP + Java) installation. In Java only installation i.e AEX we do not have ABAP stack on PI system hence the configuration changes are required in PI as well as Backend systems to enable proxy communication between systems.  &lt;p align="justify"&gt;In case of PI7.3 dual stack implementation the proxy configuration will remain same as of PI earlier versions. &lt;h5 align="justify"&gt;Steps to be followed in PI system&lt;/h5&gt; &lt;p align="justify"&gt;1. Go to PI NWA using &lt;a href="http://%3chostname%3e:port/nwa"&gt;Http://&amp;lt;Hostname&amp;gt;:port/nwa&lt;/a&gt; &lt;p align="justify"&gt;2. Go to Configuration-&amp;gt;&lt;a&gt;JCo RFC Provider&lt;/a&gt; &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251818969/NWA-1.jpg" width="550" height="362"&gt;&lt;/p&gt; &lt;p align="justify"&gt;3. Create 2 RFC JCO providers &lt;ul&gt; &lt;li&gt; &lt;div align="justify"&gt;SAPSLDAPI_&amp;lt;PI SID&amp;gt; &lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;LCRSAPRFC_&amp;lt;PI SID&amp;gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="justify"&gt;Create SAPSLDAPI_PEX: &lt;p align="justify"&gt;Note the Application Server host and Gateway Service. &lt;p align="justify"&gt;Here Application system is used to register the program id SAPSLDAPI_PEX. &lt;p align="justify"&gt;Reason: In Dual stack we generally give PI ABAP stack details, however for Java only installation we need any ABAP stack details(in landscape) to register the Program ID. I have used for ECC application system that PI is exchanging data. &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251818969/SAPSLDAPI_SID.jpg" width="563" height="389"&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251818969/SAPSLDAPI_SID_Repository.jpg" width="563" height="500"&gt;&lt;/p&gt; &lt;p align="justify"&gt;Perform the similar steps for &lt;strong&gt;LCRSAPRFC_PEX&lt;/strong&gt; &lt;h5 align="justify"&gt;Steps to be followed in Application system&lt;/h5&gt; &lt;p align="justify"&gt; a)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Create 3 RFC destinations&amp;nbsp; (SM59) &lt;p align="justify"&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SAPSLDAPI (Application system to SLD connection) &lt;p align="justify"&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCRSAPRFC (Application system to Exchange profile connection) &lt;p align="justify"&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SAP_PROXY_ESR (Application system to ESR connection) &lt;p align="justify"&gt;b)&amp;nbsp;&amp;nbsp;&amp;nbsp; Configure SLDAPICUST and test connections through TA: SLD Check &lt;p align="justify"&gt;c)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Test SPROXY transaction &lt;p align="justify"&gt;d)&amp;nbsp;&amp;nbsp;&amp;nbsp; Configure SXMB_ADM transaction for runtime proxy message exchange&amp;nbsp; &lt;p align="justify"&gt;&lt;strong&gt;Create RFC destinations&lt;/strong&gt; &lt;p align="justify"&gt;- Create RFC destination SAPSLDAPI through SM59 of type T (Start External Program Using TCP/IP) &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251818969/SAPSLDAPIRFCDestination.jpg" width="414" height="414"&gt;&lt;/p&gt; &lt;p align="justify"&gt;The gateway Host and service are blank as in PI NWA (JCo RFC) we have registered the program ID in same application system gateway. &lt;p align="justify"&gt;Note: In dual stack generally we give SAP PI ABAP stack details, same details we used while creating JCo RFC Provider. &lt;p align="justify"&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Create RFC destination LCRSAPRFC through SM59 of type T (Start External Program Using TCP/IP) similar to RFC destination SAPSLDAPI and use program ID as LCRSAPRFC_&amp;lt;PI SID&amp;gt; &lt;p align="justify"&gt;&lt;strong&gt;Note :&lt;/strong&gt; In case we have more application system connected to PI using SPROXY than we need to create above&amp;nbsp; RFC destinations in another application system and will pass Gateway host and Gateway service as provided in JCo RFC provider.  &lt;p align="justify"&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Test both RFC destinations. &lt;p align="justify"&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Create RFC destination SAP_PROXY_ESR through SM59 of type G (HTTP Connection to External Serv) &lt;p align="justify"&gt;Target Host: PI host name &lt;p align="justify"&gt;Port: Http port (50XX00) where X X- System number &lt;p align="justify"&gt;Long Details:&amp;nbsp; with PIAPPL&amp;lt;SID&amp;gt; user authorizations &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251818969/SAP_Proxy_ESR.jpg" width="560" height="500"&gt;&lt;/p&gt; &lt;p align="justify"&gt;b)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;Configure SLDAPICUST and test connections through TA: SLDCheck&lt;/strong&gt; &lt;p align="justify"&gt;The user should have SAP_SLD_CONFIGURATOR role. &lt;p align="justify"&gt;Generally we use&amp;nbsp; SLD_CL_&amp;lt;SID&amp;gt; user &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251818969/SLDAPICUST.jpg" width="621" height="177"&gt;&lt;/p&gt; &lt;p align="justify"&gt;c)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;Test&amp;nbsp; proxy connection with ESR for transaction: SPROXY &lt;/strong&gt; &lt;p align="justify"&gt;Note: Here all the config were working but somehow I am not getting exchange profile values using RFC destination LCRSAPRFC. Hence I had to create RFC destination SAP_PROXY_ESR to make transaction SPROXY work.  &lt;p align="justify"&gt;d)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt; Configure SXMB_ADM transaction for runtime proxy message exchange&lt;/strong&gt; &lt;p align="justify"&gt;Create RFC destination &amp;lt;any name&amp;gt; of type G (HTTP Connections to External Server) &lt;p align="justify"&gt;Target Host: PI host name &lt;p align="justify"&gt;Port: Http port (50XX00) where XX- System number &lt;p align="justify"&gt;Path Prefix: /XISOAPAdapter/MessageServlet?ximessage=true &lt;p align="justify"&gt;Log on Details:&amp;nbsp; &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251818969/ForSXMB_ADM.jpg" width="600" height="500"&gt;&lt;/p&gt; &lt;p align="justify"&gt;Go to Transaction: SXMB_ADM-&amp;gt;Integration Engine configuration &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251818969/SXMB_ADM.jpg" width="429" height="273"&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251818969/SXMB_ADM2.jpg" width="700" height="253"&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;Note:&lt;/strong&gt; For dual stack we generally give ABAP stack RFC destination, since we want to use ICO object we need to connection using SOAP adapter hence the path prefix used for RFC destination is&amp;nbsp; ( /XISOAPAdapter/MessageServlet?ximessage=true)   &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-5686868489940960558?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-25T10:39:19.134-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Introduction to Process Orchestration</title><link>http://sapxitutorials.blogspot.com/2011/08/introduction-to-process-orchestration.html</link><category>SAP PI Mappings</category><category>SAP PI  Administration</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sun, 25 Dec 2011 10:36:48 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-1296366819491641598</guid><description>&lt;p align="justify"&gt;If you analyse common business practices, you will find that they are generally a series of relatively simple activities that interact with each other to accomplish a larger, more complex result. While these smaller processes are the core of day-to-day business activities, many businesses only consider the large and complex aspects of their operations to be &amp;quot;processes&amp;quot;. In truth, any chain of business activities that are carried out in order to achieve a specific goal should be considered a business process, regardless of how simple or small. Often costs are reduced, quality is increased and efficiency improved by simplifying and refining even the small processes. Keep in mind that a business process is not restricted to human interaction - it often includes interaction between various software applications as well.&lt;/p&gt;  &lt;h4 align="justify"&gt;Business Process Management&lt;/h4&gt;  &lt;p align="justify"&gt;Business Process Management (BPM) is the way in which you plan, implement, and ultimately improve the processes that run your business. BPM tools such as SAP NetWeaver BPM, help to model and enable the automation of business processes - these tools&amp;#160; offer a clear view into processes through graphical representations, in-depth analysis and testing, process tracking, and continual process improvement. The beauty and power behind BPM is the capability to deliver the right work to the right people at the right time - everything can be automated and monitored. Key Process Indicators (KPI's) can be measured and Service Level Agreements (SLA's) can be enforced with automatic escalation rules - all of this independent of the underlying applications. In other words, a good BPM tool can work seamlessly across all other enterprise applications - including on premise, web, cloud and mobile.&lt;/p&gt;  &lt;h4 align="justify"&gt;Process Integration&lt;/h4&gt;  &lt;p align="justify"&gt;While BPM focuses more on the human interaction of business processes, there are application integration tools such as SAP Process Integration (PI) that bring together various enterprise applications through a unified integration approach. These tools focus specifically on the automated communication between software applications. As an example, you could use SAP PI to facilitate the integration between Oracle Business Suite running Financials and SAP ERP running Human Resources. A well thought out integration product should never be technology or application dependent.&lt;/p&gt;  &lt;h4 align="justify"&gt;Business Rules Management&lt;/h4&gt;  &lt;p align="justify"&gt;A huge problem with most enterprise software is that very often the logical conditions for business logic (business rules) are &amp;quot;hard-coded&amp;quot;. What this means is that if the rules ever change, software developers are required to update all of the effected software components. Often complex rules are difficult to comprehend and implement - it can take days or even weeks for the business and developers to finally understand and correctly code the rules. Typically the developers understand the rules differently to what the business has tried to communicate and the change process takes a lot longer than it should. A risky but very common practice is that many business rules are only mapped out in the minds of specific business owners and very badly documented, if at all. If a key business owner leaves the company for any reason, the understanding of those rules go with him/her.&lt;/p&gt;  &lt;p align="justify"&gt;A solution to this is what we call Business Rules Management (BRM). Essentially, all business rules are stored in the business rules engine and enterprise software simply taps into these rules when required. The rules are managed centrally so that when they change, none of your software components need to be recoded. Once again it is very important that a BRM tool (such as SAP BRM) is not application dependent and that all of your software applications can tap into the rules engine and leverage its power.&lt;/p&gt;  &lt;p align="justify"&gt;A good example of a business rule is the calculation of a customer's credit limit at banks. It may sound like a simple rule, but there are many aspects taken into consideration - credit ratings, transaction history, age, level of education, current financial commitments, current income, assets and more.&lt;/p&gt;  &lt;h4 align="justify"&gt;Process Orchestration&lt;/h4&gt;  &lt;p align="justify"&gt;The orchestration of business processes can be a complex task - one has to consider human interaction, application integration, rules management, KPI measurement, SLA monitoring, continuous improvement, user experience, business involvement, exception handling, and much more.&lt;/p&gt;  &lt;p align="justify"&gt;The SAP Process Orchestration bundle includes SAP BPM, SAP PI and SAP BRM. These are enabling tools that pass process ownership on to the business and allow IT to support the technology. All of these tools are completely independent and work across any other applications - this bundle is something that even non-SAP customers should be considering.&lt;/p&gt;  &lt;p align="justify"&gt;SAP has built their BPM and BRM tools in a way that the business can design the processes and rules with graphic modelling. Once a BPM model has been designed, it is simply passed on to the developer who quickly ties up application functionality to the process. The processes and rules that the business designs are the processes and rules that are ultimately executed. No more miscommunications or misunderstandings - simple.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-1296366819491641598?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-25T10:36:48.001-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Synchronous calls with the PI SOAP Adapter</title><link>http://sapxitutorials.blogspot.com/2011/08/synchronous-calls-with-pi-soap-adapter.html</link><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sun, 25 Dec 2011 10:30:40 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-3434361144942491910</guid><description>&lt;p align="justify"&gt;I have not worked a lot with synchronous calls and modules. So I had to learn a bit about it.&lt;/p&gt;  &lt;p align="justify"&gt;In July I launched the SAP PIArchiving solution, to make it easier to archive messages in the adapter framework. It could be EDIFact or XML messages that you want to find easily and store safely.&lt;/p&gt;  &lt;p align="justify"&gt;One question I was asked was how the system worked with synchronous calls for instance for a web service. I guess that the adapter would figure it out and it was possible to make it work.&lt;/p&gt;  &lt;p align="justify"&gt;Now I finally had time to test how to put the adapter modules on a SOAP adapter, to archive the messages for both ways. It proved really easy. The only change was that the adapter module should be placed before and after the SAP standard module.&lt;/p&gt;  &lt;p align="justify"&gt;The processing sequence should just look like this.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img border="0" alt="image" src="https://weblogs.sdn.sap.com/weblogs/images/251963718/081611_1118_Synchronous1.png" width="503" height="129" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The modules can be configured independent of each other using the module key.&lt;/p&gt;  &lt;p align="justify"&gt;What seems to happen when this occurs is that the two messages are being processed.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img border="0" alt="image" src="https://weblogs.sdn.sap.com/weblogs/images/251963718/081611_1118_Synchronous2.png" width="657" height="88" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;When looking at the processing logs it is possible to see the connection. In the adapter communication logs the following information exists. There is a link to the continuing processing of a message as well as continuing from this guid. It is thereby possible to find the corresponding message.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img border="0" alt="image" src="https://weblogs.sdn.sap.com/weblogs/images/251963718/16-08-201113-10-15.jpg" width="401" height="491" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;What I like about this is how the framework works, is that the modules do need to know anything that it is a synchronous message. My archiving modules still works, which is just really nice.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-3434361144942491910?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-25T10:30:40.621-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Chem XML Message eStandards and CIDX Scenario Part III</title><link>http://sapxitutorials.blogspot.com/2011/08/chem-xml-message-estandards-and-cidx.html</link><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sun, 25 Dec 2011 10:29:01 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-7864193887675155700</guid><description>&lt;p align="justify"&gt;In my earlier blogs efforts are made to explain about CIDX standards, how to design and configure the object to support CIDX communication. &lt;p align="justify"&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/9488"&gt;Blog1&lt;/a&gt; &lt;p align="justify"&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/9538"&gt;Blog2&lt;/a&gt; &lt;p align="justify"&gt;I would like to make your experience pleasant and fruitful with CIDX communication through this blog. &lt;p align="justify"&gt;This blog covers those intricate details in regard to security, certificates through simple steps, focusing on PI 7.1 &lt;p align="justify"&gt;You have already selected CIDX adapter with Transport Protocol as “HTTPS” and Message Protocol as “RNIF 1.1” for communication. Selecting the message protocol to RNIF 1.1 means you are configuring the scenario to handle Preamble, Service Header, Service Content, Digital Signatures etc… &lt;p align="justify"&gt;We will focus on achieving HTTPS communication which is a combination of HTTP with SSL/TLS protocol to provide encrypted communication and secure identification of a network web server.  &lt;p align="justify"&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Since the CIDX adapter is available through adapter engine, you need to set your server through Java stack to receive and send secured messages. &lt;p align="justify"&gt; SSL Communications are handled by ICM (Internet Communication Manager) for both the Java and ABAP servers. You need to perform the configuration to use one of it, navigate to RZ10, select the profile &amp;lt;SYSID&amp;gt;_DVEBMGS00_&amp;lt;host&amp;gt; and configure the profile parameter. &lt;p align="justify"&gt; ssl/pse_provider&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = JAVA &lt;p align="justify"&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Restart the server to notice automatic creation of Keystore views in SAP NetWeaver Administration (NWA). &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251703493/NWA.JPG"&gt;&lt;/p&gt; &lt;p align="justify"&gt;Navigate to NWA &amp;gt;&amp;gt; Configuration Management &amp;gt;&amp;gt; Certificate and Keys. &lt;p align="justify"&gt;Identify the new Keystore View named after ICM_SSL_&amp;lt;instance ID&amp;gt; &lt;p align="justify"&gt;Create the private key in the specified keystore view using “Create” and follow the wizard. &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251703493/Keystore.JPG"&gt;&lt;/p&gt; &lt;p align="justify"&gt;Notice that “Generate CSR Request” is enabled and use it generate CSR Request. Basically this step is needed to get your certificate issued by 3&lt;sup&gt;rd&lt;/sup&gt; party Authority, to be identified as secure partner to carry out secure online transactions and conduct the business over internet. &lt;p align="justify"&gt;When you purchase the certificate that is considered as CSR Response. Select the private key that you have just created and import it as “Import CSR Response”. &lt;p align="justify"&gt;Copy these certificates into Trusted CAs and secure_ssl&amp;nbsp; keystore Views. &lt;p align="justify"&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Load the public key of your partner with entire certificate chain (Public Key, Intermediate and Root) into keystore Views “ICM_SSL_XXXX”, Trusted CAs. &lt;p align="justify"&gt;In the following screenshot, you can view Verisign as Certificate Authority and chain of certificates. &lt;p align="justify"&gt;They can be recognized as Verisign as root, Verisign Class 3 Secure Server CA – G3 as intermediate and business.partner.com as public key. &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251703493/Certificate.JPG"&gt;&lt;/p&gt; &lt;p align="justify"&gt;At times your partners provide self signed certificates, however PI supports. &lt;p align="justify"&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Choose how you want to enable your partner log into your server to come up with processing a message request. &lt;p align="justify"&gt;a) In some cases, the certificate is issued with CN = &amp;lt;user id&amp;gt;, then provide necessary authorizations to the user. &lt;p align="justify"&gt;b) In most cases, the certificate is issued after host name for eg., business.partner.com. In this case to support the certificate log in, you need to perform additional settings. &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i. Create a certificate user say PICERTUSER with adequate authorizations (One of it is ‘XI_AF_RECEIVE’). &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ii. Navigate to NWA &amp;gt;&amp;gt; Configuration Management&amp;nbsp; &amp;gt;&amp;gt; Security &amp;gt;&amp;gt; Authentication &lt;p align="justify"&gt;Go to Login module, ClientCertLoginModule. &lt;p align="justify"&gt;Edit to maintain Name as “Rule1.getUserFrom” and Value as “wholeCert”. &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251703493/Authentication.JPG"&gt;&lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iii. Navigate to NWA &amp;gt;&amp;gt; Configuration Management &amp;gt;&amp;gt; Security &amp;gt;&amp;gt; Identity Management. &lt;p align="justify"&gt;Display PICERTUSER, Modify to load the partner certificate(Only Public key). &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251703493/IdentityManagement.JPG"&gt;&lt;/p&gt; &lt;p align="justify"&gt;It basically means when message comes from remote server, certificate is authenticated and then accept to login through PICERTUSER. &lt;p align="justify"&gt;Internally the message is checked whether valid or not by comparing the certificate Authority in ICM_SSL_XXX and partner through TrustedCAs. If it exists, it passes and then next part of steps is to select the matching user with the certificate. &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; iv. As an additional optional step, you may want to restrict the processing of scenario to this user through Business component &amp;gt;&amp;gt;Assigned Users in Configuration. &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251703493/CommunicationComponent.JPG"&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Follow my previous blog 2 for configuration. &lt;p align="justify"&gt;Wait for another blog that focuses on Troubleshooting CIDX communication. &lt;p align="justify"&gt;For additional help use SAP resources  &lt;ol&gt; &lt;li&gt; &lt;div align="justify"&gt;CIDX Adapter &lt;a href="http://help.sap.com/saphelp_nwpi711/helpdata/en/90/1d17c56bb01f4382342294b9a4a308/frameset.htm"&gt;http://help.sap.com/saphelp_nwpi711/helpdata/en/90/1d17c56bb01f4382342294b9a4a308/frameset.htm&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;Maintaining the User’s Certificate Information&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="justify"&gt;&lt;a href="http://help.sap.com/saphelp_nwpi711/helpdata/en/a7/1cd08ffe25e34799cbbe1a7ecdb8ed/frameset.htm"&gt;http://help.sap.com/saphelp_nwpi711/helpdata/en/a7/1cd08ffe25e34799cbbe1a7ecdb8ed/frameset.htm&lt;/a&gt; &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. You may use diagtool provided by SAP, more details are available in note#1045019 – Web Diagtool for collecting traces. This is a very good tool that provides you the visibility on how the message is being processed.   &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-7864193887675155700?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-25T10:29:01.901-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Handling patterns and manipulating hierarchies through XSLT</title><link>http://sapxitutorials.blogspot.com/2011/08/handling-patterns-and-manipulating.html</link><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sun, 25 Dec 2011 10:24:27 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-8860703354451395081</guid><description>&lt;p align="justify"&gt;XSLT can handle complex and tricky requirements specially when copying patterns and manipulating hierarchies. I came across a tricky requirement in my project. It was an IDoc to File scenario where source IDoc xml was to be converted into a third party specific format.  &lt;p align="justify"&gt;Here we have an invoice Idoc (INVOIC.INVOIC02) which needs to be converted into a specific format. This transformation is required for a correction invoice Idoc, which means that Idoc would have even number of E1EDP01 segments in it. For n number of original E1EDP01 segments, there will be another n number of correction E1EDP01 segments.&amp;nbsp; Source structure of the idoc is as follows: &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IDOC &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EDI_DC40 &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDKxx segments &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDP01 segments (Even number, n original, n correction) &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDSxx segments  &lt;p align="justify"&gt;Third party requires the Idoc xml but in a bit different format&amp;nbsp; as explained below, Let us introduce some notations:  &lt;p align="justify"&gt;&lt;strong&gt;E1EDKxx_Original&lt;/strong&gt;&amp;nbsp; - These are E1EDKxx segments which are present in the source idoc.So lets call them the E1EDKxx_Original segments.  &lt;p align="justify"&gt;&lt;strong&gt;E1EDKxx_Changed &lt;/strong&gt; - This is modified version of source E1EDKxx segments. One of the&amp;nbsp;&amp;nbsp; segment in E1EDKxx segment would be changed.  &lt;p align="justify"&gt;&lt;strong&gt;Trailer&amp;nbsp; &lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Copy of E1EDSxx, this would be used as trailer record  &lt;p align="justify"&gt;Target structure required by third party -- &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IDOC &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EDI_DC40&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDKxx_Original&amp;nbsp; (As is original E1EDKxx). &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDP01 (item number 1, original item) &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDSxx (Trailer) &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDKxx_Changed  &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDP01 (item number 1, correction item) &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDSxx (Trailer) &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDKxx_Original&amp;nbsp; (As is original E1EDKxx) &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDP01 (item number 2, original item) &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDSxx (Trailer) &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDKxx_Changed &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDP01 (item number 2, correction item) &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDSxx (Trailer) &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; …………………………….. &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; …………………………….. &lt;p align="justify"&gt;We have a relation here between original and correction item (E1EDP01).  &lt;p align="justify"&gt;Original E1EDP01-POSEX = Correction E1EDP01-HIPOS.  &lt;p align="justify"&gt;Given the above information, we need to convert the source IDoc xml into target structure as explained above. Achieving this transformation via Graphical, Java or ABAP mapping would be quite difficult. So we will be discussing XSLT transformation here. &lt;p align="justify"&gt;We would approach the target xml as mentioned below: &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loop on all E1EDP01 &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If ( Current E1EDP01-POSEX = Any of other E1EDP01-HIPOS) &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write E1EDKxx_Changed; &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write current E1EDP01;(original item) &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write trailer; &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write E1EDKxx_Original;  &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write correction E1EDP01; (Correction Item) &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write trailer; &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If. &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Endloop &lt;p align="justify"&gt;First we have to copy the mulitple E1EDKxx segments in a variable. We will do that using an XSLT function - &lt;strong&gt;starts-with(name(), 'E1EDK') &lt;/strong&gt;in a loop.  &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying all the E1EDKxx segments from the idoc, these will work as header for original E1EDP01 --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="e1edkxx_original"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:for-each select="//IDOC/*"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying the E1EDKxx segments as they are --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="starts-with(name(), 'E1EDK')"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="."/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;Note&lt;/strong&gt;: For checking every segment name inside IDOC, we need to run a loop on * (&amp;lt;xsl:for-each select="//IDOC/*"&amp;gt; ) &lt;p align="justify"&gt;Now we need E1EDKxx segment same as in the source idoc but with a change E1EDK14-ORGID = 'G2O' (where qualifier = '015'). We will store this data in another variable e1edkxx_changed.  &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Copying all the E1EDKxx segments from the idoc with a change E1EDK14-ORGID = 'G2O', these will work as header for corrected E1EDP01 --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="e1edkxx_changed"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:for-each select="//IDOC/*"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying other E1EDKxx segments as they are --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="not (starts-with(name(), 'E1EDK14') and QUALF = '015') and (starts-with(name(), 'E1EDK'))"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="."/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Changing E1EDK14-ORGID where qualifier = '015' --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="starts-with(name(), 'E1EDK14') and QUALF = '015'"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;E1EDK14&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:attribute name="SEGMENT"&amp;gt;&amp;lt;xsl:value-of select="1"/&amp;gt;&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;QUALF&amp;gt;015&amp;lt;/QUALF&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ORGID&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="'G2O'"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ORGID&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/E1EDK14&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;/p&gt; &lt;p align="justify"&gt;We will store all the E1EDP01 segments in a variable all_e1edp01. &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying the E1EDPxx segments as they are --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="all_e1edp01"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:for-each select="//IDOC/*"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying the E1EDKxx segments as they are --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="starts-with(name(), 'E1EDP') "&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="."/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;/p&gt; &lt;p align="justify"&gt;E1EDSxx segments would be used as trailer. A variable trailer will hold all the E1EDSxx segments. &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="trailer"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Trailer Record E1EDSxx--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:for-each select="//IDOC/*"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying the E1EDSxx segments as they are --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="starts-with(name(), 'E1EDS') "&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="."/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--&amp;nbsp;&amp;nbsp;&amp;nbsp; Finishing the trailer part here--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;/p&gt; &lt;p align="justify"&gt;We now have E1EDKxx_original, E1EDKxx_changed, all_e1edp01 and trailer records ready. Other requirement remains for relating the original E1EDP01 segments and correction E1EDP01 segments. We have been given following condition for relating original&amp;nbsp; E1EDP01 segments and correction E1EDP01 segments. &lt;p align="justify"&gt;HIPOS of correction E1EDP01 segments = POSEX of original E1EDP01 segments &lt;p align="justify"&gt;This can be done using two for loops. But we will be using an XSLT &lt;strong&gt;key()&lt;/strong&gt; function. The key() function returns a node-set from the document, using the index specified by an &amp;lt;xsl:key&amp;gt; element. &lt;p align="justify"&gt;For using the key function, we first need to declare a definition of key function in the beginning of XSLT code. &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="urn:test:xi:Sales:100"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Defining key for HIPOS, HIPOS of corrected E1EDP01 = POSEX of original E1EDP01 --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:key name="E1EDPXX_HIPOS" match="E1EDP01" use="HIPOS"/&amp;gt;&lt;/p&gt; &lt;p align="justify"&gt;Declaration of key in the beginning of XSLT, informs the processor that we would be using key() function somewhere in the code.Now we just need to run a loop on POSEX of the E1EDP01 and compare the key function output if: &lt;p align="justify"&gt;E1EDP01-HIPOS from Key Function = Current E1EDP01-POSEX.  &lt;p align="justify"&gt;And then place these segments in the required format using copy-of function.  &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Forming the required structure here--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;IDOC&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="$controlRecord"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Control Record --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:for-each select="$all_e1edp01/*"&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Manupulating the E1EDPxx segments here --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Checking if the value of Posex in the current E1EDP01 segment is equal to the HIPOS of any of E1EDP01 segment&amp;nbsp; --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Assumption is that HIPOS is populated only in case of corrected E1EDP01 items and is equal to POSEX of the original E1EDP01 --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="POSEX = key('E1EDPXX_HIPOS', POSEX)/HIPOS "&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="$e1edkxx_changed"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Copying E1EDKxx Changed&amp;nbsp; --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="."/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Copying E1EDP01 segment (original)--&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="$trailer"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying E1EDSxx Segment--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="$e1edkxx_original"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Copying E1EDKxx Original--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="key('E1EDPXX_HIPOS', POSEX)"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Copying E1EDP01 segment for correction--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="$trailer"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/IDOC&amp;gt;&lt;/p&gt; &lt;p align="justify"&gt;Here is the complete code which will transform the IDoc into required format.  &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br&gt;&amp;lt;!-- This XSLT converts invoice IDoc into a required format as requested by third party.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; In case of correction invoice, Invoice IDoc would have even number of E1EDP01 (Item) segments since for each correction there will be an original E1EDP01&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; segment. Apart from this there will be standard header E1EDKxx segments and E1EDSxx segments in the INVOIC02 IDoc. &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; The E1EDKxx segments are treated as header segment for the corrected E1EDP01 segments. &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; The same E1EDKxx segments would be repeated for origin items E1EDP01 with a slight change that ORGID will be set as G2O for E1EDK14 segment where qualifier = 015.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; The original IDoc structure received from SAP ECC in case of correction invoice is :&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IDOC&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EDI_DC40&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDKxx segments &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (will be used as header for corrected E1EDP01 segment, and will be used as header (with a slight change in E1EDK14 segment) for original E1EDP01&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDPxx segments ( even number of E1EDPxx segments)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDSxx segments ( will be used as trailer record in the output)&lt;br&gt;*****************************************************************************************************************************************************************************************&lt;br&gt;Structure as required by Third Party&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IDOC&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EDI_DC40&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDKxx_changed&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDP01 (item number 1, original item) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDSxx ( trailer)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDKxx_original &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDP01 (item number 1, corrected item) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDSxx ( trailer)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDKxx_changed&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDP01 (item number 2, original item)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDSxx ( trailer) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDKxx_original&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDP01 (item number 2, corrected item) PSTYV=ZL2N&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E1EDSxx ( trailer)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ................................................&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ................................................&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Original E1EDP01 segments would be related to corrected E1EDP01 segments by E1EDP01-POSEX and E1EDP01-HIPOS.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; POSEX of original E1EDP01 = HIPOS of corrected E1EDP01. HIPOS is populated by custom coding in ECC only for correction line items.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; This XSLT does the required transformation.&lt;br&gt;--&amp;gt;&lt;br&gt;&amp;lt;xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="urn:test:xi:Sales:100"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Defining key for HIPOS, HIPOS of corrected E1EDP01 = POSEX of original E1EDP01 --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:key name="E1EDPXX_HIPOS" match="E1EDP01" use="HIPOS"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:template match="/"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying the EDI_DC40 segment --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="controlRecord" select="//IDOC/EDI_DC40"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying all the E1EDKxx segments from the idoc, these will work as header for original E1EDP01 --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="e1edkxx_original"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:for-each select="//IDOC/*"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying the E1EDKxx segments as they are --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="starts-with(name(), 'E1EDK')"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="."/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Copying all the E1EDKxx segments from the idoc with a change E1EDK14-ORGID = 'G2O', these will work as header for corrected E1EDP01 --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="e1edkxx_changed"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:for-each select="//IDOC/*"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying other E1EDKxx segments as they are --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="not (starts-with(name(), 'E1EDK14') and QUALF = '015') and (starts-with(name(), 'E1EDK'))"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="."/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Changing E1EDK14-ORGID where qualifier = '015' --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="starts-with(name(), 'E1EDK14') and QUALF = '015'"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;E1EDK14&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:attribute name="SEGMENT"&amp;gt;&amp;lt;xsl:value-of select="1"/&amp;gt;&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;QUALF&amp;gt;015&amp;lt;/QUALF&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ORGID&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="'G2O'"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ORGID&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/E1EDK14&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="trailer"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Trailer Record E1EDSxx--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:for-each select="//IDOC/*"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying the E1EDSxx segments as they are --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="starts-with(name(), 'E1EDS') "&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="."/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--&amp;nbsp;&amp;nbsp;&amp;nbsp; Finishing the trailer part here--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying the E1EDPxx segments as they are --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="all_e1edp01"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:for-each select="//IDOC/*"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying the E1EDKxx segments as they are --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="starts-with(name(), 'E1EDP') "&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="."/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Forming the required structure here--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;IDOC&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="$controlRecord"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Control Record --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:for-each select="$all_e1edp01/*"&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Manupulating the E1EDPxx segments here --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Checking if the value of Posex in the current E1EDP01 segment is equal to the HIPOS of any of E1EDP01 segment&amp;nbsp; --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Assumption is that HIPOS is populated only in case of corrected E1EDP01 items and is equal to POSEX of the original E1EDP01 --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="POSEX = key('E1EDPXX_HIPOS', POSEX)/HIPOS "&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="$e1edkxx_changed"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Copying E1EDKxx Changed&amp;nbsp; --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="."/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Copying E1EDP01 segment (original)--&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="$trailer"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Copying E1EDSxx Segment--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="$e1edkxx_original"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Copying E1EDKxx Original--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="key('E1EDPXX_HIPOS', POSEX)"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Copying E1EDP01 segment for correction--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="$trailer"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/IDOC&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:template&amp;gt;&lt;br&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;/p&gt; &lt;p align="justify"&gt;The source file in Altova &lt;p align="justify"&gt;&lt;img alt="Source IDoc data in Altova" src="https://weblogs.sdn.sap.com/weblogs/images/251931411/sourcefile.JPG" width="257" height="465"&gt;&lt;/p&gt; &lt;p align="justify"&gt;On executing XSLT, target file is generated &lt;p align="justify"&gt;&lt;img alt="Target xml data in Altova" src="https://weblogs.sdn.sap.com/weblogs/images/251931411/targetfile.JPG" width="241" height="499"&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;Important Points to Note: &lt;/strong&gt; &lt;p align="justify"&gt;1) For running a loop on IDoc data, we choose //IDoc/* since we have to copy multiple segments. &lt;p align="justify"&gt;2) Use of xslt function starts-with(name(), 'Pattern') to copy data. &lt;p align="justify"&gt;3) Copying the required segments in variables and then putting them in desired position. &lt;p align="justify"&gt;4) Using Key Function to relate two segments. Key function is quite efficient when dealing with large XSLT.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-8860703354451395081?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-25T10:24:27.351-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>A Performance Analysis between point to point Web Service call Vs Brokered Web Service call via PI</title><link>http://sapxitutorials.blogspot.com/2011/07/performance-analysis-between-point-to.html</link><category>SAP PI Mappings</category><category>SAP PI Tut</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 11:43:58 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-5726007176394097476</guid><description>&lt;p align="justify"&gt;We once had a requirement to integrate a 3rd party IVR system with SAP ECC. As a standard practice we approached the solution to be brokered , ie interfacing via SAP PI. The interfacing solution agreed upon was a synchronous webservice call. We would be exposing the web service and IVR would be consuming it. &lt;/p&gt;  &lt;p align="justify"&gt;The performance requirement we had was 3 secs. That is the request-response cycle should complete within 3 seconds. This led us to consider a statistical analysis between the following cases:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Using PI-AAE -Proxy&lt;/strong&gt; -- Here we had exposed the Webservice out of PI, and IVR would Call PI webservice. PI will call ABAP proxy on the ECC end using Advance Adapter Engine's local processing capability. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Direct ECC- RFC Webservice By-Passing PI&lt;/strong&gt; -- This case, an RFC was written on the ECC end and exposed directly out of ECC as WebService which IVR would Call.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;We tested both the scenarios using SOAP UI and below is the statistics which we got. Whatever cases crossed the SLA of 3 secs is highlighted in yellow.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="Analysis" src="https://weblogs.sdn.sap.com/weblogs/images/251717785/IVR_Analysis_1.jpg" width="479" height="500" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Summany of the analysis:&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;img alt="Summary" src="https://weblogs.sdn.sap.com/weblogs/images/251717785/IVR_Analysis_2.jpg" width="354" height="231" /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Looking at the above statistics, we find that Direct ECC calls performed better(but not significantly) than being routed through PI AAE. We tested with a small set of data, and having simplest coding, involving one select statement only.&amp;#160; However, with increase of data volume, and with further complex logics involved, this observation / ratio of response times might get changed&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-5726007176394097476?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T11:43:58.578-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Can SAP PI and Seeburger Business Integration Server (BIS) co-exist in an Integration landscape?</title><link>http://sapxitutorials.blogspot.com/2011/07/can-sap-pi-and-seeburger-business.html</link><category>SAP PI Mappings</category><category>SAP PI  Administration</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 11:42:43 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-8629818176360816731</guid><description>&lt;p align="justify"&gt;SEEBURGER Business Intelligence server (BIS) is one of the most common EDI translators in most SAP Implementation projects.&amp;#160; SAP PI is also typically available in such a landscape being extensively to support various Integration needs.&lt;/p&gt;  &lt;p align="justify"&gt;SEEBURGER BIS has distinct features to support B2B communication/Integration. A few of them are as follows&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Managed File Transfer &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Out of the Box/Standardized EDI translation mechanisms &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Support for secured protocols like AS2, SFTP required for critical and sensitive financial/Customer transactions. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Support for High Volume transactions and large message sizes. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Out of the box features for Partner/Agreement management.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;With that said, BIS has certain limitations in its native integration with SAP systems. The integration mechanisms available are IDOC and File systems.&amp;#160; SAP PI can bridge the gap to produce an efficient implementation.&lt;/p&gt;  &lt;p align="justify"&gt;The following are a few use cases for SAP PI and SEEBURGER BIS to be used together in a landscape&lt;/p&gt;  &lt;p align="justify"&gt; N&lt;strong&gt;ative communication with SAP systems&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt; In majority of SAP implementations, a common integration strategy used is to avoid creation of custom IDOC types. More so in cases where the number of source fields on the interface is not large and custom logic needs to be implemented to populate such fields.&amp;#160; ABAP Proxy using the XI adapter is an obvious choice in most cases.&amp;#160; &lt;/p&gt;  &lt;p align="justify"&gt; SEEBURGER BIS does not support a proxy like communication. In order to achieve the same a pass-through or a hop interface can be built with SAP PI passing the message to SEEBURGER BIS, without any data transformation. BIS can then transform this message into an acceptable target format and transmit it to the business partner via a secure channel. &lt;/p&gt;  &lt;p align="justify"&gt;BIS supports inbound and outbound HTTP calls. SAP PI can connect to SEEBURGER BIS via a receiver HTTP adapter. &lt;/p&gt;  &lt;p align="justify"&gt; This would reduce the development effort of an SAP system by avoiding creation of custom IDOC types. This should only be done for interfaces in which the message sizes are not too large and the additional delay in message processing due to the hop interface is acceptable. This would avoid failures in PI due to message sizes.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Transmission of data to business partners using secured protocols like AS2 or SFTP&amp;#160;&amp;#160; &lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;This is a case in which, message sizes are small and the transformations are easily achievable within SAP PI or is delivered as predefined content within SAP PI e.g. SAP ECC and Experian Integration for Credit Checks. Here the requirement is to deliver files (non-EDI) to business partners using secured mechanisms like SFTP or with encryptions not supported out of the box in SAP PI. &lt;/p&gt;  &lt;p align="justify"&gt;BIS supports an out of the box FTP server. This server has 2 nodes a Central or Internal Node and an external node on the DMZ.&amp;#160; SAP PI can generate a file onto the central BIS node. BIS can then deliver the file via secured mechanisms like SFTP to business partners. &lt;/p&gt;  &lt;p align="justify"&gt;This is a pass-through process in BIS.&lt;/p&gt;  &lt;p align="justify"&gt;These are a few patterns which I implemented in one of my implementation and was able to achieve reduced development times and additional security benefits.. The PI version used was SAP PI 7.11 and the SEEBURGER version used was SEEBURGER BIS 6.3.3&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-8629818176360816731?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T11:42:43.719-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Data Cross Reference Strategies in SAP PI</title><link>http://sapxitutorials.blogspot.com/2011/07/data-cross-reference-strategies-in-sap.html</link><category>SAP PI Mappings</category><category>SAP PI Tut</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 11:40:13 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-225242535784274576</guid><description>&lt;p align="justify"&gt;Data cross reference or value mapping is a critical component of any SAP PI Integration Project.&lt;/p&gt;  &lt;p align="justify"&gt;In very simplistic terms, the above is a technique to map data values from a source produced format to a target acceptable format. Some very common examples are country code conversions, UoM conversion etc. &lt;/p&gt;  &lt;p align="justify"&gt;In one of my implementation project, I had the following use cases.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Basic value mapping requirements –&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt; This requirement was to map basic data objects like Country Code, UoM, and Plant to Company Code and Company codes to bank accounts. The data volume for these objects was under 5000 cross references.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Master Data Cross reference –&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt; The requirement was to convert Vendor Numbers between SAP and 3rd party systems. The data volume was huge in the range of 30,000 - 50,000 records. This cross reference was not available in ECC, and the only source of the cross reference was MDM. The frequency of use for this cross reference was also high.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Master Data Cross reference SNC &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;The requirement here was to have a cross reference between an SAP Vendor/Plant to SNC business partners. All non-standard SNC interfaces would need the business partner to be populated for successful message processing. The volume for such data was high as well as the frequency.&lt;/p&gt;  &lt;p align="justify"&gt;Multiple options were weighed to determine a cross reference strategy. The driving factors were defined storage location, high performance use as well as ease of maintenance and replication. &lt;/p&gt;  &lt;p align="justify"&gt;The following were the major options which were considered&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt; Translate at source -&amp;#160; &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;The value translation can happen at the source. The converted value needs to be available at source. This occurrence of this scenario is rare. This is&amp;#160; the most optimized option as this avoids any additional overhead to message processing.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt; Lookup at source -&amp;#160;&amp;#160; &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;In case the converted value is available at source, and the source is incapable of passing transformed value as a part of the interface (mostly in case of Standard Idocs, with a strategy to minimize custom exits) another option is to lookup the value from SAP PI mapping programs.&lt;/p&gt;  &lt;p align="justify"&gt;This lookup is done via cross system RFC or SOAP lookup from the PI mapping.&lt;/p&gt;  &lt;p align="justify"&gt;It should be noted that the above could cause performance issues during effecting interface runtime, especially in cases where the frequency and runtime requirements of these interfaces are high. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt; Replicate to PI Cache (Value Mapping Replication) –&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;In this case the mapping values needs to be replicated to the PI cache from a consolidation system. PI supports out of the box features using ABAP and JAVA proxies to replicate value mapping data to PI value mapping cache from an ABAP based consolidation system. Data can be maintained in the consolidation system. &lt;/p&gt;  &lt;p align="justify"&gt;This mapping can be read from the PI mapping, via out of the box optimized functions. &lt;/p&gt;  &lt;p align="justify"&gt;The best practice on a fairly sized PI system is to have the number of records in the PI cache to be limited to less than 20,000 entries. This option was best suited for basic data objects mapping.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&amp;#160;&amp;#160; Replicate to PI ABAP Stack –&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;In case the cross reference data volume is high, the PI ABAP stack can be used to store the cross reference. &lt;/p&gt;  &lt;p align="justify"&gt;This data can be read from the mapping program via local RFC call to the PI ABAP stack. &lt;/p&gt;  &lt;p align="justify"&gt;This is case in which data is not available at source, data storage requirements are high and lack in performance due to cross system look-ups needs to be avoided.&lt;/p&gt;  &lt;p align="justify"&gt; Based on the above options the following flow chart could be defined.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img border="0" alt="image" src="https://weblogs.sdn.sap.com/weblogs/images/251962270/7-12-20117-01-39PM.png" width="461" height="387" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Based on the above chart, the scenarios were decoded in the following manner.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;· Basic value mapping requirements –&amp;#160;&amp;#160; &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;This is case in which the mapping was not available on the source. The volume of data was around 5000 records and the frequency of use was high.&amp;#160; Thus a consolidation system like SAP ECC was chosen to maintain the cross reference; this was then replicated to PI value mapping cache using the standard value mapping replication techniques.&lt;/p&gt;  &lt;p align="justify"&gt;This is resulted in high performance of frequently run interfaces. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&amp;#160; Master Data Cross reference – &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&amp;#160; This is the use case in which the data volume was high, data was not available at source and performance requirements were high. The value mapping cache was not the option to go with. The data was replicated to the ABAP Stack tables, and a local RFC look-up was done from PI mapping. &lt;/p&gt;  &lt;p align="justify"&gt;This RFC calls were more optimized than cross system RFC/SOAP look-up calls. &lt;/p&gt;  &lt;p align="justify"&gt;As the cross reference was available at MDM, a simple replication interface was built from MDM to PI (using Receiver RFC adapter) to keep the data up to date.&lt;/p&gt;  &lt;p align="justify"&gt;The PI version used here was PI 7.11.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-225242535784274576?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T11:40:13.091-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>The Code Life Cycle - Managing Custom Code?</title><link>http://sapxitutorials.blogspot.com/2011/07/code-life-cycle-managing-custom-code.html</link><category>SAP PI Mappings</category><category>SAP PI  Administration</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 11:23:42 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-6089310574874932979</guid><description>&lt;p align="justify"&gt;In majority of projects that implement SAP PI, developments that require custom adapter modules and java proxies are predominantly less in number. But there are projects in which the most of the developments are based on such custom codes. Also with the single stack concept gaining importance, these developments will gather more storm.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;How do you manage your Java code when it comes to SAP PI? &lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;I assume most of us don't really bother. We get our coding done on NWDS, compile the code locally, export the Jar or EJB, load them into the server and &lt;em&gt;Voila&lt;/em&gt;, we are done. &lt;/p&gt;  &lt;p align="justify"&gt;But as the code base increases, managing this gets tricky. PI, out of the box doesn't provide you any help either. You can edit your code in ESR but only hope for it to compile on itself. If it could, it would have been wonderful, aint it?&lt;/p&gt;  &lt;p align="justify"&gt;One of the recommended ways is to implement NWDI and have the code centrally maintained. But I personally haven't found it easy configuring NWDI and start hosting my code. Ignoramus? Mea Culpa! (Maybe SAP can indeed host a good how to guide to help us with this?)&lt;/p&gt;  &lt;p align="justify"&gt;With Eclipse integration into ESR, I believe this will open a new dimension of possibilities. Imagine code management via the IDE integrated with a check in - check out version management feature.&lt;/p&gt;  &lt;p align="justify"&gt;I hope this is what SAP is aspiring toward. In any case, I have already posted this on &lt;a href="https://cw.sdn.sap.com/cw/ideas/4739"&gt;Idea place&lt;/a&gt; and will wait to see if anyone picks this up.&lt;/p&gt;  &lt;p align="justify"&gt;Question:&lt;/p&gt;  &lt;p align="justify"&gt;How do you manage your custom Java code? Do you use NWDI extensively for SAP PI projects? Or is there any other way you are achieving this in your SAP PI projects?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-6089310574874932979?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T11:23:42.601-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Flexible Serialization in SAP PI</title><link>http://sapxitutorials.blogspot.com/2011/07/flexible-serialization-in-sap-pi.html</link><category>SAP PI Mappings</category><category>SAP PI Tut</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 11:41:43 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-6288407849153881981</guid><description>&lt;p align="justify"&gt;Let us start by defining what strict serialization is - Serialization during message processing is a feature by which messages are delivered to the target in the same sequence as generated by the source via a middleware.&lt;/p&gt;  &lt;p align="justify"&gt;The quality of service defined for the same in EOIO (Exactly Once in Order).&lt;/p&gt;  &lt;p align="justify"&gt;Serialized messages are processed in a specified queue both on the middleware and the target system. In case of a processing error on any particular message in the queue, the message queue gets blocked; all subsequent messages go on a wait state, till the error is resolved.&lt;/p&gt;  &lt;p align="justify"&gt;Some implementations have a unique requirement for Flexible serialization. In this case, there is a need of serialization of messages and in case of error the other messages can continue, staying serialized, ignoring the failed one which can be attended manually at a later point of time.&lt;/p&gt;  &lt;p align="justify"&gt;The following are the advantages of flexible serialization.&lt;/p&gt;  &lt;p align="justify"&gt;1.&amp;#160; The message processing remains serialized in majority of error-free cases.&lt;/p&gt;  &lt;p align="justify"&gt;2.&amp;#160; The message processing for an interface does not halt due to the failure in one message on the queue.&lt;/p&gt;  &lt;p align="justify"&gt;3.&amp;#160; An error notification, informs the support team of the failure and the subsequent manual action can be performed by them.&lt;/p&gt;  &lt;p align="justify"&gt;It should be noted, that Flexible Serialization is implemented only in cases where, the percentage forecast for failures in less, and manual re-conciliation is possible.&lt;/p&gt;  &lt;p align="justify"&gt;SAP PI, like most middleware systems does not support this out of the box.&amp;#160; A simple WATCHER report can be written based on QRFC APIs in PI and connected ABAP Based SAP systems to achieve the same.&amp;#160; The purpose of this watcher program would be to move the error message out of the active LUW SMQ2 to a saved LUW SMQ3 for all queues requiring Flexible serialization.&lt;/p&gt;  &lt;p align="justify"&gt;The following would be the details of the watcher operation.&lt;/p&gt;  &lt;p align="justify"&gt;1.&amp;#160; Watcher to Monitor all specified Serialized queues on SMQ2&lt;/p&gt;  &lt;p align="justify"&gt;2.&amp;#160; The Watcher looks for specific failure statues like SYSFAIL or CPIC&lt;/p&gt;  &lt;p align="justify"&gt;3.&amp;#160; Upon determination of an error the watcher checks for the message depth on SMQ2 (running/active LUW). . The business team can define the active queue depth,&amp;#160; for flexible serialization to work&lt;/p&gt;  &lt;p align="justify"&gt;4.&amp;#160; The watcher also looks at the depth on the saved queue or SMQ3. This would be important to prevent message movement if there is a generic issue on the interface, which can impact every flowing message.&lt;/p&gt;  &lt;p align="justify"&gt;5.&amp;#160; The watcher based on the above parameters would then move the message to SMQ3.&lt;/p&gt;  &lt;p align="justify"&gt;6.&amp;#160; Finally an alert notification should be send out to the respective users, specifying the movement.&lt;/p&gt;  &lt;p align="justify"&gt;The following is a selection screen.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="Selection Screen" src="https://weblogs.sdn.sap.com/weblogs/images/251962270/Sel.png" width="618" height="293" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The following is the code snippet for the same.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;lt;!--StartFragment --&amp;gt; TYPE-POOLS: salrt.   &lt;br /&gt;* Get all errored inbound queues    &lt;br /&gt;TABLES: trfcqin.    &lt;br /&gt;SELECT-OPTIONS: s_qname FOR trfcqin-qname,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; s_eqname FOR trfcqin-qname,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; s_qstate FOR trfcqin-qstate,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; s_iqname FOR trfcqin-qname.    &lt;br /&gt;PARAMETERS: p_pdf AS CHECKBOX DEFAULT 'X',    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p_qdepth TYPE int4,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p_sqdep TYPE int4.    &lt;br /&gt;DATA: v_err_qs TYPE sy-tabix,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; v_err_qss TYPE string,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; v_err_msg(200) TYPE c,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; v_msg TYPE string,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; v_trfcmess TYPE t100-text,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; v_qstate TYPE trfcqin-qstate,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; o_cont TYPE&amp;#160; REF TO if_swf_cnt_container,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; o_err TYPE REF TO cx_root,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; w_qin TYPE trfcqin,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; w_qstate TYPE trfcqstate,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; w_tid TYPE arfctid,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; t_no_pdf_cont TYPE soli_tab,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; t_qin TYPE TABLE OF trfcqin,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; t_qstate TYPE TABLE OF trfcqstate,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; v_q_deep TYPE sy-index,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ls_message TYPE zsca_string,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lt_message TYPE zttca_string,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lt_qview TYPE TABLE OF&amp;#160; trfcqview,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ls_qview LIKE LINE OF lt_qview.    &lt;br /&gt;*CONSTANTS: C_INT_ID TYPE ZOBJID VALUE 'ECC_BLOCKED_QUEUES'.    &lt;br /&gt;START-OF-SELECTION.    &lt;br /&gt;*Identify the queues    &lt;br /&gt;&amp;#160; CALL FUNCTION 'TRFC_QIN_GET_ERROR_QUEUES'    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EXPORTING    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; client&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = sy-mandt    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; with_qstate = 'X'    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TABLES    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; qtable&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = t_qin    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; qstate&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = t_qstate.    &lt;br /&gt;&amp;#160; DELETE t_qin WHERE NOT qname IN s_qname.    &lt;br /&gt;*&amp;#160; DELETE T_QIN WHERE QNAME IN S_IQNAME.    &lt;br /&gt;&amp;#160; IF NOT s_qstate[] IS INITIAL.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; LOOP AT t_qin INTO w_qin.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR: v_qstate.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL FUNCTION 'TRFC_QIN_STATE'    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; qname&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = w_qin-qname    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; qstate&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = v_qstate    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; QLOCKCNT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; qdeep&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = v_q_deep    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; QRESCNT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WQNAME&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ERRMESS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INVALID_PARAMETER&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF sy-subrc &amp;lt;&amp;gt; 0.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF&amp;#160; v_q_deep &amp;lt; p_qdepth.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DELETE t_qin.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ELSE.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHECK NOT v_qstate IS INITIAL.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHECK v_qstate NOT IN s_qstate.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ENDLOOP.    &lt;br /&gt;&amp;#160; ENDIF.    &lt;br /&gt;*&amp;#160;&amp;#160; * Move the first LUW to the saved queue    &lt;br /&gt;&amp;#160; LOOP AT t_qin INTO w_qin.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CLEAR: w_tid.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CALL FUNCTION 'TRFC_QINS_OVERVIEW'    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; qname&amp;#160; = w_qin-qname    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; client = sy-mandt    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TABLES    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; qview&amp;#160; = lt_qview.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; READ TABLE lt_qview INDEX 1 INTO ls_qview.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; IF ls_qview-qdeep &amp;lt; p_sqdep.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL FUNCTION 'TRFC_QIN_GET_FIRST_LUW'    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; qname&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = w_qin-qname    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; client&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = sy-mandt    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160; NO_READ_LOCK&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = ' '    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; tid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = w_tid    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160; QSTATE&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160; WQNAME&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; errmess&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = v_trfcmess    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160; FDATE&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160; FTIME&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160; FQCOUNT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160; SENDER_ID&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =    &lt;br /&gt;*&amp;#160;&amp;#160; TABLES    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160; QTABLE&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; invalid_parameter&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF sy-subrc &amp;lt;&amp;gt; 0.    &lt;br /&gt;* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ELSEIF w_tid IS NOT INITIAL.    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF NOT S_EQNAME[] IS INITIAL AND W_QIN-QNAME IN S_EQNAME.    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WRITE: / '*', AT 3 W_QIN-QNAME, AT 40 W_TID, AT 70 V_TRFCMESS.    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CONTINUE.    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SUBMIT rstrfcdk AND RETURN WITH tid = w_tid.    &lt;br /&gt;* Activate the QIN scheduler for this queue.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL FUNCTION 'QIWK_SCHEDULER_ACTIVATE'    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; qname = w_qin-qname.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WRITE: / w_qin-qname, AT 40 w_tid, AT 70 v_trfcmess.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160; &lt;/p&gt;  &lt;p align="justify"&gt;The above queue movement should be notified to the business user, with the help of any alerting mechanism.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-6288407849153881981?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T11:41:43.475-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Idea Place and a case for SAP PI</title><link>http://sapxitutorials.blogspot.com/2011/12/idea-place-and-case-for-sap-pi.html</link><category>SAP PI Mappings</category><category>SAP PI Tut</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 10:57:55 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-4260369434931435977</guid><description>&lt;p align="justify"&gt;Almost a year ago, I posted a blog titled '&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/19822"&gt;Contribute to better a Product? Do you have ideas for SAP PI?&lt;/a&gt;'. The objective was to get a dedicated page for Process Integration so that consultants, users and customers, if interested could post their thoughts and suggestions on improving the product.&lt;/p&gt;  &lt;p align="justify"&gt;Currently &lt;a href="https://cw.sdn.sap.com/cw/ideas/1058"&gt;Process Integration and the future&lt;/a&gt; is under review. The wait has exceeded a year now but the interest of many fellow community members in this area has not diminished. Recently we had &lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/24689"&gt;Prateek Raj Srivastava&lt;/a&gt;, open a wiki page for suggesting improvements to PI. I also met with a customer who said he has initiated a dialogue with SAP in suggesting improvements to the product. There are user groups who are focused on product improvements to PI but then it is a closed network and not all can discuss and contribute their ideas. &lt;/p&gt;  &lt;p align="justify"&gt;We need a place for ideas and the question I have is 'Is Idea place the right place for this specific need?'. I hope someone managing Idea place can answer it. I personally believe that it is since it will be open enough for consultants, customers and other stakeholders. But if I am proven wrong, then the wiki page started by Prateek will need to be publicized more so as to bring it to the attention of contributors and get the ideas flowing.&lt;/p&gt;  &lt;p align="justify"&gt;PI has matured over the years but there is still a lot that has to go into the product to make it an ideal fit for a multitude of requirements. The community is keen to contribute and I am sure SAP will be happy to listen.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-4260369434931435977?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T10:57:55.177-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Handling two different messages within mapping</title><link>http://sapxitutorials.blogspot.com/2011/06/handling-two-different-messages-within.html</link><category>sap pi tutorials</category><category>SAP PI Mappings</category><category>sap pi training</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 10:55:57 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-6575273409932818918</guid><description>&lt;p&gt; In one of our project assignments, we had a kind of strange, or a rather tricky requirement. This is was supposed to be a normal XML file to a web service scenario, but the situation was that, the source system gives an XML file, which contains customer’s complaints / acknowledgments. The file naming scheme for both complaints and acknowledgements was the same, and we had to process only those XML files that had complaints in them. There was no way to identify the type of data the files had, as both the complaints and acknowledgements had same file name, but different root tags.&lt;/p&gt;  &lt;p&gt;After a lot of research, the only solution we came up with is to have two different outbound interfaces, one for complaints, and the other for acknowledgements. Firstly, pick the file, convert it into a string using a java mapping, then use the graphical mapping to split it into complaints / acknowledgements.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Below are the steps:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;First, we have to create a dummy data type with just one element in it, as shown in the below screenshot.&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251696849/messagetype.JPG" width="460" height="221" /&gt;&lt;/p&gt;  &lt;p&gt; Then create the Message Type and Message Interface for this data type and set the direction of the message interface as Outbound.&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251696849/ServiceInterface.JPG" width="458" height="214" /&gt;&lt;/p&gt;  &lt;p&gt;This interface is going to be used as the Sender Message Interface.&lt;/p&gt;  &lt;p&gt;Then import the XSD / create the data type &amp;amp; message types for the complaint and acknowledgments. Create their message interfaces accordingly with direction as inbound.&lt;/p&gt;  &lt;p&gt;In the next step, we have written a simple java mapping program to convert the given XML input into String and import it into the “Imported Archives”. The output of this java mapping is passed to a graphical mapping, which creates the XML message for complaint / acknowledgement based on the input.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Java Mapping:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251696849/JavaMapping.JPG" /&gt;&lt;/p&gt;  &lt;p&gt;The graphical mapping is a one-to-many mapping, with the one outbound interface, and two inbound interfaces, with the occurrence of the inbound interfaces defined as “0..1”. The inbound interface is our dummy inbound message interface, and the inbound interfaces would be the Complaints and Acknowledgments interfaces.&lt;/p&gt;  &lt;p&gt; The graphical mapping takes the XML input in String format, uses a substring UDF fetch the values. &lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251696849/messagemappinglogic.JPG" width="474" height="302" /&gt;&lt;/p&gt;  &lt;p&gt;The UDF “getString” in the above screenshot takes the XML string, the index of the beginning and ending tags of the element “messagetype” as input and returns the actual value of this element called “messagetype”. If this value is “Complaint” then, the target structure “ichicr”, which is for complaint is created, else, the other structure “ichicsrack”, which is an acknowledgment.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Code for getString():&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251696849/getstring.JPG" width="466" height="260" /&gt;&lt;/p&gt;  &lt;p&gt;The same logic is used to retrieve the values of other elements, and are populated into the target element as shown in the below screenshot.&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251696849/messagemapping.JPG" width="470" height="244" /&gt;&lt;/p&gt;  &lt;p&gt;Then, create the operations mapping as shown below:&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251696849/OperationsMapping.JPG" width="472" height="188" /&gt;&lt;/p&gt;  &lt;p&gt;This mapping output returns either of Complaint / Acknowledgement messages at a time and the other message would be empty. Create the configuration scenario in the Integration Directory, with one sender and two receivers.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Result of Operations Mapping:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;1. For Complaints:&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251696849/output1.JPG" width="464" height="177" /&gt;&lt;/p&gt;  &lt;p&gt;2. For Acknowledgments:&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/251696849/output2.JPG" width="464" height="175" /&gt;&lt;/p&gt;  &lt;p&gt; Hope this blog is helpful.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-6575273409932818918?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T10:55:57.749-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Idea Place for SAP NetWeaver Process Orchestration - Process Integration</title><link>http://sapxitutorials.blogspot.com/2011/06/idea-place-for-sap-netweaver-process.html</link><category>SAP PI  Administration</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 10:55:02 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-3427130303755110966</guid><description>&lt;p align="justify"&gt;Do you have ideas and feedbacks to improve PI and BPM? Now, you can submit them and solicit opinions from others. &lt;/p&gt;  &lt;p align="justify"&gt;When working with PI and BPM, I am sure we all come across situations where we feel if there are certain features or capabilities in PI and BPM, it will improve our usage of the products. These ideas can be in areas of development, monitoring, administrations, or anything. &lt;/p&gt;  &lt;p align="justify"&gt;Now, there is a place where we can submit our ideas and feedbacks. We can also view and comment on ideas and feedbacks submitted by others...and, even vote for our favorite ones. And, it is possible we can even see our ideas actually to become part of the product. &lt;/p&gt;  &lt;p align="justify"&gt;To submit and view ideas and feedback, you can access the links below:    &lt;br /&gt;&lt;a href="https://cw.sdn.sap.com/cw/community/ideas/sap_netweaver/sap_netweaver_process_orchestration_process_integration"&gt;Idea Place for PI      &lt;br /&gt;https://cw.sdn.sap.com/cw/community/ideas/sap_netweaver/sap_netweaver_process_orchestration_process_integration &lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="https://cw.sdn.sap.com/cw/community/ideas/sap_netweaver/sap_netweaver_process_orchestration_business_process_management"&gt;Idea Place for BPM      &lt;br /&gt;https://cw.sdn.sap.com/cw/community/ideas/sap_netweaver/sap_netweaver_process_orchestration_business_process_management &lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-3427130303755110966?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T10:55:02.125-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>SCADA Integration with SAP using SAP PI – Part 3</title><link>http://sapxitutorials.blogspot.com/2011/06/scada-integration-with-sap-using-sap-pi_5758.html</link><category>SAP PI Mappings</category><category>SAP PI Tut</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 11:03:00 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-6370033671915959920</guid><description>&lt;p align="justify"&gt;&lt;strong&gt;SCADA Integration with SAP using SAP PI – Part 3 –&lt;/strong&gt;&lt;em&gt;Interface&lt;/em&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;In my previous blogs, we saw Systems Integration and how they communicate in exchanging Tag values using a testing tool. Let me discuss about the Interface with actual systems involved. I mean Sap ERP TSW, SAP PI, OPC Gateway Systems, and SCADA Servers (OPC Server). Based on the two previous blogs I hope you got an idea on systems involved. &lt;/p&gt;  &lt;p align="justify"&gt;If you look in to the Business Case, Interface was demanding communicate with Decentralised SCADA servers. They were 10 instances of SCADA Servers in the Landscape, primarily provided by INVENSYS and TELVENT. All the instances will contain same Tags and Values based on the periodic synchronization of the instances. Our requirement was to fetch the values for specific tags based on the availability of the instances. There were some primary instances which will be given priority and rest of them as redundant instances.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="IMG 3.1 Interface Technical Connectivity" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG3.1InterfaceTechnicalConnectivity.JPG" width="635" height="343" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;In ERP TSW module this Read Interface has to be executed at a scheduled time every day to get the Tag values and store it in Z Tables. These values are utilized by the module to finalise Allocations, based on which Ticket Creation, Delivery Creation and Billing Creation happens [Refer &lt;strong&gt;IMG 1.1: &lt;/strong&gt;Business Process] in my first blog of this series.&lt;/p&gt;  &lt;p align="justify"&gt;So to fetch the tag values in ERP all the Tags relevant to the SCADA server instances are stored in Z Table and used to create a proxy request for Read operation with the relevant tags. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Synchronous Communication&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;Onward Journey --&amp;gt;&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="justify"&gt;In ERP - TSW module a background program which executes every day at scheduled time sends a client proxy request containing SCADA TAG’s to SAP PI. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;In SAP PI Read Interface is executed which receives client proxy request and transforms message using operation mapping&lt;strong&gt;.&lt;/strong&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Resultant of this mapping will be mapped as an Operation – Message called &lt;strong&gt;ReadSoapIn &lt;/strong&gt;of Web Service provided by OPC GATEWAYs. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Using conditional routing in Read Interface&lt;strong&gt;, &lt;/strong&gt;SAP PI&lt;strong&gt; &lt;/strong&gt;sends to ReadSoapIn operation to available OPC GATEWAY using a SOAP request. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;In OPC GATEWAY a corresponding Web Service will receive SAP PI’s ReadSoapIn request, and sends the request to OPC SERVER in SCADA using .NET program and COM/DCOM technology.&lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Synchronous Communication&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;&amp;lt;-- Return Journey&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="justify"&gt;OPC SERVER processes the request and reads the values related to the requested TAG’s, and sends response back to OPC GATEWAY. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;OPC GATEWAY will send the response using Operation – Message &lt;strong&gt;ReadSoapOut&lt;/strong&gt; to SAP PI. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;SAP PI receives the response using ReadSoapOut Message, this message gets transformed to ERP client proxy response. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;ERP client proxy program update relevant table with TAG Values for all OPCSERVERS available. &lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p align="justify"&gt;TAG Values in table will be used for finalizing allocations, ticket creation, delivery and billing.&lt;/p&gt;  &lt;p align="justify"&gt;Now will see abstract of objects which are needed in SAP PI.&lt;/p&gt;  &lt;p align="justify"&gt;Sender and Receiver Message Structures with Mappings in PI:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="IMG 3.2 Message Mapping Request" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG3.2MessageMappingRequest.JPG" width="636" height="225" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;﻿&lt;img alt="IMG 3.3 Message Mapping Response" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG3.3MessageMappingResponse.JPG" width="635" height="296" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Receiver Determination: &lt;/p&gt;  &lt;p align="justify"&gt;In ERP a program controls the flow of Interface, to which Gateway and to which SCADA (OPC Server) request is sent. Based on the source field value the receiver OPC Gateway is determined, and Web Service specifically running for particular OPC Server will be triggered in OPC Gateway based on the request XML.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="IMG 3.4 Receiver Determination" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG3.4ReceiverDetermination.JPG" width="620" height="362" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Receiver Communication Channel:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="IMG 3.5 Communication Channel Receiver" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG3.5CommunicationChannelReceiver.JPG" width="587" height="395" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;XML - Request:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="IMG 3.6 XML Request" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG3.6XMLRequest.JPG" width="627" height="189" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt; XML – Response&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="IMG 3.7 XML Response" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG3.7XMLResponse.JPG" width="632" height="263" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;I hope this blog series helped you in understanding SCADA systems integration with SAP.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-6370033671915959920?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T11:03:00.076-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>SCADA Integration with SAP using SAP PI – Part 2</title><link>http://sapxitutorials.blogspot.com/2011/06/scada-integration-with-sap-using-sap-pi_08.html</link><category>SAP PI Mappings</category><category>SAP PI Tut</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 11:02:05 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-5052066972053829811</guid><description>&lt;p align="justify"&gt;&lt;strong&gt;SCADA Integration with SAP using SAP PI – Part 2 – &lt;em&gt;Systems Integration&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;In my previous blog, I briefly explained about the systems involved and the business case. Let me share how systems Integration happens in this part. On the high level SAP ERP system will request Tag values for particular SCADA OPC Server Instance, in response OPC Server will reply with Tag values, Quality of the Tag value, Quality of the Tag, OPC Server Status, and Time Stamp. &lt;/p&gt;  &lt;p align="justify"&gt;A deep drive in to the Systems Integration: &lt;/p&gt;  &lt;p align="justify"&gt;As SAP ERP system makes a request and gets the response, so we made this as Client Proxy communication to SAP PI. On the other hand SAP PI system is connected to OPC Gateway (Technically: OPC Client System) across the Firewall. In OPC Gateway system a standard Web Service is exposed, this will be provided by vendors who supply .NET Wrapper software like MatrikonOPC/Advosol. So SAP PI will consume this Web Service at receiver end. A SOAP request sent by SAP PI will be received by service available in OPC Gateway, now this request has to be passed to OPC Server. In OPC Gateway Web Service request is mapped to a .Net program which will convert HTTP request to COM/DCOM Request and sends the same through ISS to OPC Server. OPC Server will process the request and reply with the necessary Tag Values to OPC Gateway, OPC Gateway will map the response to SOAP response, which will be reached to SAP ERP through Client proxy response. This is how synchronous communication happens between Integrated Systems. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="Systems Integration" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.1SystemsIntegration.JPG" width="638" height="330" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;SAP ERP&lt;/strong&gt;: &lt;/p&gt;  &lt;p align="justify"&gt;ERP makes a business request consists of Tag Names: &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;“A tag name in terms of SCADA represents a variable to hold various quantitative measures like GCV (Gross Calorific Value), NCV (Net Calorific Value), Pressure, Volume, and Temperature. Each quantitative measure will have its own tag name&lt;/em&gt;&lt;/strong&gt;”&lt;/p&gt;  &lt;p align="justify"&gt;Because all the data stored in SCADA will be in the form of Tags, ERP system should send relevant Tag Names to get the values. Sample tag names and specific codes for quantitative measures are given in my previous blog.&lt;/p&gt;  &lt;p align="justify"&gt;As ERP sends a Proxy request this could be manipulated as a SOAP request by using SOAP Message Protocol as XI, which will point to AAE (Advance Adapter Engine).&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;img alt="Sample Request XML Message" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.2SampleRequestXMLMessage.JPG" width="501" height="261" /&gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;OPC Gateway&lt;/strong&gt;:&lt;/p&gt;  &lt;p align="justify"&gt;Client’s landscape has 2 OPC Gateway systems. Communication happens with either of the Gateway’s based on the availability. Each Gateway will be linked to available Instances of SCADA. &lt;/p&gt;  &lt;p align="justify"&gt;OPC Gateways are manipulated to handle SOAP request coming from SAP PI and a .Net Client Application (Wrapper Software) in OPC Gateway converts the call in to D[COM] request and sends to OPCSERVER.&lt;/p&gt;  &lt;p align="justify"&gt;.NET applications can access OPC servers only through a software layer that is usually called a .NET Wrapper. There are no OPC standard specifications for a .NET interface, so different vendors offer .NET wrapper software with much different interfaces and features. &lt;/p&gt;  &lt;p align="justify"&gt;One of the .NET wrapper software we used was ADVOSOL XMLDA.NET wrapper. This supports access to OPC DA and XML DA servers. The Helper classes of wrapper software provide user friendly server access methods for features such as browsing and reading item values.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;img alt="OPC GATEWAY COMMUNICATION" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.3OPCGATEWAYCommunication.JPG" width="412" height="337" /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;OPC DA Sample Server &amp;amp; Matrikon OPC Explorer Client Application &lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;OPC Gateway (OPC Client Machine) system with ISS installed and .NET wrapper running can be monitored using application called &lt;strong&gt;Matrikon OPC Explorer. &lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;I have simulated OPC Server and OPC Gateway in my desktop using OPC .NET Sample DA Server –Tags and Tag values are maintained here (generally updated by RTU’s) and Matrikon OPC Explorer (for OPC Gateway) to view the tags values by installing .NET framework and ISS on Windows OS.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="OPC DA 20 Server" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.4OpcDa20Server.JPG" width="613" height="287" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;strong&gt;&lt;img alt="OPC DA Server Client" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.5OPCDAServerClient.JPG" width="613" height="446" /&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;In this OPC DA Sample Server, we can add New Tags, and edit existing Tag properties like Data type, Quality. If this OPC DA Sample Server is connected to RTU’s will have real Tags names as I mentioned in my first Blog.&lt;/p&gt;  &lt;p align="justify"&gt;Since it is manipulated on my machine to show case the Systems, I could load some dummy Tag names and provide dynamic values in to the Server Instance. [Please note Tag Name in terms of OPC Server is Item ID]&lt;/p&gt;  &lt;p align="justify"&gt;Now let’s see how to access the Tags available in OPC DA Sample Server in to Matrikon OPC Explorer application:&lt;/p&gt;  &lt;p align="justify"&gt;Since I have installed both (OPC DA Sample Server and Matrikon OPC Explorer) on the same host machine, when I open Matrikon OPC Explorer it will automatically detects available OPC Servers on the same host machine.&lt;/p&gt;  &lt;p align="justify"&gt;Now we will see how to add the Tags to view the values available in the OPC DA Sample Server Instance in Matrikon OPC Explorer application.&lt;/p&gt;  &lt;p align="justify"&gt;Press Add Tags which will open another window, this will allow adding of new Item ID: Tag Name to monitor:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="OPC Sample Da 20 Server" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.6OPCSample.OpcDa.20Server.1.JPG" width="612" height="440" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;This application (Matrikon OPC Explorer) need to be connected to the OPCSample.OpcDa.20Server.1, to achieve this press Connect button. Once we press this button you can see the Server is connected and Status as Running on the bottom left window with refresh rate.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="OPC Sample SA 20 Server.1" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.7OPCSample.OpcDa.20Server.1.JPG" width="611" height="419" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Now we will see how to add the Tags to view the values available in the OPC DA Sample Server Instance in Matrikon OPC Explorer application.&lt;/p&gt;  &lt;p align="justify"&gt;Press Add Tags which will open another window, this will allow adding of new Item ID: Tag Name to monitor:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="Matrikon OPC Explorer" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.8.1MatrikonOPCExplorer.JPG" width="509" height="372" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;﻿Press Browse Menu Item and select Flat Browse as follows:&lt;/p&gt;  &lt;p align="justify"&gt;﻿&lt;img alt="Matrikon OPC Explorer" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.8.2MatrikonOPCExplorer.JPG" width="461" height="372" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;﻿You can see all the available Tags/Item ID’s:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="Matrikon OPC Explorer" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.8.3MatrikonOPCExplorer.JPG" width="610" height="466" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Double click relevant Tags/Item ID you wish to explore, which will be added in to the Tag to be added window.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="Matrikon OPC Explorer" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.8.4MatrikonOPCExplorer.JPG" width="614" height="464" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Now press &lt;strong&gt;File -&amp;gt; &lt;/strong&gt;&lt;strong&gt;Update and Return&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="Matrikon OPC Explorer" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.8.5MatrikonOPCExplorer.JPG" width="610" height="465" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;With this action it will add the Tag to the Matrikon OPC Explorer main window and fetches the value available in: OPCSample.OpcDa.20Server.1 as shown below:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="Matrikon OPC Explorer" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.8.6MatrikonOPCExplorer.JPG" width="609" height="376" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;This is how we monitor the Tag values in Matrikon OPC Explorer in OPC Gateway (OPC Client). Other than Matrikon OPC Explorer, you can use any other tools available.&lt;/p&gt;  &lt;p align="justify"&gt;Now we see how to get this value with the Web Service request from a web client like SOAPUI testing tool.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Web Service and Functions&lt;/strong&gt;:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="XML DA Sample Server" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.9XmlDaSampleServer.JPG" width="610" height="407" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;With the available Web Service we can &lt;strong&gt;Read&lt;/strong&gt; / &lt;strong&gt;Write&lt;/strong&gt; Tag Values available in OPC Gateway’s. We can utilize &lt;strong&gt;GetProperties&lt;/strong&gt; function to get the Tag’s Properties like Quality and Time Stamp etc. We can utilize &lt;strong&gt;GetStatus&lt;/strong&gt; function to check the status of the Tag value like Active/In-Active. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="SOAPUI Request" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.10SOAPUI.JPG" width="649" height="375" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="SOAPUI Response" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG2.10.2SOAPUI.JPG" width="671" height="368" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Once the Web Service is available, this can be used in SAP PI on receiving end. Let us see the Interface details with Read Operation, which will be triggered from SAP ERP TSW in my next blog. I hope this blog provides you little bit knowledge on OPC Gateway and OPC Server Instance.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-5052066972053829811?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T11:02:05.422-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>SCADA Integration with SAP using SAP PI – Part 1</title><link>http://sapxitutorials.blogspot.com/2011/06/scada-integration-with-sap-using-sap-pi.html</link><category>SAP PI Mappings</category><category>SAP PI Tut</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 11:00:52 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-3867544824067406653</guid><description>&lt;p align="justify"&gt;&lt;strong&gt;SCADA Integration with SAP using SAP PI – Part 1 - &lt;em&gt;Business case &amp;amp; Systems Involved&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Before starting my previous project, I was little sceptic about SCADA (Supervisory Control and Data Acquisition) integration with SAP using PI, whether it is achievable or not. But I had an iota of confidence that this can be done somehow.&amp;#160; With the help of SAP's XMII expert Pandiarajan .P and .NET consultant Mahesh Patel, I could successfully implement several interfaces integrating SCADA. Since there is no reference about this topic in SDN, so I thought of putting my experience in words as a series of blogs about the Integration. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;1. &lt;/strong&gt;&lt;strong&gt;SCADA Integration with SAP using SAP PI – Part 1 - &lt;em&gt;Business case &amp;amp; Systems Involved&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;2. &lt;/strong&gt;&lt;strong&gt;SCADA Integration with SAP using SAP PI – Part 2 – &lt;em&gt;Systems Integration&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;3. &lt;/strong&gt;&lt;strong&gt;SCADA Integration with SAP using SAP PI – Part 3 – &lt;em&gt;Interface.&lt;/em&gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Business case&lt;/strong&gt;:&lt;/p&gt;  &lt;p align="justify"&gt;Our client has India’s biggest pipeline connectivity network in Gas distribution, (Downstream – Delivery of Natural Gas through Pipeline &amp;amp; Gas Tankers) which is working under Central Government of India. They have Decentralized SCADA Servers providing by different vendors like INVENSYS and TELVENT. These will get Pressure/Volume/Temperature/GCV/NCV etc values from RTU’s (Remote Terminal Units)/Flow Meters attached across pipelines. Based on the values SCADA will control the GAS flow in Flow Meters remotely. Business case was to fetch these values in to SAP –TSW module and schedule the quantity of the Gas to be delivered on particular day.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="Business Process" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG1.1BusinessProcess.JPG" width="484" height="405" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Now let me introduce you with the landscape systems involved and brief introduction about them.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;SAP ERP 6.0 EHP 4 TSW Module. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;SAP PI 7.1 EHP 1. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;SCADA with OPC DA Server (2.0) – Decentralized &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;OPC Gateways - OPC Clients.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;SAP ERP TSW module&lt;/strong&gt;:&lt;/p&gt;  &lt;p align="justify"&gt;TSW stands for Traders and scheduler workbench. Trader's and Scheduler's Workbench (TSW) provides functions for stock projection and for planning and scheduling bulk shipments using nominations. TSW provides the relevant master data to model the supply chain. The stock projection, planning, and nomination processes enable the scheduler to schedule bulk shipments while taking into account supply, demand, and available transportation. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Processes and Functions&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The following planning tools are provided by the TSW application:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Planning (Replenishment Proposals and Safety/Target Stock Calculation) &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Stock Projection Worksheet (SPW) &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Location Balancing &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Worklist &lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p align="justify"&gt;The following scheduling tools are provided by the TSW application:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Three-Way Pegging (3WP) &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Berth Planning Board (BPB) &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Nomination &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Ticketing &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Worklist &lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p align="justify"&gt;&lt;img alt="TSW Processes &amp;amp; Functions" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG1.2TSWProcessesFunctions.JPG" width="423" height="343" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Since Client’s business is to deliver Gas to various dealers, using Pipeline &amp;amp; Gas Tankers, for daily nominations and scheduling the quantity to delivery, this module has been used in the project. [&lt;strong&gt;REF&lt;/strong&gt;: &lt;a href="http://help.sap.com/saphelp_oil472/helpdata/en/9e/169f37c503a318e10000009b38f842/content.htm"&gt;help.sap.com&lt;/a&gt;]&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;SCADA with OPC DA Server (2.0) - Decentralized: &lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;What is SCADA?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;SCADA stands for Supervisory Control And Data Acquisition. As the name indicates, it is not a full control system, but rather focuses on the supervisory level. As such, it is a purely software package that is positioned on top of hardware to which it is interfaced, in general via Programmable Logic Controllers (PLCs), or other commercial hardware modules. SCADA systems are used not only in most industrial processes: e.g. steel making, power generation (conventional and nuclear) and distribution, chemistry, but also in some experimental facilities such as nuclear fusion. SCADA systems used to run on DOS, VMS and UNIX; in recent years all SCADA vendors have moved to NT. &lt;/p&gt;  &lt;p align="justify"&gt;SCADA systems are widely used in industry for Supervisory Control and Data Acquisition of industrial processes. Companies that are members of standardisation committees (e.g. OPC, OLE for Process Control) and are thus setting the trends in matters of IT technologies generally develop these systems. SCADA Server’s which our client own was provided by following vendors:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://iom.invensys.com/EN/Pages/home.aspx"&gt;INVENSYS&lt;/a&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://www.telvent.com/en/"&gt;TELVENT&lt;/a&gt;&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;There were multiple instances of these SCADA servers which are decentralized. But servers get synchronized with real time data on periodical intervals.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;How to communicate with SCADA?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;These SCADA systems include OPC (OLE for Process Control) Servers inside, other than its own Data Sources. OPC Servers are software applications (drivers) that comply with one or more OPC specifications as defined by the &lt;a href="http://www.opcfoundation.org/"&gt;OPC Foundation&lt;/a&gt;. OPC Servers communicate natively with one or more Data Sources on one side and with OPC Clients on the other. In an &lt;a href="http://www.matrikonopc.com/opc-server/opc-client-server.aspx"&gt;OPC Client / OPC Server Architecture&lt;/a&gt;, the OPC Server is a Slave while the OPC Client is the Master. &lt;/p&gt;  &lt;p align="justify"&gt;Versions of OPC Servers released so far:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;&lt;img alt="Versions of OPC Servers" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG1.3VersionsofOPCServers.JPG" width="581" height="159" /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;Data Format in SCADA:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Data in SCADA is available in the form of TAG’s, something like:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="SCADA Tags" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG1.4SCADATags.JPG" width="515" height="158" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;For each tag corresponding value will be updated to SCADA database by the RTU’s (Remote Terminal Units) connected to Gas Pipeline. Based on which SCADA will control the flow of Gas through Flow Meters attached to Gas Pipeline. OPC Client machines will request these tag values by specifying the tag name. Client machines got the facility to subscribe the functionality to get updated information of tag values, every second or even shorter time interval. &lt;/p&gt;  &lt;p align="justify"&gt;For further information on OPC Server please refer to &lt;a href="http://www.matrikonopc.com/opc-server/index.aspx"&gt;MatrikonOPC.com&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;OPC Gateways&lt;/strong&gt; (&lt;strong&gt;OPC Clients&lt;/strong&gt;)&lt;/p&gt;  &lt;p align="justify"&gt;OPC Gateways systems are Client machines that will communicate to OPC Server in SCADA system. These Gateway systems with Windows Operating System and ISS installed &amp;amp; running. Communication between the OPC Client and OPC Server is bi-directional meaning the OPC Clients can read from and write to OPC Servers. Classic OPC Servers utilize the Microsoft Windows’ COM/DCOM infrastructure as a means of exchanging data. This means these OPC Servers must run on the Microsoft Windows operating system. An OPC Server can support communications with multiple OPC Clients simultaneously. But latest releases of&amp;#160; OPC Servers supports HTTP Communications so Web Service are provided by OPC Servers can be directly consumed by client applications like SAP PI or ERP directly.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;OPC Client – OPC Server Communication&lt;/em&gt;&lt;/p&gt; &lt;em&gt;&lt;/em&gt;  &lt;p align="justify"&gt;&lt;img alt="OPC Client OPC Server Communication" src="https://weblogs.sdn.sap.com/weblogs/images/251902599/IMG1.5OPCClient-OPCServerCommunication.JPG" width="333" height="373" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;[&lt;strong&gt;Ref&lt;/strong&gt;: &lt;a href="http://www.matrikonopc.com/opc-server/index.aspx"&gt;MatrikonOPC.com&lt;/a&gt;]&lt;/p&gt;  &lt;p align="justify"&gt;These are all the systems and brief information about them.&lt;/p&gt;  &lt;p align="justify"&gt;Let us discuss about the Architectural connectivity that we followed in our Systems Integration in my next blog. I hope this blog series helps you get an idea on integration between SCADA and SAP. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-3867544824067406653?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T11:00:52.947-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>PI/XI: NWDS not only for java development but also for PI administration.</title><link>http://sapxitutorials.blogspot.com/2011/06/pixi-nwds-not-only-for-java-development.html</link><category>SAP PI  Administration</category><category>SAP JAVA Mapping</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 11:04:51 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-5774039799488624258</guid><description>&lt;p align="justify"&gt;In this article I'd like to show two common ways of using SAP NetWeaver Developer Studio (NWDS) for administration purposes of SAP PI.    &lt;br /&gt;&lt;strong&gt;1. How to deploy JDBC/JMS external drivers (SDA files) without JSPM ? &lt;/strong&gt;    &lt;br /&gt;If you'd like to use any external JDBC/JMS driver in your PI landscape you need to deploy the drivers first using an SDA file. In the latest PI releases you can only do that using JSPM (as SDM is no longer available). However you can also try deploying SDA files using NDWS and below you will find the necessary steps to do that.    &lt;br /&gt;&lt;strong&gt;Step 1 &lt;/strong&gt;    &lt;br /&gt;Create an EAR project.     &lt;br /&gt;&lt;strong&gt;Step 2 &lt;/strong&gt;    &lt;br /&gt;Import the SDA file into this project.    &lt;br /&gt;&lt;strong&gt;Step 3 &lt;/strong&gt;    &lt;br /&gt;Make sure to set the J2EE server in Window - Preferences - SAP AS Java menu.    &lt;br /&gt;&lt;strong&gt;Step 4 &lt;/strong&gt;    &lt;br /&gt;Right click on the SDA file and deploy it.     &lt;br /&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/252065314/blog_ndws_2.JPG" width="467" height="413" /&gt;    &lt;br /&gt;As you see the server will get restarted and your file will be deployed.    &lt;br /&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/252065314/blog_ndws_1.JPG" /&gt;    &lt;br /&gt;&lt;strong&gt;2. How to use NWDS for nice log file monitoring ? &lt;/strong&gt;    &lt;br /&gt;In case something goes wrong with PI you may need to check the log files. You can do that from multiple places like NetWeaver Administrator (nwa) or even from transaction AL11 from your ABAP stack. The fact is that I don't like those two tools at all because they are either slow or show the log files in a very difficult to read format. What about using NDWS for that purpose?     &lt;br /&gt;&lt;strong&gt;Step 1 &lt;/strong&gt;    &lt;br /&gt;Once you see your J2EE servers in the deployment view you can select &amp;quot;Open SAP management console&amp;quot; link.     &lt;br /&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/252065314/blog_ndws_3.JPG" width="386" height="218" /&gt;    &lt;br /&gt;&lt;strong&gt;Step 2 &lt;/strong&gt;    &lt;br /&gt;Then in the &amp;quot;log files&amp;quot; link you can see all of your most important logs and their content (nicely formatted) below.     &lt;br /&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/252065314/blog_ndws_4.JPG" width="369" height="238" /&gt;    &lt;br /&gt;&lt;strong&gt;Step 3 &lt;/strong&gt;    &lt;br /&gt;The feature I like the most is the automatic refresh. Once you enable it you will see instantly the latest entries to your log files and in most cases this will enable you to find the cause of the issue very quickly.    &lt;br /&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/252065314/blog_ndws_5.JPG" width="462" height="157" /&gt;    &lt;br /&gt;The conclusion of this short article is - even if you're not a developer you can start using NDWS for other purposes. This will benefit you also in the future as in the future (even as of PI 7.3) you can do some PI configuration in NWDS already as shown in one of my previous articles:     &lt;br /&gt;&lt;a href="http://weblogs.sdn.sap.com/cs/weblog/view/wlg/21556"&gt;PI/XI: PI 7.3 - accessing PI with NWDS - teaser&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-5774039799488624258?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T11:04:51.576-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Automating Import of IDoc Metadata in Transaction IDX2</title><link>http://sapxitutorials.blogspot.com/2011/06/automating-import-of-idoc-metadata-in.html</link><category>SAP PI Videos</category><category>SAP PI Mappings</category><category>SAP PI Tut</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 11:06:25 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-4487096443506428803</guid><description>&lt;p align="justify"&gt;Despite all of the advances in Web service and proxy technologies over the course of the past few years, I still find that many customers prefer to use the tried-and-true ALE/IDoc technology stack. Consequently, a frequent administrative headache is the upload of IDoc metadata using Transaction IDX2. In this blog, I will demonstrate a simple report program that can be used to automate this task. &lt;h6 align="justify"&gt;What is IDoc metadata, anyway?&lt;/h6&gt; &lt;p align="justify"&gt;If you haven't worked with the PI IDoc adapter before, then a brief introduction is in order. As you know, all messages that flow through the PI Integration Engine pipeline are encoded using XML. Thus, besides providing raw connectivity, adapters such as the IDoc adapter also must perform the necessary transformations of messages so that they can be routed through the pipeline. In the case of the IDoc adapter, the raw IDoc data (you can see how the IDoc data is encoded by looking at the signature of function module IDOC_INBOUND_ASYNCHRONOUS) must be transformed into XML. Since the raw IDoc data does not provide information about segment field names, etc., this metadata must be imported at configuration time in order to enable the IDoc adapter to perform the XML transformation in an efficient manner. &lt;p align="justify"&gt;From a configuration perspective, all this happens in two transactions: &lt;ul&gt; &lt;li&gt; &lt;div align="justify"&gt;In Transaction IDX1, you create an &lt;em&gt;IDoc Adapter Port&lt;/em&gt; which essentially provides the IDoc adapter with an RFC destination that can be used to introspect the IDoc metadata from the backend SAP ALE system. &lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;In Transaction IDX2, you can import IDoc types using the aforementioned IDoc adapter port. Here, you can import standard IDoc types, custom IDoc types, or even extended types.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="justify"&gt;If you're dealing with a handful of IDocs, then perhaps this isn't such a concern. However, if you're dealing with 10s or 100s of IDocs and a multitude of PI systems, then this process can become tedious in a hurry. &lt;h6 align="justify"&gt;Automating the Upload Process&lt;/h6&gt; &lt;p align="justify"&gt;Now, technically speaking, the IDoc adapter is smart enough to utilize the IDoc port definition to dynamically load and cache IDoc metadata on the fly. However, what it won't do is detect changes to custom IDocs/extensions. Furthermore, if you have scenarios during cutover which block RFC communications, not having the IDoc metadata in context can lead to unexpected results. The report below can be used to automate the initial upload process or execute a kill-and-fill to pull in the latest and greatest changes. In reading through the comments, you can see that it essentially takes two inputs: the IDoc adapter port defined in IDX1 and a CSV file from your frontend workstation that defines the IDoc types to import. Here, you just need to create a two-column CSV file containing the IDoc type in column 1 and the extension type (if any) in column 2. &lt;p align="justify"&gt;REPORT zidx_idoc_load_metadata. *&amp;amp;---------------------------------------------------------------------* *&amp;amp; Local Class Definitions * *&amp;amp;---------------------------------------------------------------------* CLASS lcl_report DEFINITION CREATE PRIVATE. PUBLIC SECTION. CLASS-METHODS: "Used in the selection screen definition: get_frontend_filename CHANGING ch_file TYPE string, "Public static method for running the report: execute IMPORTING im_idoc_types_file TYPE string im_idoc_port TYPE idx_port. PRIVATE SECTION. "Class-Local Type Declarations: TYPES: BEGIN OF ty_idoc_type, idoc_type TYPE string, ext_type TYPE string, END OF ty_idoc_type, ty_idoc_type_tab TYPE STANDARD TABLE OF ty_idoc_type. "Instance Attribute Declarations: DATA: idoc_port TYPE idx_port, idoc_types TYPE ty_idoc_type_tab. "Private helper methods: METHODS: constructor IMPORTING im_idoc_port TYPE idx_port, upload_idoc_types IMPORTING im_idoc_types_file TYPE string RAISING cx_sy_file_io, import_idoc_metadata, remove_idoc_metadata IMPORTING im_idoc_type TYPE string. ENDCLASS. CLASS lcl_report IMPLEMENTATION. METHOD get_frontend_filename. "Local Data Declarations: DATA: lt_files TYPE filetable, lv_retcode TYPE i, lv_user_action TYPE i. FIELD-SYMBOLS: &amp;lt;lfs_file&amp;gt; LIKE LINE OF lt_files. "Present the user with a dialog box to select the name "of the file they want to upload: CALL METHOD cl_gui_frontend_services=&amp;gt;file_open_dialog EXPORTING default_extension = 'csv' file_filter = '.csv' CHANGING file_table = lt_files rc = lv_retcode user_action = lv_user_action EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 others = 5. IF sy-subrc EQ 0. IF lv_user_action NE cl_gui_frontend_services=&amp;gt;action_cancel. READ TABLE lt_files INDEX 1 ASSIGNING &amp;lt;lfs_file&amp;gt;. IF sy-subrc EQ 0. ch_file = &amp;lt;lfs_file&amp;gt;-filename. ENDIF. ENDIF. ELSE. MESSAGE 'Could not determine target filename!' TYPE 'I'. RETURN. ENDIF. ENDMETHOD. " METHOD get_frontend_filename METHOD execute. "Method-Local Data Declarations: DATA: lo_report TYPE REF TO lcl_report, lo_exception TYPE REF TO cx_root, lv_message TYPE string. TRY. "Create an instance of the report driver class: CREATE OBJECT lo_report EXPORTING im_idoc_port = im_idoc_port. "Upload the set of IDoc types to load into the IDoc adapter; "This file should be a CSV file on the local workstation: CALL METHOD lo_report-&amp;gt;upload_idoc_types EXPORTING im_idoc_types_file = im_idoc_types_file. "Import the set of IDoc types: CALL METHOD lo_report-&amp;gt;import_idoc_metadata( ). CATCH cx_root INTO lo_exception. lv_message = lo_exception-&amp;gt;get_text( ). MESSAGE lv_message TYPE 'I'. ENDTRY. ENDMETHOD. " METHOD execute METHOD constructor. me-&amp;gt;idoc_port = im_idoc_port. ENDMETHOD. " METHOD constructor METHOD upload_idoc_types. "Method-Local Data Declarations: DATA: lt_csv_file TYPE string_table, lv_idoc_type TYPE edipidoctp, lv_ext_type TYPE edipcimtyp. FIELD-SYMBOLS: &amp;lt;lfs_csv_record&amp;gt; LIKE LINE OF lt_csv_file, &amp;lt;lfs_idoc_type&amp;gt; LIKE LINE OF me-&amp;gt;idoc_types. "Upload the selected file from the user's workstation: CALL METHOD cl_gui_frontend_services=&amp;gt;gui_upload EXPORTING filename = im_idoc_types_file CHANGING data_tab = lt_csv_file EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 not_supported_by_gui = 17 error_no_gui = 18 others = 19. IF sy-subrc NE 0. RAISE EXCEPTION TYPE cx_sy_file_io EXPORTING filename = im_idoc_types_file. ENDIF. "Copy the CSV file into the IDoc types table: LOOP AT lt_csv_file ASSIGNING &amp;lt;lfs_csv_record&amp;gt;. SPLIT &amp;lt;lfs_csv_record&amp;gt; AT ',' INTO: lv_idoc_type lv_ext_type. APPEND INITIAL LINE TO me-&amp;gt;idoc_types ASSIGNING &amp;lt;lfs_idoc_type&amp;gt;. &amp;lt;lfs_idoc_type&amp;gt;-idoc_type = lv_idoc_type. &amp;lt;lfs_idoc_type&amp;gt;-ext_type = lv_ext_type. ENDLOOP. ENDMETHOD. " METHOD upload_idoc_types METHOD import_idoc_metadata. "Method-Local Data Declarations: DATA: lv_count TYPE i. FIELD-SYMBOLS: &amp;lt;lfs_idoc_type&amp;gt; LIKE LINE OF me-&amp;gt;idoc_types. "Process each of the selected IDoc types in turn: LOOP AT me-&amp;gt;idoc_types ASSIGNING &amp;lt;lfs_idoc_type&amp;gt;. "Check to see if the metadata already exists: SELECT COUNT(*) INTO lv_count FROM idxsload WHERE port EQ me-&amp;gt;idoc_port AND idoctyp EQ &amp;lt;lfs_idoc_type&amp;gt;-idoc_type AND cimtyp EQ &amp;lt;lfs_idoc_type&amp;gt;-ext_type. IF lv_count GT 0. "If it does, go ahead and remove it: CALL METHOD remove_idoc_metadata( &amp;lt;lfs_idoc_type&amp;gt;-idoc_type ). ENDIF. "Now, import the IDoc metadata using IDX_FILL_STRUCTURE: SUBMIT idx_fill_structure WITH port = me-&amp;gt;idoc_port WITH idoctyp = &amp;lt;lfs_idoc_type&amp;gt;-idoc_type WITH cimtyp = &amp;lt;lfs_idoc_type&amp;gt;-ext_type AND RETURN. ENDLOOP. ENDMETHOD. " METHOD import_idoc_metadata METHOD remove_idoc_metadata. "Remove the IDoc metadata using IDX_RESET_METADATA: SUBMIT idx_reset_metadata WITH port = me-&amp;gt;idoc_port WITH idoctyp = im_idoc_type AND RETURN. ENDMETHOD. " METHOD remove_idoc_metadata ENDCLASS. *&amp;amp;---------------------------------------------------------------------* *&amp;amp; Selection Screen Definition * *&amp;amp;---------------------------------------------------------------------* PARAMETERS: p_idxprt TYPE idx_port OBLIGATORY, p_ifile TYPE string LOWER CASE OBLIGATORY. *&amp;amp;---------------------------------------------------------------------* *&amp;amp; AT SELECTION-SCREEN Event Module * *&amp;amp;---------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ifile. CALL METHOD lcl_report=&amp;gt;get_frontend_filename CHANGING ch_file = p_ifile. *&amp;amp;---------------------------------------------------------------------* *&amp;amp; START-OF-SELECTION Event Module * *&amp;amp;---------------------------------------------------------------------* START-OF-SELECTION. CALL METHOD lcl_report=&amp;gt;execute EXPORTING im_idoc_port = p_idxprt im_idoc_types_file = p_ifile. &lt;h6 align="justify"&gt;Final Thoughts&lt;/h6&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-4487096443506428803?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T11:06:25.021-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>SAP NetWeaver 7.3 Goes Green</title><link>http://sapxitutorials.blogspot.com/2011/06/sap-netweaver-73-goes-green.html</link><category>SAP PI Mappings</category><category>SAP PI Tut</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 11:07:18 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-1576398707879759460</guid><description>&lt;p align="justify"&gt;The concept of energy savings through SAP NetWeaver was first raised during the SAP Influencer Summit in December 2010 by Peter Graf, who used similar data to show how SAP development takes advantage of energy savings possibilities, which result in lower cost for operating our software and reduces carbon emissions.&lt;/p&gt;  &lt;p align="justify"&gt;In this blog I want to explain a bit more in detail how this calculation was done and on which assumptions it is based on. To make my case, I will use the example of SAP NetWeaver Process Integration (PI) software, as it is the area I worked on for many years and which I am most familiar with. &lt;/p&gt;  &lt;p align="justify"&gt;To demonstrate this idea, SAP carried out testing of its new SAP NetWeaver Platform using the &lt;a href="http://www.sap.com/solutions/benchmark/measuring/index.epx"&gt;SAP Application Performance Standard (SAPS)&lt;/a&gt;. SAP defined a medium-sized landscape as being 37,500 &lt;a href="http://www.sap.com/solutions/benchmark/measuring/index.epx"&gt;SAPS&lt;/a&gt; for an SAP &lt;a href="http://en.wikipedia.org/wiki/SAP_XI"&gt;NetWeaver Process Integration&lt;/a&gt; (PI) customer. &lt;/p&gt;  &lt;p align="justify"&gt;Based on this definition, they found that the savings potential for PI is in the region of:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;60% less energy consumption or around 32,000 kWh/yr &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;16 tons of CO2 savings per landscape/year &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;€6.5k saving potential per landscape/year&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Medium-sized PI landscapes&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;As we do not have 100% correct customer data on sizes of PI installation systems, we decided to undertake an expert evaluation of small, medium, and large PI customer installations. With input from the SAP field organization, PI product management, PI sizing experts, and regional implementation team experts, we decided to make the assumption that a small PI customer has installed 5.000 SAPS for production system, 15.000 SAPS for medium and 30.000 SAPS as large customer in production. &lt;/p&gt;  &lt;p align="justify"&gt;Customer landscapes consist not just of of the production environment, but also development and quality assurance systems; so we decided to take the factor 2,5 times of the production system for the complete customer landscape. Usually the quality assurance environment is of the same size of production, whereas development has half the size of production. The result led to the conclusion that a medium sized PI landscape is about: 37.500 SAPS.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Why we calculated with &amp;quot;SAPS&amp;quot;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;With the help of SAP Standard Application Benchmark results at &lt;a href="http://www.sap.com/benchmark"&gt;www.sap.com/benchmark&lt;/a&gt;, statements can be made as to CPU consumption and memory consumption of particular software components. SAPS is an artificial calculation to decouple software from hardware influences. That gave us the possibility to exclude improvements in the hardware environment from the improvements of the software.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;How these savings are reflected in the SAP (Quick) Sizing&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Improvements achieved on the software level can either mean customers can reduce their hardware demand, or process more messages in regards to PI usage. We did the calculation in a way where we kept the number of messages the same and expected the customer will reduce his hardware. The calculation is based on a mix of scenarios executed as integrated scenarios on a PI system. For the PI centric folks: 75.000 asynchronous messages of 100 KB size and 25.000 synchronous messages of 20 KB size with simple mapping and receiver determination executed in one hour executed on standard PI dual stack set up. That gave a SAPS demand of 15.000 SAPS in a classic PI dual stack usage with 66% hardware usage. Now, that can be executed on AEX as the Java only deployment option of PI with 61% less SAPS and hardware demand. These numbers have been tested and verified therefore the customer and partners will see the same results using &lt;a href="http://service.sap.com/quicksizing"&gt;SAP PI sizing tool&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;How to transfer SAPS to energy consumption, costs of energy, and carbon emissions&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;All hardware needs different amounts of power resources to achieve a certain number of SAPS. By introducing the &lt;a href="http://www.sap.com/solutions/benchmark/power-benchmarks.epx"&gt;SAP Power Benchmark&lt;/a&gt;, the approach is that a hardware vendor does not only show that his hardware set up can provide the requested SAPS, but although how much energy input is needed to achieve this. As we could not calculate for all hardware vendors, we decided to take the average measured values for up to date hardware from 2010. With further improvements on hardware these values have to be adopted, but as hardware is in place for several years and older hardware is much more energy-intensive, we think things will be fine for this year. &lt;/p&gt;  &lt;p align="justify"&gt;To calculate the energy costs and potential customer cost savings we took the price of 0,2 € per one kilo watt per hour (kWh) in Germany, which is certainly different for other countries and business customers buying and consuming high numbers of energy. The same is true for the carbon emissions created to produce one kWh, because that is dependent on the energy mix of nuclear power, natural gas, coal, renewal energy in the individual country. For Germany that was 506 grams of carbon per kWh according to &lt;a href="http://de.wikipedia.org/wiki/Stromkennzeichnung"&gt;BDEW&lt;/a&gt; and as the energy mix is not unusual we took this number for the calculations. Result: 16 tons of CO2 savings per landscape/year. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;How savings can be achieved&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The main reason is that with integrated configurations all steps can be executed on one stack in our case Java. That reduces the persistency steps from 3 and more in &amp;quot;dual stack times&amp;quot; (ABAP + Java) to in average to one now. As we learned that especially write operations to hard discs are in average close to two times more power demanding then cpu and memory usage that already gives the major part. Additionally, there is no further need to connect one or two times from ABAP to Java stack at runtime, which results in further savings in resource consumption.&lt;/p&gt;  &lt;p align="justify"&gt;Another very big advantage with PI 7.3 and the &lt;a href="http://help.sap.com/saphelp_nw73/helpdata/en/ac/5eac92a34e45a2831ee59e9bce0f8d/frameset.htm"&gt;Java only deployment option&lt;/a&gt; is that it&amp;#160; only brings the software resources with it which are absolutely needed for PI. That reduces installation times, software patching times and restart times of the Java server. The times measured SAP internally on hardware with good read write operations are around two hours for AEX installation and one and a half to two minutes for a restart of Java server. Due to advanced installer and &lt;a href="http://service.sap.com/sap/support/notes/1400543"&gt;new PI 7.3 ctc scripts&lt;/a&gt; (SAP service Marketplace Logon Required) these numbers will be achievable for customers, too. Customers can get the benefits immediately as the product is generally available since 31. May 2011.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;What we can learn for other SAP application developments&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Process tasks in one step and in one technical stack together as long as possible, as the AEX does the main part. Reducing write operations to hard discs significantly reduces power consumption. Therefore, you shoul limit the amount of time for processing in memory and write only to disc your logs and application date where it is really necessary!&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;What the future holds&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;There are many areas where SAP can improve the carbon footprint of its software solutions. On the company level, on demand solutions could help eliminate the need for each customer to deploy and operate their own system and system landscape, and then provide the hardware and training for people to run these applications. Another possibility could be the in-memory approach to reduce read/write operations.&lt;/p&gt;  &lt;p align="justify"&gt;Individuals can also play a role. Many improvement possibilities are already known in people’s respective areas of expertise. Maybe you have own findings and best practices you’d like to share. Feel free to post and discuss! &lt;/p&gt;  &lt;p align="justify"&gt;This publication is part of SAP’s Green IT initiative, which is based on the following three pillars: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Energy&lt;/strong&gt; - reducing energy consumption &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;E-waste&lt;/strong&gt; –minimizing waste through sustainable sourcing and recycling &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Dematerialization&lt;/strong&gt; –substituting high carbon products and activities with low carbon alternatives&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;SAP is committed to optimizing these three areas in its own IT operation, with its product development organization, as well as offering compelling solutions and services to our customers. If you need more information please refer to &lt;a href="http://www.sap.com/greenit"&gt;www.sap.com/greenit&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-1576398707879759460?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T11:07:18.908-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>How to solve JMS reconnection issue between SAP PI and Oracle Fusion Application Server (BEA/WLS)</title><link>http://sapxitutorials.blogspot.com/2011/06/how-to-solve-jms-reconnection-issue.html</link><category>SAP PI Mappings</category><category>SAP PI  Administration</category><category>SAP PI 7.3 Tutorials</category><author>noreply@blogger.com (SAP XI Tutorials)</author><pubDate>Sat, 24 Dec 2011 10:53:39 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5376988658581715663.post-4818592091296571304</guid><description>&lt;p align="justify"&gt;&lt;strong&gt;A&lt;/strong&gt; permanent issue has been identified in integration scenario’s using JMS based interfaces between SAP PI and the Oracle Service Bus – OSB (formerly known as BEA Aqualogic Service Bus). The issue normally arises when the connection of a JMS receiver-or sender-channel becomes temporary unavailable. &lt;/p&gt;  &lt;p align="justify"&gt;When the instance or server hosting the JMS queue is restarted, the SAP PI JMS communication channel is not able to re-establish the JMS connection. As a result existing or new messages placed on the remote JMS queue(s) are not picked up by SAP PI. &lt;/p&gt;  &lt;p align="justify"&gt;The workaround to solve this problem involves in most cases restarting the communication channels and in some times it requires restarting the entire Java stack of SAP PI. After many unsuccessful attempts trying to solve this problem including but not limited to; researching possible applicable SAP notes, requesting support at both SAP and Oracle organizations, we did finally find the source of the problem on the Oracle side of this scenario. In the next lines I will explain how we solved it. &lt;/p&gt;  &lt;p align="justify"&gt;The Oracle Application Server also called the WLS (Weblogic Server) hosting the JMS queues provides several parameters that can be configured for different purposes for instance; performance, security, availability and persistency.&amp;#160; &lt;em&gt;See figure 1.&lt;/em&gt;&lt;/p&gt; &lt;em&gt;   &lt;p align="justify"&gt;     &lt;br /&gt;&lt;/p&gt; &lt;/em&gt;  &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/36535/Greenshot_2011-06-23_15-56-14-1.jpg" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Figure 1.&lt;/p&gt;  &lt;p align="justify"&gt;One of those parameters in particular is the “Reconnect Policy” which is applicable for the JMS Connection Factory used by JMS clients (such as SAP PI) responsible for managing the way JMS clients should react in case a connection with the JMS server has to be re-established. &lt;/p&gt;  &lt;p align="justify"&gt;The parameter can be found on the tab “Client” Client under Messaging\Summary of Services\JMS Modules\..&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/36535/Greenshot_2011-06-23_15-55-52-2.jpg" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Figure 2.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/36535/Greenshot_2011-06-23_15-55-30-3.gif" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Figure 3.&lt;/p&gt;  &lt;p align="justify"&gt;As shown in the screenshot above the parameter can be set to either None, Producer or All. By default the value of the parameter is set to “Producer”. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;img alt="" src="https://weblogs.sdn.sap.com/weblogs/images/36535/Greenshot_2011-06-23_15-54-45-4.jpg" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Figure 4.&lt;/p&gt;  &lt;p align="justify"&gt;We changed the value from “Producer” to “None”, save the new settings and restarted the Oracle Application Server to test the new configuration. The results after the change were positive and until now we have not seen the issue anymore. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5376988658581715663-4818592091296571304?l=sapxitutorials.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T10:53:39.292-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><media:rating>nonadult</media:rating></channel></rss>

