Building Data Integrator Real-time Jobs and Calling Web Services



Similar documents
SAP Master Data Governance- Hiding fields in the change request User Interface

Maintaining Different Addresses and Ids for a Business Partner via CRM Web UI

Business One in Action - How can we post bank fees and charges while posting Incoming or Outgoing Payment transactions?

Integrating Easy Document Management System in SAP DMS

TM111. ERP Integration for Order Management (Shipper Specific) COURSE OUTLINE. Course Version: 15 Course Duration: 2 Day(s)

Alert Notification in SAP Supply Network Collaboration. SNC Extension Guide

Data Archiving in CRM: a Brief Overview

Table of Contents. How to Find Database Index usage per ABAP Report and Creating an Index

Sending Additional Files from SAP Netweaver PI to third Party System

Business Requirements... 3 Analytics... 3 Typical Use Cases... 8 Related Content... 9 Copyright... 10

R/3 and J2EE Setup for Digital Signature on Form 16 in HR Systems

Sample Universe on Microsoft OLAP Cube

Understanding HR Schema and PCR with an Example

NetWeaver Business Client (NWBC) for Incentives and Commissions Management (ICM)

Log Analysis Tool for SAP NetWeaver AS Java

Process Archiving using NetWeaver Business Process Management

SAPFIN. Overview of SAP ERP Financials COURSE OUTLINE. Course Version: 15 Course Duration: 2 Day(s)

HR400 SAP ERP HCM Payroll Configuration

Consume an External Web Service in a Nutshell with good old ABAP

How to Create a Support Message in SAP Service Marketplace

Third Party Digital Asset Management Integration

Enterprise Software - Applications, Technologies and Programming

Single Sign-On between SAP Portal and SuccessFactors

K in Identify the differences between the universe design tool and the information design tool

UI Framework Simple Search in CRM WebClient based on NetWeaver Enterprise Search (ABAP) SAP Enhancement Package 1 for SAP CRM 7.0

How to Add an Attribute to a Case, Record and a Document in NW Folder Management (ex-records Management)

UI Framework Logo exchange without skin copy. SAP Enhancement Package 1 for SAP CRM 7.0

Variable Exit in Sap BI How to Start

Portfolio and Project Management 5.0: Excel Integration for Financial and Capacity Planning

Data Source Enhancement Using User Exit

Budget Control by Cost Center

How To Use the ESR Eclipse Tool with the Enterprise Service Repository

AC200. Basics of Customizing for Financial Accounting: General Ledger, Accounts Receivable, Accounts Payable COURSE OUTLINE

Secure MobiLink Synchronization using Microsoft IIS and the MobiLink Redirector

How to Schedule Report Execution and Mailing

UI Framework Task Based User Interface. SAP Enhancement Package 1 for SAP CRM 7.0

Mass Maintenance of Procurement Data in SAP

SAP NetWeaver BRM 7.3

Duet Enterprise Add SAP ERP Reports and SAP BI Queries/Workbooks to Duet Enterprise Configuration

Integration of SAP Netweaver User Management with LDAP

Integration of Universal Worklist into Microsoft Office SharePoint

Download and Install Crystal Reports for Eclipse via the Eclipse Software Update Manager

BW Workspaces Use Cases

ERP Quotation and Sales Order in CRM WebClient UI Detailed View. SAP Enhancement Package 1 for SAP CRM 7.0 CRM Sales - SFA

USDL XG WP3 SAP use case. Kay Kadner

Using User Exit for Variables in BEx Reporting

How To Use the BPC Mass User Management Tool in BPC 10.0 NW

Query, Read, Create and Update CLOUD FOR CUSTOMER ODATA SERVICE QUERY, READ, CREATE AND UPDATE

SAP NetWeaver BPM Tutorial for Beginners: My Name and Age BPM Tutorial

Thread Dump Viewer for SAP NetWeaver AS Java

User Experience in Custom Apps

Installation Guide Customized Installation of SQL Server 2008 for an SAP System with SQL4SAP.VBS

Xcelsius Dashboards on SAP NetWaver BW Implementation Best Practices

LO Extraction Part 1: SD Application Short Overview

SAP Central Process Scheduling (CPS) 8.0 by Redwood

How to Configure Access Control for Exchange using PowerShell Cmdlets A Step-by-Step guide

Configuring Single Sign-on for SAP HANA

SAP Sustainability Solutions: Achieving Customer Strategies

OData in a Nutshell. August 2011 INTERNAL

SAP HANA Cloud Integration Document Version: Template Guide for SAP Sales and Operations Planning

SAP How-To Guide: Develop a Custom Master Data Object in SAP MDG (Master Data Governance)

Supporting SAP POS Best Practices Setting Log File Sizes and Retention

Application Lifecycle Management

Compliant, Business-Driven Identity Management using. SAP NetWeaver Identity Management and SBOP Access Control. February 2010

Unified Service Description Language Enabling the Internet of Services

Business Process Change Analyzer in SAP Solution Manager 7.1

How-to-Guide: Middleware Settings for Download of IPC Configuration (KB) Data from R/3 to CRM System

SAP DSM/BRFPlus System Architecture Considerations

LO Extraction Part 2 Database Update Logic

Quick Guide EDI/IDoc Interfacing to SAP ECC from External System

SAP Service Tools for Performance Analysis

Intelligent Business Operations Chapter 1: Overview & Strategy

BW362. SAP BW powered by SAP HANA COURSE OUTLINE. Course Version: 10 Course Duration: 5 Day(s)

Accounts Receivable. SAP Best Practices

Project Governance The Role Of The Business Process Owner

Fixed Asset in SAP Business One 9.0

SAP Portfolio and Project Management

AP Integration with BRFplus VERSION V APRIL SAP AG

SAP Cloud Strategy - Timeless Software. Frank Stienhans on behalf of Kaj van de Loo SAP

Sales Planning Detailed View. SAP Enhancement Package 1 for SAP CRM 7.0 CRM Sales - SFA

SAP Business ByDesign Reference Systems. Scenario Outline. SAP ERP Integration Scenarios

How to Set Up an Authorization for a Business Partner in Customer Relationship Management (CRM) Internet Sales: Sample Case

Configuring Distribution List in Compliant User Provisioning

Production Subcontracting (External Processing) SAP Best Practices

How to configure BusinessObjects Enterprise with Citrix Presentation Server 4.0

RUN BETTER Become a Best-Run Business with Remote Support Platform for SAP Business One

Learning Series: SAP NetWeaver Process Orchestration, secure connectivity add-on 1c SFTP Adapter

Supplier Master Data Governance

SOP through Long Term Planning Transfer to LIS/PIS/Capacity. SAP Best Practices

Implementing SSO between the Enterprise Portal and the EPM Add-In

BICS Connectivity for Web Intelligence in SAP BI 4.0. John Mrozek / AGS December 01, 2011

SAP BusinessObjects Increasing Stability by Setting Limits on Max. Retrievable Cells from SAP BW into Web Intelligence using BICS

Ariba Network Integration to SAP ECC

Run SAP like a Factory

How To Configure MDM to Work with Oracle ASM-Based Products

Creating New Dashboard Packages for SAP Business One 8.8

Finding the Leak Access Logging for Sensitive Data. SAP Product Management Security

Microsoft Excel 2007 & SAP Business Explorer Compatibility

Learning Series: SAP NetWeaver Process Orchestration, business to business add-on EDI Separator Adapter

Transcription:

Building Data Integrator Real-time Jobs and Calling Web Services Applies to: SAP BusinessObjects Data Integrator 11.7.0.0 For more information, visit the Business Objects homepage. Summary This white paper shows how to construct a real-time job, expose it via a web service, and invoke a web service using Data Integrator (DI). It follows on from a previous white paper Manipulating XML using Data Integrator. The supplemental files referred to in this article are available for download on the SAP Community Network. Author: Michael Eaton Company: SAP Created on: 15 March 2009 2009 SAP AG 1

Table of Contents Introduction...3 Ensuring the Correct Configuration...3 Sample Use Case...7 Building the Real-time Job...7 Testing the Real-time Job...17 Configuring the Real-time Service...19 Exposing the Real-time Job as a Web Service...23 Importing the Web Service...25 Building a Batch Job to Call a Web Service...28 Executing the Batch Job...34 Related Content...36 Copyright...37 2009 SAP AG 2

Introduction This white paper shows how to construct a real-time job, expose it via a web service, and invoke a web service using Data Integrator (DI). It follows on from a previous white paper Manipulating XML using Data Integrator. This is not a DI tutorial and knowledge of building DI batch jobs is required. However, I have assumed that the audience has no real-time knowledge. In the following DI examples, all the sample files have been written to local folder -c:\documents. If you are going to follow the examples, place the sample files into a location where your job server can read them, and use that location when building the examples. You must have completed the previous white paper (mentioned above) if you plan to build the examples. Ensuring the Correct Configuration To ensure real-time jobs and adapters work correctly, the following minor configuration tasks must be completed: 1. The repository must be associated with a web administrator. 2. A job server must be present with adapter communication enabled. 3. An access server must be running and associated with a web administrator. To associate a repository with a web administrator, use the Management > Repositories node in the web administrator as shown in Figure 1: Figure 1 - Associating a Repository with a Web Administrator 2009 SAP AG 3

Figure 2 shows the Job Server Properties dialog, the checkbox in the top pane must be checked to support adapter communication. Figure 2 - Job Server Properties Dialog 2009 SAP AG 4

The screenshot below shows the server manager, the third section down allows an access server to be configured. Figure 3 - Server manager 2009 SAP AG 5

If you performed a typical installation, a WebService adapter will already be configured. Figure 4 shows the Adapter Instances portion of the administrator. If the adapter is not configured, add one using the adapter configuration tab. Figure 4 - Adapter Instances The screenshot in Figure 5 shows the status page of the web administrator with everything setup and configured correctly. Figure 5 - Fully Configured Web Administrator 2009 SAP AG 6

Sample Use Case To demonstrate the real-time and web service features of DI, the use case we ll use is a very simple address lookup service. A consumer will create a request containing a postcode, and the service will return all matching addresses for that postcode. The sample data from the previous white paper will be used. Building the Real-time Job At runtime, real-time jobs accept an XML message as their input and return an XML message as their output. The structure of these messages is defined using an XML schema (or DTD), so the first thing we must do is to import source and target XML schemas. Two sample schemas are included in the supplemental.zip file, postcodelookuprequest.xsd and postcodelookupreply.xsd. <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema" elementformdefault="qualified" attributeformdefault="unqualified"> <xs:element name="postcodelookuprequest"> <xs:complextype> <xs:sequence> <xs:element name="postcode"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:maxlength value="7"/> </xs:restriction> </xs:simpletype> </xs:element> </xs:sequence> </xs:complextype> </xs:element> </xs:schema> <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema" elementformdefault="qualified" attributeformdefault="unqualified"> <xs:element name="postcodelookupreply"> <xs:complextype> <xs:sequence> <xs:element name="postcode"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:maxlength value="7"/> </xs:restriction> 2009 SAP AG 7

</xs:simpletype> </xs:element> <xs:element name="address" minoccurs="0" maxoccurs="unbounded"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:maxlength value="50"/> </xs:restriction> </xs:simpletype> </xs:element> </xs:sequence> </xs:complextype> </xs:element> </xs:schema> We import these XML definitions by creating a new XML Schema object in DI. In the following examples I import the definition from a local drive, whilst this is fine for the examples, in reality the location of the definition would be published within the domain where it would be used, and referenced by a URL or UNC. 1. From the main menu, select Project, New, XML Schema as shown in Figure 6. Figure 6 - Creating an XML Schema When importing the schema (see Figure 7) we must specify a name for it within DI (I use the schema name), the location of the schema, and the root element name. 2009 SAP AG 8

2. Click OK to import the request schema. Figure 7 - Importing The Request Schema DI imports the definition and it can be viewed in the local object library under the formats tab, as shown in Figure 8. Figure 8 - Formats Tab 2009 SAP AG 9

3. Double-click the schema to display the NRDM interpretation. Figure 9 - Request NRDM 4. Repeat the above process to import the reply schema. Figure 10 - Importing the Reply Schema Figure 11 - Reply NRDM Once we have imported the request and reply schemas when can build the real-time job. 2009 SAP AG 10

5. Create a new real-time job (right click in a project and select New Real-time Job) and call it RT_Postcode_Lookup. A real-time job contains placeholders that denote the code that will be executed in real-time. Any code between these placeholders will be executed for each XML message received. See Figure 12 for the empty real-time job. Figure 12 - New real-time Job 6. Add a new dataflow (DF_Postcode_Lookup) and connect it up to the placeholders as shown in Figure 13. Figure 13 New Dataflow In Real-Time Job 2009 SAP AG 11

7. Open the dataflow and drag the request schema from the object library onto the dataflow. Select Make XML Message Source from the popup menu as shown in Figure 14. Figure 14 - Add Message Source To Dataflow 8. Drag the reply schema onto the dataflow and make that an XML message target. Figure 15 - Add Message Target to Dataflow 9. Add demo_postcode and demo_address tables (from the previous white paper) to the dataflow as sources. Figure 16 - Add Table Sources to Dataflow 2009 SAP AG 12

10. Add a query (get_addresses) and connect all the sources to it. Figure 17 - Adding get_addresses Query Our real-time dataflow must get all addresses for the postcode that is passed in the request message. 11. Open the query and specify the where clause shown in Figure 18. 12. Drag the ADDRESS column from the DEMO_ADDRESS table to the output schema. Figure 18 - Get_Addresses Query Detail 2009 SAP AG 13

13. Add another query to the dataflow and connect the request and the output from the get_addresses query to it (as well as the reply message) as shown in Figure 19. Figure 19 - Adding the build_reply query 14. Open the build_reply query and complete the mapping as follows i. The from clause for the build_reply node (in the output schema) should only contain postcodelookuprequest. You should remove the get_addresses source. (Figure 20) ii. Map the postcode output column to postcodelookuprequest.postcode (Figure 21) iii. The from clause for the postcodelookupreply_nt_1 node should contain the get_addresses source (remember to make current first) (Figure 22) iv. Map the address ouput column to get_addresses.address (Figure 23) Figure 20 build_reply Node 2009 SAP AG 14

Figure 21 - Postcode Node Mapping Figure 22 - postcodelooupreply_nt_1 from clause 2009 SAP AG 15

Figure 23 - Address Node Mapping The reason this query is mapped like this is because a postcode might not generate any address records, that is why the output postcode is mapped from the request message. A where clause is not required in this NRDM as we have already filtered the data in the get_addresses query. The reason this dataflow is broken down into two queries is purely for clarity. The real-time job is now complete. 2009 SAP AG 16

Testing the Real-time Job The real-time job is complete, but it has not been tested yet. DI allows us to functionally test a real-time job by running it as a batch job. We must specify an XML file to be used as the request (which must exist) and the name of a target XML file that will be created as the response. A sample request file, postcodelookuprequest.xml is included in the ZIP file. <?xml version="1.0" encoding="utf-8"?> <! Sample request to test DI real-time job, created by Michael Eaton. --> <postcodelookuprequest> <postcode>de150lq</postcode> </postcodelookuprequest> 1. Open the editor for the request message (postcodelookuprequest) and specify this file as the XML test file: as shown in Figure 24. Figure 24 - Specifying the Request Test File 2009 SAP AG 17

2. Open the editor for the response message (postcodelookupreply) and provide a filename for the XML test file:, this file does not have to exist as DI will create it. See Figure 25. Figure 25 - Response Test File Name When you execute the job, it should produce an XML file similar to the following: <?xml version="1.0" encoding="utf-8"?> <!-- BusinessObjects Data Integrator generated XML --> <!-- 2008-03-19.16:19:35(347,629)[1] --> <postcodelookupreply xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <postcode>de150lq</postcode> <address>eaton Hall, Eaton Estate</address> <address>the Gardeners Cottage, Eaton Estate</address> </postcodelookupreply> Try changing the postcode in the request XML file and re-running the job. If the postcode lookup does not find any matching addresses, it simply returns the request postcode, as shown below. <?xml version="1.0" encoding="utf-8"?> <!-- BusinessObjects Data Integrator generated XML --> <!-- 2008-03-19.16:25:33(406,019)[1] --> <postcodelookupreply xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <postcode>zz1</postcode> </postcodelookupreply> 2009 SAP AG 18

Configuring the Real-time Service Now that the real-time job has been tested, we can now execute it. This is done by configuring a real-time service from the web administrator. Open the administrator and navigate to the Real-Time Services node as shown in Figure 26. Figure 26 - Real-Time Services Node in Web Admin 1. Click the Real-Time Services Configuration tab and then click the Add button as shown in Figures 27 and 28. Figure 27 - Real-Time Services Configuration Tab 2009 SAP AG 19

Figure 28 - New Real-Time Service 2. Click the Browse Jobs button and select the real-time job we created earlier, giving the service a suitable name (Figure 29). Figure 29 - New Real-Time Service 2009 SAP AG 20

3. Click the Apply button to create the real-time service. Figure 30 - Provider Configuration It is possible to configure multiple providers for each service. The default is one provider, which will process all messages for the service in series. If more than one provider is configured each provider will process messages in parallel with other providers, allowing for an increase in throughput. 4. Click the Real-Time Services node to see the new service (Figure 31). Figure 31 - New Real-Time Service 2009 SAP AG 21

5. Select the service and click the Start button. Figure 32 - Real-Time Service Started It is possible to configure multiple real-time services that use the same real-time job. An example configuration might be two real-time services, where each one uses a different system configuration. One service might be called Lookup_UK and the other Lookup_NI. Each service would use separate database (controlled via the separate system configurations) for their lookup data. Now that the real-time service is started, it is available to process messages (to perform postcode lookups) from various types of clients. For example, messages might be sent from a DI JMS (Java Message Service) adapter instance, a custom client written in Java, C++, etc. using the DI message client library (a very simple API), or via DI s web service (covered in the following sections). 2009 SAP AG 22

Exposing the Real-time Job as a Web Service DI allows real-time services to be exposed via DI s web service so that web service clients can invoke them. Each real-time service that is published via this mechanism appears as an operation in DI s WSDL. In a typical single machine installation the WSDL URL would be http://localhost:28080/diadmin/servlet/webservices?wsdlxml. 1. To publish the postcode lookup real-time service, click the Web Services node in the web administrator (Figure 33). Figure 33 - Web Services 2. Click the Web Services Configuration tab (Figure 34). Figure 34 - Web Services Configuration 3. Click the Add Real-time Service button. The PostcodeLookup real-time service appears in the list of real-time services. 2009 SAP AG 23

4. Select it and click the Add button as shown in Figure 35. Figure 35 - Add Real-Time Service The real-time service is now published with the operation name PostcodeLookup (as shown in Figure 36). It may take a few moments to appear in the list. Figure 36 - Published Operations Our real-time service can now be invoked by web service clients. Web service clients can be written in a variety of languages and execute on various platforms, this means that the postcode lookup functionality can be consumed by a wide range of processes. 2009 SAP AG 24

Importing the Web Service The previous sections covered writing and publishing the postcode lookup functionality as a web service operation. As well as publishing web services, DI is capable of consuming web services. The next sections describe how to invoke the postcode lookup service, although a web service written in any language running on any platform can be invoked in exactly the same way. Before we can import the metadata for a web service, a web service adapter must be configured (as covered in a previous section). Web service metadata is imported via a datastore, so the first step is to create a new datastore. Figure 37 - Create New Datastore 2009 SAP AG 25

1. The Datastore type must be Adapter. Job Server and Adapter instance name will be specific to each environment. URL of Web Service (actually this is to specify the location of the WSDL) should be http://localhost:28080/diadmin/servlet/webservices?wsdlxml (replace localhost:28080 with your web admin host and port) Figure 38 - Create Datastore 2. Click OK to create the new datastore and then double-click the new datastore in the object library. Figure 39 - New Datastore In Library DI should read the WSDL and display the metadata, as shown below. 2009 SAP AG 26

3. Right-click the PostcodeLookup operation and import it. The imported operation appears as a function in the datastore. Figure 40 - Import Operation Figure 41 - The Imported Function The web service operation can now be invoked. 2009 SAP AG 27

Building a Batch Job to Call a Web Service 1. Create a new batch job with a single dataflow. Figure 42 - batch job to call WS 2. Within the dataflow add a row generation as the source and a query. Figure 43 Row Generation When performing a function call in DI, the input schema must match the function input schema, and it can be tricky to create the exact structure. The easiest way to do this is to copy it from the function metadata. 2009 SAP AG 28

3. Copy the postcodelookuprequest node from the $REQUEST_SCHEMA as shown in Figure 44 and paste in into the output schema of nest_data as shown in Figure 45. Figure 44 - Request Schema Figure 45 - Paste Schema 2009 SAP AG 29

4. Make the postcodelookuprequest node current and add Row_Generation to the from clause. Figure 46 - From Clause For postcodelookuprequest Node 5. Specify a hard-coded postcode for the postcode node. 6. Add another query to the dataflow. Figure 47 - Mapping ror Postcode Node Figure 48 - Invoke Query 2009 SAP AG 30

7. Within the second query, we now use the imported web service function, right-click and choose New Function Call. Figure 49 - New Function Call 8. Select the postcodelookup function from the adapter datastore and click Next. Figure 50 - Select Function 2009 SAP AG 31

9. We must now map the schemas, the easiest way to do this is to drag the postcodelookuprequest node from the input schema onto the same node in the input schema of the function (see Figure 51). Figure 51 - Define Input Parameters 10. Click Finish. The mapping is complete as shown in Figure 52. Figure 52 - Function Call Mapping 2009 SAP AG 32

11. Add an XML Template to the dataflow to capture the output of the function call. Note that we are only using this to see the results, in reality the output might be fed into other queries and tables, for example. Figure 53 - Add XML Template 12. Specify an output filename for the XML template. The batch job is now complete. Figure 54 - XML Template Filename 2009 SAP AG 33

Executing the Batch Job Execute the batch job as you would normally and then open the output file specified for the template XML. You should see the request postcode (specified in the query) together with the relevant addresses from the lookup tables. If you do, you have successfully called the DI web service (and the real-time service) to perform the lookup. Figure 55 - Lookup Result 2009 SAP AG 34

In the web administrator you see that the requests have changed from 0 to 1 for the real-time service and the web service operation. Figure 56 Real-Time Requests Figure 57 - Operation Requests Try changing the hard-coded request postcode and re-running the job. 2009 SAP AG 35

Related Content BusinessObjects Information Management Community Supplemental Files for this Article 2009 SAP AG 36

Copyright Copyright 2009 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 Sun Microsystems, Inc. JavaScript is a registered trademark of Sun Microsystems, Inc., 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. 2009 SAP AG 37