How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Applies to: SAP NetWeaver XI3.0, PI 7.0 and PI 7.1 Summary This How-to Guide will show you how to use the SOAP (1.1/1.2) and HTTP POST for Web Services Integration via SOAP and Plain HTTP Receiver Adapters respectively. Author: Mark Angelo Dihiansan Company: NorthgateArinso Created on: July 1, 2012 Author Bio Mark Dihiansan is currently working as a Senior SAP XI/PI consultant for NorthgateArinso. SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 1 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Table of Contents Scenario .............................................................................................................................................................. 3 Introduction ......................................................................................................................................................... 3 Step-by-Step ....................................................................................................................................................... 3 Load the WSDL in SOAP UI ........................................................................................................................... 3 SOAP 1.1 Receiver ......................................................................................................................................... 4 Steps in ESR................................................................................................................................................................ 4 Steps in ID ................................................................................................................................................................... 5 Test the Scenario ......................................................................................................................................................... 9 SOAP 1.2 Receiver ....................................................................................................................................... 10 Steps in ESR.............................................................................................................................................................. 12 Steps in ID ................................................................................................................................................................. 16 Test the Scenario ....................................................................................................................................................... 20 HTTP POST Receiver ................................................................................................................................... 22 Steps in ESR.............................................................................................................................................................. 22 Steps in ID ................................................................................................................................................................. 27 Test the Scenario (SOAP over HTTP) ....................................................................................................................... 32 Test the Scenario (PLAIN HTTP) ............................................................................................................................... 34 What if the Sender uses these protocols? ........................................................................................................ 36 SOAP 1.1 Sender .......................................................................................................................................... 36 SOAP 1.2 Sender .......................................................................................................................................... 36 HTTP POST .................................................................................................................................................. 36 Related Content ................................................................................................................................................ 37 Copyright........................................................................................................................................................... 38 SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 2 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Scenario A Web Service Operation has been given that describe ways to call that service via: SOAP 1.1 SOAP 1.2 HTTP POST Most of the time, the developer can choose which protocol to use e.g. Use SOAP 1.1 for Web Services because this is the easiest to implement in XI/PI as this requires the least amount of configuration. But what if the requirement is to use SOAP 1.2 or HTTP POST? This guide covers Web Service integration using SOAP 1.1, 1.2 and HTTP POST. Introduction This guide has been inspired by the questions that have been posted in SDN regarding SOAP 1.2 and HTTP POST. Many thanks for Renjith Andrews for his response to this thread regarding prolog creation. To start, we will be using the Add operation from this webpage. The WSDL can be downloaded here. Please also bear with me since it is hard to discuss SOAP 1.2 without discussing SOAP 1.1. Step-by-Step By clicking the Add hyperlink from the webpage, you will be taken to a page that explains the different ways to call the Add operation like SOAP 1.1 & 1.2, HTTP GET and HTTP POST. This guide will not be covering about HTTP GET as this is only natively supported from SAP Netweaver PI 7.3 and onwards. Load the WSDL in SOAP UI SOAP UI is a third-party tool used for testing Web Services. For more information regarding SOAP UI, please go to this link. The application can be downloaded here. Here is a screenshot from SOAP UI once the Add operation has been successfully executed. SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 3 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration SOAP 1.1 Receiver SOAP 1.1 is probably the easiest to implement because it is natively supported by the SOAP Sender/Receiver adapter. For those who are already very much familiar with this topic, you may opt to skip this and proceed to SOAP 1.2 and HTTP POST. Here is the request message structure of the Add operation using SOAP 1.1: Compare with the SOAP UI request structure message: Notice that there are prefixes (tem) from the request message using SOAP UI while there are none from the webpage. For this guide, we will be following the SOAP UI format. Steps in ESR Import the downloaded WSDL as an External Definition in ESR Create the Outbound and Inbound Service Interface is ESR. For simplicity, the request and response message structure will be the same and no mapping will be used. See screenshot below: Outbound Service Interface SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 4 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Inbound Service Interface Save and Activate Steps in ID Create a Party and a Communication Component or just a Communication Component without a Party and of course, the SOAP Receiver Communication Channel (configure proxy if needed) SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 5 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration The Target URL will be http://www.html2xml.nl/Services/Calculator/Version1/Calculator.asmx and the SOAP action is http://tempuri.org/Add as can be seen from SOAP UI Raw screenshot Create the Receiver Determination and specify the receiver business component SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 6 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Create the Interface Determination Create the Sender Agreement – only do this if a Sender Adapter that resides on the Java Stack is used. This guide will be using Abap Proxy/HTTP to trigger the web service. SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 7 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Create the Receiver Agreement Save and Activate SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 8 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Test the Scenario As was stated earlier, ABAP Proxy/HTTP will be used to test this scenario. Create the proxy in ECC by logging-in and typing SPROXY. Look for your SCV -> Service Interface For Package, use $TMP. Just provide something that starts with Y or Z. Use Local Object. Press continue -> complete. Activate your proxy by pressing ctrl+f3 Execute your proxy by pressing f8 -> f8 SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 9 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration You can still edit the values of a and b by pressing ctrl+f2. And when you are satisfied, press f8 The result is successful now we go to the fun part, making it work using SOAP 1.2. SOAP 1.2 Receiver SOAP 1.2 is the improved version of SOAP 1.1. There are a few noticeable but significant differences between the two. Request Message SOAP 1.1 SOAP 1.2 Content Type text/xml application/soap+xml SOAP Action Yes No SOAP Envelope Namespace http://schemas.xmlsoap.org/soap/ envelope/ http://www.w3.org/2003/05/soapenvelope SOAP 1.1 SOAP 1.2 Content Type text/xml application/soap+xml SOAP Envelope Namespace http://schemas.xmlsoap.org/soap/ envelope/ http://www.w3.org/2003/05/soapenvelope Response Message SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 10 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration SOAP Fault SOAP 1.1 SOAP 1.2 Content Type text/xml application/soap+xml SOAP Envelope Namespace http://schemas.xmlsoap.org/soap/ envelope/ http://www.w3.org/2003/05/soapenvelope Details faultcode and faultstring Code with a subnode called Value Reason with a subnode called Text Keep in mind the difference between the Request Messages, because it is already implied that the SOAP Envelope would need to be created. Also, it is still theoretically possible to use the SOAP Receiver Adapter because the HTTP method that will be used is still POST, it is just that the SOAP envelope that will be used is for 1.2. Here is the request message structure of the Add operation using SOAP 1.2: Compare with the SOAP UI request structure message: Notice that the namespace for soap has already changed. SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 11 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Steps in ESR Import the downloaded WSDL as an External Definition in ESR Create the Outbound and Inbound Service Interface is ESR. For simplicity, the request and response message structure will be the same and no mapping will be used. See screenshot below: Outbound Service Interface Inbound Service Interface SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 12 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Create a Java Mapping that will build(request) and remove(response) the SOAP 1.2 Envelope Java Mapping for building the Request Envelope package IA_CreateSOAP12Envelope; import java.io.InputStream; import import import import import com.sap.aii.mapping.api.AbstractTransformation; com.sap.aii.mapping.api.StreamTransformationException; com.sap.aii.mapping.api.TransformationInput; com.sap.aii.mapping.api.TransformationOutput; com.sap.aii.utilxi.core.io.IOUtil; public class CreateSOAP12Envelope extends AbstractTransformation { public void transform(TransformationInput input, TransformationOutput output) throws StreamTransformationException { try{ String strFlatData = ""; String envelope = ""; InputStream inputStream = input.getInputPayload().getInputStream(); inputStream.close(); strFlatData = IOUtil.copyToString(inputStream, "UTF-8"); strFlatData = strFlatData.replaceAll("ns0:",""); strFlatData = strFlatData.replaceAll("n0:",""); strFlatData = strFlatData.replaceAll(strFlatData.substring(strFlatData.indexOf(" xmlns"),strFlatData.lastIndexOf("\"")+1),("")); strFlatData = strFlatData.replaceAll("<","<tem:"); strFlatData = strFlatData.replaceAll("<tem:/","</tem:"); envelope = "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soapenvelope\" xmlns:tem=\"http://tempuri.org/\"><soap:Header/><soap:Body>"+strFlatData.substring(st rFlatData.indexOf("?>")+2)+"</soap:Body></soap:Envelope>"; output.getOutputPayload().getOutputStream().write(envelope.getBytes()); } catch(Exception ie) { } } } SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 13 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Java Mapping for removing the SOAP Envelope package IA_RemoveSOAP12Envelope; import java.io.InputStream; import import import import import com.sap.aii.mapping.api.AbstractTransformation; com.sap.aii.mapping.api.StreamTransformationException; com.sap.aii.mapping.api.TransformationInput; com.sap.aii.mapping.api.TransformationOutput; com.sap.aii.utilxi.core.io.IOUtil; public class RemoveSOAP12Envelope extends AbstractTransformation { public void transform(TransformationInput input, TransformationOutput output) throws StreamTransformationException { try{ String strFlatData = ""; InputStream inputStream = input.getInputPayload().getInputStream(); inputStream.close(); strFlatData = IOUtil.copyToString(inputStream, "UTF-8"); strFlatData = strFlatData.replaceAll("<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body>",""); strFlatData = strFlatData.replaceAll("</soap:Body></soap:Envelope>",""); output.getOutputPayload().getOutputStream().write(strFlatData.getBytes()); } catch(Exception ie) { } } } Import the Java Mappings as Imported Archive into ESR Create an Operation Mapping and call the Java Mappings SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 14 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Request Message Response Message Save and Activate SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 15 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Steps in ID Create a Party and a Communication Component or just a Communication Component without a Party and of course, the SOAP Receiver Communication Channel (configure proxy if needed) Take note that there is no longer an entry in the SOAP Action and the Do Not Use SOAP Envelope is ticked. This will ensure that you are overriding the default SOAP 1.1 envelope that XI/PI uses in the native SOAP receiver adapter. Then go to the Module tab and then follow the configuration as shown in the screenshot below. Since the Do Not Use SOAP Envelope option is ticked, the Content Type will default to application/xml, but since the Content Type needs to be application/soap+xml, the need to use the MessageTransformBean becomes apparent. And the Transform.ContentType module configuration ensures that the SOAP 1.2 Content Type is used. SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 16 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Create the Receiver Determination and specify the receiver business component SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 17 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Create the Interface Determination and look for the Operation Mapping created in ESR. Create the Sender Agreement – only do this if a Sender Adapter that resides on the Java Stack is used. This guide will be using Abap Proxy/HTTP to trigger the web service. SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 18 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Create the Receiver Agreement Save and Activate SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 19 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Test the Scenario As was stated earlier, ABAP Proxy/HTTP will be used to test this scenario. Create the proxy in ECC by logging-in and typing SPROXY. Look for your SCV -> Service Interface For Package, use $TMP. Just provide something that starts with Y or Z. Use Local Object. Press continue -> complete. Activate your proxy by pressing ctrl+f3 Execute your proxy by pressing f8 -> f8 SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 20 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration You can still edit the values of a and b by pressing ctrl+f2. And when you are satisfied, press f8 The response is successful. Now to see if we have sent the correct request, check in SXI_MONITOR of XI/PI Then display the message: Request Message – before message mapping (top right) and after message mapping (bottom right) Response Message – this cannot be displayed via moni, so just export the payload as XML. Notice the Content Type is now application/soap+xml. SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 21 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration This concludes the How To Guide for SOAP 1.2. Now we go to HTTP POST. HTTP POST Receiver The HTTP POST is one of the methods that are supported by the HTTP protocol. And is also the method used by the Plain HTTP and SOAP Adapter, except that the SOAP Adapter uses a SOAP Envelope by default. Take note that this approach could also be used for HTTP scenarios that require manipulation of the HTTP Body. Going back to our calculator web service, the HTTP POST specifications give the following structure: Steps in ESR Create a DataType and Message Type for Inbound and Outbound Messages See Sample Request Message Type See Sample ResponseMessage Type SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 22 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Create the Outbound and Inbound Service Interface is ESR. For simplicity, the request and response message structure will be the same and no mapping will be used. See screenshot below: Outbound Service Interface Inbound Service Interface SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 23 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration For this guide, a two-step mapping will be used to create the required output. The first one is a message mapping and the second one is a Java Mapping. Create the message mapping exactly as below: The ampersand sign (&) is needed at the start because this is how HTTP POST parameters are passed in an HTTP Body. Now go to the test tab and test the mapping: The output in the Value column is correct. We only need to retain the Value (&a=7&b=8) and Java Mapping is needed for that. Java Mapping for creating the HTTP Body package IA_CreateHTTPBody; import java.io.InputStream; import import import import import com.sap.aii.mapping.api.AbstractTransformation; com.sap.aii.mapping.api.StreamTransformationException; com.sap.aii.mapping.api.TransformationInput; com.sap.aii.mapping.api.TransformationOutput; com.sap.aii.utilxi.core.io.IOUtil; public class CreateHTTPBody extends AbstractTransformation { public void transform(TransformationInput input, TransformationOutput output) throws StreamTransformationException { SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 24 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration try{ String strFlatData = ""; InputStream inputStream = input.getInputPayload().getInputStream(); inputStream.close(); strFlatData = IOUtil.copyToString(inputStream, "UTF-8"); strFlatData = strFlatData.replaceAll("<AddIn>",""); strFlatData = strFlatData.replaceAll("</AddIn>",""); strFlatData = strFlatData.replaceAll("&amp;","&"); output.getOutputPayload().getOutputStream().write(strFlatData.substring(strFlatDat a.indexOf("?>")+2).getBytes()); } catch(Exception ie) { } } } Import the Java Mapping as an Imported Archive into ESR Create an Operation Mapping and call the Message Mapping and Operation Mapping Request Message SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 25 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Response Message No mapping is required for the response message. Note that when you test your operation mapping, this will result in an unable to display error To see the output, click the SRC icon from the Result. Import the Java Mapping as an Imported Archive into ESR SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 26 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Steps in ID Create a Party and a Communication Component or just a Communication Component without a Party and of course, the SOAP Receiver Communication Channel (configure proxy if needed) or Plain HTTP Receiver For the SOAP Receiver Communication Channel, here is the configuration For the module configuration, see screenshot below: SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 27 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration The MessageTransformBean is used to convert the ContentType from application/xml (due to Do Not Use SOAP Envelope option in Comm Channel) to application/x-www-form-urlencoded that is specified in the Add operation using HTTP POST. For the Plain HTTP Receiver, refer to the screenshot below for the configuration (configure the proxy if needed) Note that the http:// was removed and that the default port for http is 80 unless otherwise specified. It is, however, advisable to just use the SOAP Receiver Adapter because it can use adapter modules. SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 28 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Create the Receiver Determination and specify the receiver business component SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 29 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Create the Interface Determination Create the Sender Agreement – only do this if a Sender Adapter that resides on the Java Stack is used. This guide will be using Abap Proxy/HTTP to trigger the web service. SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 30 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Create the Receiver Agreement Save and Activate SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 31 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Test the Scenario (SOAP over HTTP) As was stated earlier, ABAP Proxy/HTTP will be used to test this scenario. Create the proxy in ECC by logging-in and typing SPROXY. Look for your SCV -> Service Interface For Package, use $TMP. Just provide something that starts with Y or Z. Use Local Object. Press continue -> complete. Activate your proxy by pressing ctrl+f3 Execute your proxy by pressing f8 -> f8 SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 32 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration You can still edit the values of a and b by pressing ctrl+f2. And when you are satisfied, press f8 The response was successful. Now let’s see what happened in XI by finding the message using SXI_MONITOR Request Message – before message mapping (top right) and after message mapping (bottom right) Response Message - before message mapping (top right) and after message mapping (bottom right) SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 33 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Additional Info Flow is from Integration Engine -> Adapter Engine and vice-versa Now let’s see if we use Plain HTTP Receiver Edit the existing receiver agreement Test the Scenario (PLAIN HTTP) Execute your proxy by pressing f8 -> f8 You can still edit the values of a and b by pressing ctrl+f2. And when you are satisfied, press f8 SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 34 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration The response was successful. Now let’s see what happened in XI. Request Message – before message mapping (top right) and after message mapping (bottom right) Response Message - before message mapping (top right) and after message mapping (bottom right) Additional Info As you can see, the PLAINHTTP is visible from the response message. SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 35 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration What if the Sender uses these protocols? SOAP 1.1 Sender The sender will POST to this URL http(s)://host:port/XISOAPAdapter/MessageServlet?channel=p:s:c Where p = party, s = service and c = communication channel A sender communication channel and a sender agreement is required SOAP 1.2 Sender The sender will POST to this URL http(s)://host:port/XISOAPAdapter/MessageServlet?channel=p:s:c Where p = party, s = service and c = communication channel A sender communication channel with the Do Not Use SOAP Envelope option should be used and a sender agreement is required Use Java Mapping/XSLT to remove the SOAP 1.2 Envelope HTTP POST The sender will POST to this URL http://host:port/path?querystring for the complete query, see Plain HTTP Sender Adapter at the references page Java Mapping may be required if the document posted is not an XML. SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 36 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Related Content Request Differences between SOAP 1.1 and SOAP 1.2 SDN Thread for Dynamic Prolog SAP Help for Defining the Plain HTTP Sender Adapter Query SAP Help for Configuring the Plain HTTP Receiver Adapter SAP Help for Configuring the SOAP Sender Adapter SAP Help for Configuring the SOAP Receiver Adapter SAP Help for ABAP Proxy Generation Using PI 7.1 API for Java Mapping SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 37 How to… Use SOAP (1.1/1.2) and HTTP POST for Web Services Integration Copyright © Copyright 2012 SAP AG. All rights reserved. No part of this publication may be reproduced or transmitted in any form or for any purpose without the express permission of SAP AG. The information contained herein may be changed without prior notice. Some software products marketed by SAP AG and its distributors contain proprietary software components of other software vendors. Microsoft, Windows, Excel, Outlook, and PowerPoint are registered trademarks of Microsoft Corporation. IBM, DB2, DB2 Universal Database, System i, System i5, System p, System p5, System x, System z, System z10, System z9, z10, z9, iSeries, pSeries, xSeries, zSeries, eServer, z/VM, z/OS, i5/OS, S/390, OS/390, OS/400, AS/400, S/390 Parallel Enterprise Server, PowerVM, Power Architecture, POWER6+, POWER6, POWER5+, POWER5, POWER, OpenPower, PowerPC, BatchPipes, BladeCenter, System Storage, GPFS, HACMP, RETAIN, DB2 Connect, RACF, Redbooks, OS/2, Parallel Sysplex, MVS/ESA, AIX, Intelligent Miner, WebSphere, Netfinity, Tivoli and Informix are trademarks or registered trademarks of IBM Corporation. Linux is the registered trademark of Linus Torvalds in the U.S. and other countries. Adobe, the Adobe logo, Acrobat, PostScript, and Reader are either trademarks or registered trademarks of Adobe Systems Incorporated in the United States and/or other countries. Oracle is a registered trademark of Oracle Corporation. UNIX, X/Open, OSF/1, and Motif are registered trademarks of the Open Group. Citrix, ICA, Program Neighborhood, MetaFrame, WinFrame, VideoFrame, and MultiWin are trademarks or registered trademarks of Citrix Systems, Inc. HTML, XML, XHTML and W3C are trademarks or registered trademarks of W3C®, World Wide Web Consortium, Massachusetts Institute of Technology. Java is a registered trademark of Oracle Corporation. JavaScript is a registered trademark of Oracle Corporation, used under license for technology invented and implemented by Netscape. SAP, R/3, SAP NetWeaver, Duet, PartnerEdge, ByDesign, SAP Business ByDesign, and other SAP products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of SAP AG in Germany and other countries. Business Objects and the Business Objects logo, BusinessObjects, Crystal Reports, Crystal Decisions, Web Intelligence, Xcelsius, and other Business Objects products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of Business Objects S.A. in the United States and in other countries. Business Objects is an SAP company. All other product and service names mentioned are the trademarks of their respective companies. Data contained in this document serves informational purposes only. National product specifications may vary. These materials are subject to change without notice. These materials are provided by SAP AG and its affiliated companies ("SAP Group") for informational purposes only, without representation or warranty of any kind, and SAP Group shall not be liable for errors or omissions with respect to the materials. The only warranties for SAP Group products and services are those that are set forth in the express warranty statements accompanying such products and services, if any. Nothing herein should be construed as constituting an additional warranty. SAP COMMUNITY NETWORK © 2012 SAP AG scn.sap.com 38