Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
Applies to:
Web Dynpro for Java UI Development, SAP NetWeaver 04 SP Stack 17, SAP NetWeaver 04s SP Stack 6
Summary
In this tutorial, you will develop a Web Dynpro application for sending an e-mail message, using an e-mail Web service provided by an external service provider. It fully describes all required development steps like setting up a new project, importing the Adaptive Web Service Model, defining context mapping and binding relations, designing the view layout and implementing the controller code. Use of the e-mail Web service is enabled by an appropriate Adaptive Web Service model generated by the Web Dynpro tools. The quick implementation of this Web Dynpro application is characterized by a highly declarative development process, in which the required implementation workload can be reduced to a few lines of Java code.
Note
This tutorial covers the basic principles of Using the new Adaptive Web Service Model within a Web Dynpro Java application. You can read more advanced technical details on the coding-specific aspects in the related SDN article Adaptive Web Service Model Controller Coding Explained. Both articles are based on the same Web Dynpro sample application.
Author Bio
After his studies in mathematics, physics and computer science Bertram Ganz finished his teacher training at a German grammar school stressing technical sciences. He has been a member of the Web Dynpro Java Runtime development team (SAP NetWeaver ESI Foundation UI) since 2002. The main focus of his work is on knowledge transfer, rollout, and documentation. Bertram regularly publishes articles on Web Dynpro in the context of the SAP NetWeaver Application Server. Bertram is co-author of the books Maximizing Web Dynpro for Java and Java Programming with the Web Application Server.
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
Table of Contents
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model ............................... 1 Summary.......................................................................................................................................... 1 Author Bio ........................................................................................................................................ 1 Table of Contents ............................................................................................................................ 2 Introduction ...................................................................................................................................... 3 Whats New in SAP NetWeaver 04s ............................................................................................ 3 Objectives .................................................................................................................................... 4 Prerequisites ................................................................................................................................ 4 Creating the Project Structure ......................................................................................................... 5 Creating a Web Dynpro Project ................................................................................................... 5 Creating a Web Dynpro application with a Web Dynpro component........................................... 5 Result ........................................................................................................................................... 5 Importing an Adaptive Web Service Model ..................................................................................... 7 Importing a New Adaptive Web Service Model in a Component ................................................. 7 Result ........................................................................................................................................... 9 Defining Mapping and Binding Relations....................................................................................... 10 Result ......................................................................................................................................... 12 Mapping View Context Elements to Component Context Elements ............................................. 12 Defining a Context Mapping in the Data Modeler ...................................................................... 12 Result ......................................................................................................................................... 13 Creating the SendEmail Action...................................................................................................... 14 Result ......................................................................................................................................... 15 Designing the View Layout ............................................................................................................ 15 Creating a layout for the EmailFormView view .......................................................................... 15 Data Binding to the View Context .............................................................................................. 18 Binding Action to onAction Event of the UI Element SendButton ......................................... 18 Implementing the Controller Code ................................................................................................. 19 Adding the Implementation for the Web Service Connection .................................................... 19 Implementing the Method wdDoInit()of the Component Controller ..................................... 19 Implementing the public method sendEmail()in the Component Controller.......................... 20 Implementing the Action Event Handler onActionSendEmail() .......................................... 21 Result ......................................................................................................................................... 22 Building, Deploying, and Running the Project ............................................................................... 22 Building the Project .................................................................................................................... 22 Deploying and Launching the Application.................................................................................. 22 Result ......................................................................................................................................... 22 Related Content............................................................................................................................. 24 Copyright........................................................................................................................................ 25
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
Introduction
In this tutorial, you will develop a Web Dynpro application for sending an e-mail message, using an e-mail Web service provided by an external service provider. The user interface of this Web application is to consist of a simple input form for editing the addresses of senders and recipients, the subject, and the actual e-mail message, and a button for sending the message. A message is to be displayed in the Web browser to inform users of whether or not the e-mail message was successfully sent. Use of the e-mail Web service is enabled by an appropriate Adaptive Web Service model (model entity and model classes) generated by the Web Dynpro tools. At runtime, the data entered by the user of the application is passed to the model through the data binding between the input fields and the context elements, and through the model binding of these context elements. The model communicates with the Web service provider through the Web Dynpro Runtime and the Web Service Runtime as part of the SAP NetWeaver Application Server Java.
Window
Component Controller
Model Usage
Web Browser
HTTP
EmailFormView
EmailFormView Controller
The quick implementation of this Web Dynpro application is characterized by a highly declarative development process, in which the required implementation workload can be reduced to a few lines of Java code. Whats New in SAP NetWeaver 04s The new Adaptive Web Service Model was introduced in SAP NetWeaver 04 SP Stack 17 and SAP NetWeaver 04s SP Stack 6 replacing the former Web Service Model. The new Adaptive Web Service Model provides additional functions which yield the following advantages:
Enhanced Web Service Model Implementation: Common Model Interface (CMI) implementation with a generic and a typed model class layer. Typed model classes are based on generic base and/or delegation classes so that bug fixes are possible without requiring a new code generation. Improved support for WSDL and XML schema constructs with a better knowledge about given limitations Allow renaming of model classes during import Runtime settings are configurable at runtime through WS-Runtime configuration and logical Web Service destinations.
Logical Web Service Destinations: Configuration of connection, authentication, encryption settings (not applied in this tutorial sample application)
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
NOTE: Currently Logical Web Service Destinations can only be defined for those Web Service providers supporting WSIL (Web Service Inspection Language). Modify HTTP, SOAP, security settings via API (e.g. to set non-SAP SSO cookie)
Advanced Web Service Security Support Advanced security settings are supported via the Web Service Runtime Service Extension Interfaces Single-Sign-On support (SSO)
Debugging and Tracing Support Tracing of model content ((model data and metadata) and SOAP traffic for problem analysis HTTP request/response for SOAP calls
Create an Adaptive Web Service model to be used for connecting an external Web service from within the Web Dynpro project Declare a context node in the component controller and create a binding-relation to the model. Perform context mapping between the view controller and the component controller. Design a simple view layout for sending an e-mail message Create an action and implement an event handler Create the data binding from UI elements to context attributes Display the message texts in the Web Browser using a UI service provided by the Web Dynpro runtime environment Perform the implementation for availing of the e-mail Web service used.
You have installed SAP NetWeaver 04 SP 17 or SAP NetWeaver 04s SP 6 You have launched the SAP NetWeaver Developer Studio. You have access to the SAP J2EE Engine. You can connect to a database instance of the SAP DB. You have an open Internet connection. The service provider e-mail Web service used in the tutorial is available.
SAP AG cannot guarantee the availability of the third-party Web service used in this tutorial and does not assume any responsibility for the quality of this service. Knowledge
You have acquired some basic experience with Web Dynpro applications - for example, by working through the Welcome Quickstart Guide (Creating Your First Web Dynpro Application). Basic knowledge of Java would be an advantage.
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
8. Let the radio button Embed new View selected and give the new view the name EmailFormView. 9. Choose Finish. Result You have now created the basic project structure for the new Web Dynpro project TutWD_EmailAdWS. In the Web Dynpro Explorer, the following nodes are displayed for the structure:
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
You have now made all the preparations necessary to develop the specific functions of the example application.
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
SAP AG does not accept any responsibility regarding the availability and quality of the external e-mail service used in this tutorial. Prerequisites The service provider can load the WSDL description of the e-mail Web service. The Web service described functions correctly. Importing a New Adaptive Web Service Model in a Component To create a model that is based on a certain Web service, you first require the URL address through which the corresponding WSDL description can be accessed. If the address is known, you can then easily create an appropriate Web Dynpro model easily. 1. In the project structure, expand the node Web Dynpro Web Dynpro Components EmailAdWSComp. 2. From the context menu, choose Open Data Modeler to start the Data Modeler. Alternatively, you can double-click the node. 3. 4. 5. 6. In the Data Modeler toolbar, choose the Create a model icon. Place the cursor on the Used Models area and left-click. The appropriate wizard appears. Choose the Import Adaptive Web Service Model option, followed by Next. Enter the name EmailAdWSModel as the model name and com.sap.tc.wd.adws.model.email as the package name.
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
7.
Under Select WSDL Source, choose the radio button UDDI or URL, followed by Next.
8.
9.
Enter the following WSDL description for the e-mail Web service in the Wsdl field: http://www.abysal.com/soap/AbysalEmail.wsdl
10.
The next wizard page lets you rename namespaces and model class names. After having selected a namespace in the upper table you could select fields in column Editable Model Class Name of the table below to replace the a given model class names with custom model class names.
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
Choose Next, as the given model class names are not changed in this sample application.
The corresponding Adaptive Web Service model classes are then generated by the importer, which displays a detailed description of the successfully finished model import. Note Bear in mind that importing a new Web Dynpro model takes place in the first instance on project level and independent from the components contained therein. If a model is to be used in a component, you have to define a corresponding model usage. This usage-relation is automatically defined by the data modeler when carrying out the procedure mentioned above. Result After the Web Service model has been imported, the corresponding entries are inserted under the EmailAdWSModel node in the Web Dynpro Explorer.
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
The nodes contained in the EmailAdWSModel represent the Model Classes ( , executable model classes ) and their relations ( ) that are visible to you as the application developer. You can subsequently bind the appropriate context elements to these classes and relations (Context-to-Model binding) to transfer model data between context and model.
Binding the Component Controller Context to the Adaptive Web Service Model In the Data Modeler, you can easily declare the connection between the context of the component controller and the Web service model you have created. 1. 2. 3. 4. 5. In the project structure, expand the node Web Dynpro Web Dynpro Components EmailAdWSComp. In the context menu, choose the item Open Data Modeler. In the left toolbar, choose the icon Create a data link. Begin above the rectangle Component Controller and left-click. Do this without releasing the mouse button. Draw a line to the EmailAdWSModel rectangle and release the primary mouse button. The Model Binding Wizard starts automatically.
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
6.
Drag the node of the model class Request_SendEmail in the EmailAdWSModel to the root node of the component controller context, and drop it.
7.
In the subsequent dialog, select the context attributes ReturnCode of the inner context model node SendEmailResponse and the attributes FromAddress, MsgBody, Subject and ToAddress of the inner model node SendEmail.
8.
In the dialog box that appears next, the declared context-to-model bindings between the context model nodes and the related model classes in the EmailAdWSModel are shown graphically:
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
9. 10.
Close the Model Binding Wizard by choosing Finish. After completion of the model binding, the context structure of the component controller looks as follows:
Result Starting with the model definition, you have now defined a structure of context model elements (model nodes and model attributes) in the component controller EmailAdWSComp, and then linked it to the corresponding model classes.
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
Note The context elements mapped onto one another do not have to have the same name. At the right side of the context mapping dialog window you can rename mapped context elements. 7. In the final dialog box, the context mapping declared between view and the component controller context is displayed graphically:
Result You have created the necessary view context and mapped it to the component context you created previously.
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
You are now in a position to bind UI controls such as input fields to the corresponding context elements.
At runtime, the Text field entry is automatically displayed in the field Text on the button (UI element) after its onAction event is bound to the SendEmail action. After you have defined the new action named SendEmail, a corresponding event handler named onActionSendEmail() is automatically created in the view controller class EmailFormView.java. The actions defined for a view are listed in the View Designer on the Actions tab.
6. Then switch to the Implementation tab. In this way, the Java classes belonging to the view controller are regenerated. The User Coding Areas that are accessible to you as the application developer are actually implemented in the class EmailForm.java, which has now been extended to include the event handler onActionSendEmail().
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
Result In this step, you created the SendEmail action for the EmailFormView view. You can now bind a button UI elements onAction event to this action, which you will do in the next step. At runtime, the onActionSendEMail event handler is then called after you have clicked the button for sending the e-mail message in the view controller.
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
1. Open the EmailFormView view in the View Designer by clicking the Layout tab. 2. The View Designer displays a existing default text. Simultaneously, the Outline view displays a list of the UI elements included. If you select an element in the Outline view or on the Layout tab, its associated element properties are shown in the Properties view. 3. First, adapt the individual properties of the two existing UI elements: Property Value
For the TextView element named DefaultTextView Properties of TextView design Properties of TextView text LayoutData hAlign LayoutData paddingBottom header1 Web Dynpro Email Web Service center large
4. Add a Group UI element named EmailFormGroup. To do this, go to the context menu and choose the entry InsertChild above the root element RootUIElementContainer of the Outline. Make the following settings: Property Value
For the Group UI element EmailFormGroup Properties of Group defaultButtonId Properties of Group design Properties of Group layout Properties of Group scrollingMode Properties of Group width LayoutData hAlign SendButton sapcolor MatrixLayout none 70% center
With the property defaultButtonId you relate the Group UI element with a so-called default button. The action, to which this default button is bound, is automatically triggered by the Web Dynpro client as soon as the user presses the Return key inside a focused InputField UI element (contained in the Group UI element).
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
The e-mail input form consists of several pairs of Label and InputField UI elements as well as a button for sending the e-mail message. This form can be added easily by using the Form-Template-Wizard for Web Dynpro tools in the view layout. 5. In the view layout, select the UI element EmailFormGroup and then choose the entry Apply Template in the context menu. 6. Choose the Form icon in the dialog box and then choose Next. 7. Select the inner context node SendEmail, as well as all context attributes contained in this node. The checkboxes Response and ReturnCode must not be checked:
8. In the next step, change the order of the user interface elements (using the arrow keys) to FromAddress, ToAddress, Subject and MsgBody. 9. Select the editor TextEdit for the attribute MsgBody and then press Finish. 10. After that, change the text property for the individual Label-UI-elements to From, To, Subject and Message. 11. Select the UI element MsgBody_label and set its property LayoutData vAlign to the value top. 12. In the Group UI element EmailFormGroup, add an invisible UI element and a Button UI element with ID SendButton und and carry out the stated settings. This button is the default button of the Group UI element EmailFormGroup. To display message texts within the Group UI element we finally add a MessageArea UI element. Property Value
UI element InvisibleElement of type InvisibleUIElement Properties of InvisibleElem. layoutdata Button SendButton of type Button Properties of Button id Properties of Button Tooltip Properties of Button layoutdata SendButton Send Email MatrixData MatrixHeadData
UI element MessageArea of type MessageArea Properties of MessageArea layoutdata LayoutData of MessageArea colSpan MatrixHeadData 2
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
Data Binding to the View Context Data binding between the UI elements in the email form and the corresponding context elements was already defined automatically during the previous step in the Form Template Wizard. Binding Action to onAction Event of the UI Element SendButton So that the e-mail message (entered on the client side) can be sent to the Web service (on the server side) using the view controller, a server round trip must be triggered by the SendEmail action. To do this, you bind the onAction event of the Button UI element SendButton to the action you have created, SendEmail. To do this, define the following action binding: Property Value
You bind the action to a user interface element event using the selection list in the right column in the Properties view.
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
Controller of the Component EmailAdWSComp: The component controller implements the access to the used e-mail Web Service model. The context of the controller contains model nodes and model attributes, which are bound to the imported Web Service model. Alongside the initialization method wdDoInit(), you implement a public method named sendEmail() to allow another controller to call the e-mail Web Service. Controller of the EmailFormView view: In the implementation of the view controller, you have to implement the event handler onActionSendEmail(), which , at pressing the pushbutton to send an email message (Action SendMail), is called and displayed on the user interface.
Implementing the Method wdDoInit()of the Component Controller At runtime, the context model node Request_SendEmail that is bound to the model must initially be associated to an instance of the appropriate executable model class Request_SendEmail. After that, this model object can be used in the public method sendEmail() to execute the Web Service call. 1. Select the node Web Dynpro Web Dynpro Components EmailAdWSComp Component Controller and then click on the tab page Implementation. 2. After the generation routines have been run once again, the updated source code of the component controller implementation is displayed. 3. Now add the following Java code into the User Coding Area provided.
/** Hook method called to initialize controller. */ //@@end public void wdDoInit() { //@@begin wdDoInit() // create a new model instance (1) model = new EmailAdWSModel(); // create model objects (2, 3) Request_SendEmail requestMO = new Request_SendEmail(model); SendEmail emailMO = new SendEmail(model); // associate model objects (4) requestMO.setSendEmail(emailMO); // bind executable model object to context node (5) wdContext.nodeRequest_SendEmail().bind(requestMO); //@@end } ... //@@begin others // declare member variable for model instance of type EmailAdWSModel private EmailAdWSModel model;
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
//@@end
4. To enter the source code, you can avail of the Code Assist functions provided by the SAP NetWeaver Developer Studio by selecting the keyboard combination CTRL+SPACE. 5. You can add the missing import statements automatically by choosing Source Organize Imports from the context menu or by selecting the keyboard combination STRG+SHIFT+O :
//@@begin imports import com.sap.tc.wd.adws.comp.email.wdp.IPrivateEmailAdWSComp; import com.sap.tc.wd.adws.model.email.EmailAdWSModel; import com.sap.tc.wd.adws.model.email.Request_SendEmail; import com.sap.tc.wd.adws.model.email.SendEmail; //@@end
Important Note Contrary to the Adaptive RFC Model or to the former Web Service Model the new Adaptive Web Service model object creation always requires a model instance. The model instance is not created and maintained by the Adaptive Web Service model itself. When creating new model object instances the model must be always passed to the constructor. Implementing the public method sendEmail()in the Component Controller The actual Web Service call for sending the e-mail message is implemented in the public method sendEmail() in the component controller. Thus, the communication with the e-mail Web Service in the component controller is encapsulated. The connection between the view- and component context was already defined beforehand via the definition of the context-mapping. Thereby, the view-context points at the context data stored in the componentcontext. As the component controller is used for context-mapping, its IPublic-API (contains public methods) is also accessible in the view-controller. In the Component Controller define the new public method sendEmail(). 1. 2. 3. 4. In the Component Controller switch to the Methods tab page. Choose New to add a new public controller method. In the first dialog step, select method type Method. Enter the name sendEmail for the method, thereby keeping the type of the return value, void.
5. Close this declaration step by choosing Finish. 6. Use the Implementation tab page to implement the newly defined method. 7. In the public method sendEmail(), add the following source code: You find more detailed background information about the methods execute() and invalidate() in the tutorial appendix .
//@@begin javadoc:sendEmail() /** Declared method. */ //@@end public void sendEmail() { //@@begin sendEmail() IWDMessageManager msgMgr = wdComponentAPI.getMessageManager(); Request_SendEmail requestMO = wdContext.currentRequest_SendEmailElement().modelObject(); requestMO.wdSetInvocationLogEnabled( logger.beDebug() ? true : false); try { // call Email Web Service and update dependent // model node 'Response'
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
wdContext.currentRequest_SendEmailElement() .modelObject().execute(); wdContext.nodeResponse().invalidate(); BigDecimal returnCode = wdContext.currentSendEmailResponseElement().getReturnCode(); String msg = "Email Web Service returned " + returnCode.toString(); if (returnCode.intValue() == 0) { msgMgr.reportSuccess("Your email was successfully sent (" + msg + ")!"); } else { msgMgr.reportWarning( "Your email was not successfully sent (" + msg + ")!"); } } catch (CMIException ex) { msgMgr.reportException(ex.getLocalizedMessage(), true);
this.logWSInvocation(requestMO, ex);
} //@@end }
Notes To use the generic UI service provided by the interface IWDMessageManager for displaying message texts in the user interface, you must insert an appropriate import line in the controller implementation. To do this, choose the entry Source Organize Imports from the context menu of the source code editor (Implementation tab). For the sake of simplicity we do not define translatable message texts in the components message pool here but directly pass hard-code message strings to the message manager. In an internationalized Web Dynpro application translatable texts and messages must be defined in the message pool first; afterwards you can access them as constants of the generated interface IMessage<component name>. After the import statements have been adjusted, the IWDMessageManager interface is imported into the component controller.
//@@begin imports ... import com.sap.tc.webdynpro.progmodel.api.IWDMessageManager; //@@end
Implementing the Action Event Handler onActionSendEmail() After you implemented the component controller, you only have to call the public method sendEmail() of the component controller in the action event handler onActionSendEmail() of the view controller to trigger the e-mail Web Service call. 8. After selecting the node Web Dynpro Web Dynpro Components EmailAdWSComp Views EmailFormView, change to the tab page Implementation to display the implementation of the view controller. 9. In the onActionSendEmail() method, enter the following source code:
public void onActionSendMail( com.sap.tc.webdynpro.progmodel.api.IWDCustomEvent wdEvent ){ //@@begin onActionSendMail(ServerEvent) wdThis.wdGetEmailAdWSCompController().sendEmail(); //@@end }
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
Result The Developer Studio updates and compiles the Java classes belonging to your project. (Note: Compilation only occurs if you are using the Workbench standard settings.) After you have done this, no more error messages should appear in your tasks view.
The external e-mail Web service used in the example application is available. You have made sure that the SAP J2EE Engine has been launched and that you are connected to an appropriate database instance of the SAP DB. To do this, refer to Starting and Stopping the SAP J2EE Engine [extern] You have checked that the configuration settings for the J2EE server are entered correctly in the Developer Studio. To check the server settings, choose the menu path Window Preferences SAP J2EE Engine.
Building the Project in the upper application 1. Save the current status of the metadata for the project using the button toolbar of your Developer Studio, if you have not already done so. 2. Open the context menu for the project node (TutWD_EmailAdWS) in the Web Dynpro Explorer and choose Rebuild Project. Make sure that the Tasks view does not display any errors for your project. You can ignore any warning messages for labelFor properties that have not been set. Deploying and Launching the Application... 3. In the Web Dynpro Explorer, open the context menu for the application object 4. Choose Deploy new archive and run. EmailAdWSApp.
Result The Developer Studio performs the deployment process in one single step, based on an automatically generated Enterprise Archive File, and then automatically launches your application in the Web Browser.
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
Test your new Web Dynpro application by entering your own e-mail data in the input fields From, To, Subject, and Message, and then click on Send. After you have triggered a server roundtrip (here you communicate with the E-mail Web service), a success message is displayed on the user interface in the Web Browser if no errors have occurred during sending. The result value returned by the e-mail Web service is also displayed in the message text.
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
Related Content
SDN Article: Adaptive Web Service Model Controller Coding Explained SDN Article: Using the Adaptive Web Service Model SDN Wiki: FAQ - Models - Adaptive Web Service
Creating an E-Mail Client Using Web Dynpro's Adaptive Web Service Model
Copyright
Copyright 2006 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, Outlook, and PowerPoint are registered trademarks of Microsoft Corporation. IBM, DB2, DB2 Universal Database, OS/2, Parallel Sysplex, MVS/ESA, AIX, S/390, AS/400, OS/390, OS/400, iSeries, pSeries, xSeries, zSeries, z/OS, AFP, Intelligent Miner, WebSphere, Netfinity, Tivoli, Informix, i5/OS, POWER, POWER5, OpenPower and PowerPC are trademarks or registered trademarks of IBM Corporation. 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. MaxDB is a trademark of MySQL AB, Sweden. SAP, R/3, mySAP, mySAP.com, xApps, xApp, SAP NetWeaver, 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 in several other countries all over the world. 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. These materials are provided as is without a warranty of any kind, either express or implied, including but not limited to, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. SAP shall not be liable for damages of any kind including without limitation direct, special, indirect, or consequential damages that may result from the use of these materials. SAP does not warrant the accuracy or completeness of the information, text, graphics, links or other items contained within these materials. SAP has no control over the information that you may access through the use of hot links contained in these materials and does not endorse your use of third party web pages nor provide any warranty whatsoever relating to third party web pages. Any software coding and/or code lines/strings (Code) included in this documentation are only examples and are not intended to be used in a productive system environment. The Code is only intended better explain and visualize the syntax and phrasing rules of certain coding. SAP does not warrant the correctness and completeness of the Code given herein, and SAP shall not be liable for errors or damages caused by the usage of the Code, except if such damages were caused by SAP intentionally or grossly negligent.