Professional Documents
Culture Documents
Disclaimer
This presentation outlines our general product direction and should not be relied on in making a purchase decision. This presentation is not subject to your license agreement or any other agreement with SAP. SAP has no obligation to pursue any course of business outlined in this presentation or to develop or release any functionality mentioned in this presentation. This presentation and SAP's strategy and possible future developments are subject to change and may be changed by SAP at any time for any reason without notice. This document is provided 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 assumes no responsibility for errors or omissions in this document, except if such damages were caused by SAP intentionally or grossly negligent.
Agenda
1. Static checks
1.1. Code Inspector
2. Dynamic tests
2.1. Test Driven Development with ABAP Unit 2.2. Coverage Analyzer 3.3. ABAP Unit Browser
3. Robust code
3.1. Exceptions 3.2. Asserts
DEMO
SAP 2008 / SAP TechEd 08 / <COMP273> Page 6
Exercise 1:
Use the code inspector to run the extended program check or syntax check for all our test programs. They start all with ZTSTECHED*
Agenda
1. Static tests
1.1. Code Inspector
2. Dynamic tests
2.1. Test Driven Development with ABAP Unit 2.2. Coverage Analyzer 3.3. ABAP Unit Browser
3. Robust code
3.1. Exceptions 3.2. Asserts
Benefits
A developer runs his unit tests every time he changes his code (regression tests). Thereby defects are detected very early in the development process and can be fixed easily. A well written unit tests tells the developer exactly what is wrong and where the error is located. Therefore developers use the debugger less often for locating errors. Software grows over time therefore it is important to keep the code clean and agile. Extensive unit tests allow developers to reach this goal since they make refactorings possible which in return improves maintainability. Unit tests specify exactly how a piece of software should behave in a given scenario. Often unit tests serve as great examples how a certain piece of code should work, it therefore serves as an excellent technical documentation.
ABAP Unit is the official xUnit testing framework for ABAP. Its most remarkable features are:
1. 2. 3.
Tightly integrated into the programming language Production code and unit test code are bundled and transported together Test code cannot be executed in a production system.
ABAP Unit tests are usually implemented as local ABAP Objects classes in the main program that contains the tested modularization units.
Example test class definition:
CLASS ltcl_flight DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. PRIVATE SECTION. METHODS: test_create_flight FOR TESTING. ENDCLASS.
For testing: used to mark classes as test classes and methods as test methods. Define class as test class
CLASS ltcl_flight DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. PRIVATE SECTION. METHODS: test_create_flight FOR TESTING. ENDCLASS. Define method as test method
Risk level: used to define the risk level of the test class dangerous, critical.
harmless,
CLASS ltcl_flight DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. PRIVATE SECTION. METHODS: test_create_flight FOR TESTING. ENDCLASS.
Duration: used to define the expected runtime duration of all test methods short, medium, long. Define duration
CLASS ltcl_flight DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. PRIVATE SECTION. METHODS: test_create_flight FOR TESTING. ENDCLASS.
Transaction: SAUNIT_CLIENT_SETUP
Assert methods:
used to determine whether a test is successful or not the utility class cl_aunit_assert offers various methods e.g. assert_equals(), assert_bound(), Implement your own assert methods by using the method fail() all assert statements allow you to add a message via the parameter (msg) which will be displayed in the UI
Example: METHOD test_create_flight. DATA: flight TYPE REF TO cl_flight. CREATE OBJECT flight EXPORTING flight_id = LX34. cl_aunit_assert=>assert_bound( flight ). ENDMETHOD.
SAP 2008 / SAP TechEd 08 / <COMP273> Page 17
Start unit tests from within the SE80 or execute a row of tests by using the code inspector.
DEMO
SAP 2008 / SAP TechEd 08 / <COMP273> Page 20
Add a method DIVIDE to the local test class which receives two integer numbers as parameters, divides them and returns the result. The definition of the method looks like this: DIVIDE importing PARAM1 type i PARAM2 type i returning value(result) type i. Write a test which checks the result of the DIVIDE method. Use the static method CL_AUNIT_ASSERT=>ASSERT_EQUALS() for checking whether your test is successful or not. Execute your test by using the menu Program Test UnitTest or use the keyboard shortcut: Shift + Strg + F10. Get a feeling for the result display by causing your unit test to fail. Once you are finished try to add more tests. What happens if you try to divide a number by zero?
SAP 2008 / SAP TechEd 08 / <COMP273> Page 21
setup()
test method
teardown()
Example test class: CLASS ltcl_flight DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. PRIVATE SECTION. CLASS-METHODS: class_setup, class_teardown. METHODS: setup, teardown. ENDCLASS.
One solution:
Write test
Make it compile
Test fails
Refactor
SAP 2008 / SAP TechEd 08 / <COMP273> Page 27
DEMO
SAP 2008 / SAP TechEd 08 / <COMP273> Page 28
Exercise 3:
Open the transaction SE80. Create a new report ZTBEXERCISE3_<counter>. Create a new test class with the name LTCL_STACK_TESTS. Add a private attribute to the test class ZCL_STACK. data: stack type ref to
Implement the SETUP method which instantiates the stack attribute. Write a test for the POP and PUSH method of the stack class. Use the method ASSERT_EQUALS to make sure that the right results get returned. What happens if you call POP on an empty stack? Write a test for the method SIZE. Suggestion: One developer writes the test the other developer writes the implementation which passes the test
SAP 2008 / SAP TechEd 08 / <COMP273> Page 30
Agenda
1. Static tests
1.1. Code Inspector
2. Dynamic tests
2.1. Test Driven Development with ABAP Unit 2.2. Coverage Analyzer 3.3. ABAP Unit Browser
3. Robust code
3.1. Exceptions 3.2. Asserts
Coverage Analyzer
The Coverage Analyzer is a tool for monitoring the system-wide execution of ABAP programs. You can
monitor which programs and even which modules of a program were covered by a test find program parts or complete programs which are never used and may be obsolete. find program parts that are executed very often and may benefit from code optimization
Coverage Analyzer
SAP Easy Access
/nscov /nscov
Make sure that the coverage analyzer is running properly on your server before testing!
SAP 2008 / SAP TechEd 08 / <COMP273> Page 35
Check which modularization units of your programs were executed (covered) during a test.
DEMO
SAP 2008 / SAP TechEd 08 / <COMP273> Page 38
Agenda
1. Static tests
1.1. Code Inspector
2. Dynamic tests
2.1. Test Driven Development with ABAP Unit 2.2. Coverage Analyzer 3.3. ABAP Unit Browser
3. Robust code
3.1. Exceptions 3.2. Asserts
The ABAP Unit Browser is a tool for executing a set of unit tests. It allows to monitor the code coverage which unit tests produce.
4. Execute tests
5. Analyze results
Exercise 4:
Open the transaction SE80. Select the ABAP Unit Browser (If the tool is not display in the workbench add it via the menu: Utilities Settings Under tab Workbench (General) tick the checkbox ABAP Unit Test Browser). Select Favorite in the dropdownlist and enter your username in the inputfield. Create a new favorite. Add the reports created during exercise 2 and 3 to the favorite. Tick the checkbox With Coverage Measurement under extended measurement. Execute the unit tests. Analyze the code coverage which your test methods produce. Optional: Execute your tests by using the Code Inspector.
Agenda
1. Static tests
1.1. Code Inspector
2. Dynamic tests
2.1. Test Driven Development with ABAP Unit 2.2. Coverage Analyzer 3.3. ABAP Unit Browser
3. Robust code
3.1. Exceptions 3.2. Asserts
Motivation
Software development and operation is intrinsically prone to errors in many ways
Internal errors may arise from wrong implementations and improper usage of underlying services. When interacting with external resources (like the user, system memory or disk storage), errors can occur due to invalid input or unexpected resource limitations. The ABAP language and infrastructure offers different ways for handling these kinds of errors, both for recoverable ( exceptions, messages) and non-recoverable errors ( assertions).
Available Since
Exceptions
Class-Based Exceptions: SAP_BASIS 610 (SAP WebAS 610) with T100-texts: SAP_BASIS 6.40 (SAP NetWeaver 04, mySAP ERP 2004, CRM 4.0, ) Classical Exceptions: prior to Release 4.0 Catchable Runtime Errors: Release 4.0
Requirements
Separation of normal coding from error handler coding Selective definition of handlers for certain errors Automatic abort of routine, that cannot provide promised service ( automatic propagation along call chain)
Raising an exception
Creation of exception object Propagation along call chain until suitable handler is found (change of control flow) If no handler is found: short dump
Exception object contains additional information, e.g. page, explaining text and position where exception occurred.
SAP 2008 / SAP TechEd 08 / <COMP273> Page 52
Consists of
Exactly one protected code area One or more exception handlers
SAP 2008 / SAP TechEd 08 / <COMP273> Page 53
Protected Area
TRY. " any statements CATCH cx_e1 ... cx_eN [ INTO excp1 ]. " handler code for exceptions cx_e1 ..cx_eN CATCH cx_f1 ... Cx_fM [ INTO excp2 ]. " handler code for exceptions cx_f1 ..cx_fM ... ENDTRY.
Protected area
All statements between TRY and first CATCH Only exceptions that occur in protected area can be handled
Exception Handlers
TRY. " any statements CATCH cx_e1 ... cx_eN [ INTO excp1 ]. " handler code for exceptions cx_e1 ..cx_eN CATCH cx_f1 ... cx_fN [ INTO excp2 ]. " handler code for exceptions cx_f1 ..cx_fN ... ENDTRY. Exception handlers (CATCH clauses) Are checked from top to bottom Each can handle one or more exceptions Optional access to exception object by INTO clause
Grouping by Polymorphism
Superclasses can be used in CATCH clauses to catch all exceptions of any subtype Order of clauses is important Order must be from 'special' to more 'general' exception
CX_ROOT
Exceptions Exercise
Exercise 5:
Open the transaction SE80. Create a new report ZTBEXERCISE5_<counter>. Create a new test class with the name LTCL_EXCEPTIONS_TESTS. Create a new test method with the name RAISE_EXCEPTION. Provoke the exception CX_SY_ZERODIVIDE by trying to divide a number by zero. Have a look at how ABAP Unit automatically catches exceptions. Now, write a test which makes sure that a) the system throws an exception when you try to divide a number by zero b) the system throws the exception CX_SY_ZERODIVIDE. One hint the method CL_AUNIT_ASSERT=>FAIL() should be used in the test method. Use the optional into clause to save the exception object into a variable. Use the debugger to see how the code gets executed.
SAP 2008 / SAP TechEd 08 / <COMP273> Page 57
TRY. dispatcher->show( a_page ). " -- More normal coding CATCH cx_page_not_found cx_misformed_url. " -- Error handling. ENDTRY. METHOD show. "IMPORTING a_page TYPE string TRY. retrieve( a_page ). " -- More normal coding CATCH cx_some_exception. " -- Error handling for some exception. CATCH cx_other_exception. " -- Error handling for other exception. ENDTRY. ENDMETHOD. METHOD retrieve. "IMPORTING a_page TYPE string RAISE EXCEPTION TYPE cx_page_not_found ENDMETHOD.
SAP 2008 / SAP TechEd 08 / <COMP273> Page 58
Exception occurred
no
yes
TRY-block found?
no
Runtime Error
no
Solution
Introduction of (optional) CLEANUP clause TRY. " any statements CATCH cx_e1 ... cx_eN [ INTO excp1 ]. " handler code for exceptions cx_e1 ..cx_eN ... CLEANUP [ INTO excp ]. "- optional " statements ENDTRY.
SAP 2008 / SAP TechEd 08 / <COMP273> Page 60
CLEANUP Clause
CLEANUP clause is processed if and only if exception
Has occurred Is not caught in current TRY construct Is going to be caught somewhere above in call hierarchy
Technically spoken CLEANUP clause is processed during unwinding of the stack At the end of CLEANUP clause, execution continues with next higher CLEANUP clause or handler code respectively CLEANUP clause must not be left abnormally
No use of RETURN, EXIT, CONTINUE ... to leave the clause Exceptions inside of the CLEANUP clause must be handled locally
Declaring Exceptions
Problem
How do users of a procedure know which exceptions to expect?
Solution
Exceptions that are not handled inside of the procedure are part of the procedure's signature
Benefits
Users have only to deal with exceptions mentioned in a procedure's signature Compiler can check if an exception is either handled inside of a procedure or declared to leave it
RAISING Clause
Declaration in subroutines (forms), function modules and methods
... RAISING cx_e1 cx_e2 ... cx_eN
Each class mentioned in RAISING clause implies all subclasses Compiler / extended syntax check warns if an exception is neither handled nor declared
Compiler warning instead of error to ease change process At runtime a special exception is thrown (cx_sy_no_handler) if undeclared exception leaves procedure Original exception is no longer active (cannot be caught any more)
Consequence: users have to be aware that these exceptions may occur anywhere
SAP 2008 / SAP TechEd 08 / <COMP273> Page 66
Problem: what happens, if the exception does occur? Solution: there are exceptions that must be declared if they can occur but they are not statically checked
Compiler doesn't check if exception is handled Runtime system does check if the exception was declared if it tries to leave the procedure
Consequence: if user was wrong (exception leaves procedure) an exception is thrown (cx_sy_no_handler)
SAP 2008 / SAP TechEd 08 / <COMP273> Page 67
CX_ROOT
CX_STATIC_CHECK
CX_DYNAMIC_CHECK
CX_NO_CHECK
CX_ROOT
CX_STATIC_CHECK
CX_DYNAMIC_CHECK
CX_NO_CHECK
Chaining of Exceptions
Attribute previous:
Enables chaining of exceptions
Exception Texts
Attribute textid:
Points to textual description of the exception
DEMO
SAP 2008 / SAP TechEd 08 / <COMP273> Page 73
Exception Builder
OTR-Texts
For each exception id one constant of type SOTR_CONC Name is name of exception id, value is respective OTR GUID
T100-Texts
Implement IF_T100_MESSAGE For each exception id one constant of type SCX_T100KEY Values define msgid, msgno and parameter mapping
Condition is valid for subclasses too to stop on every exception, set breakpoint at CX_ROOT
SAP 2008 / SAP TechEd 08 / <COMP273> Page 82
Display
exception
position
Examples
Method find, situation "element not found": Neither exceptional nor an error return code Method delete, situation "element to be deleted doesn't exist": Is element expected to exist? yes exception, no return code Method show, situation "page not found": Exceptional exception
Yes No
CX_STATIC_CHECK
CX_NO_CHECK
CX_DYNAMIC_CHECK:
Programmers can avoid exception: they know that the exception will never occur at specific code positions, e.g., by performing a (simple) test beforehand Examples: parameter constraints (cx_sy_zerodivide), call sequence constraints or combination of both (cx_sy_file_open_mode) Note: if test beforehand is not natural or too expensive (e.g., computing the free memory before creating a new object), this category is not the right one
Undeclared
CX_STATIC_CHECK
CX_NO_CHECK
CX_NO_CHECK:
Case-by-case analysis necessary to decide in which procedure the exception should have been caught. No handler ( runtime error) might also be OK Handler might be difficult to write (e.g., for exhausted resource) Handler can be far up in the call hierarchy (if there is just a global solution)
SAP 2008 / SAP TechEd 08 / <COMP273> Page 89
More helpful
CX_DYNAMIC_CHECK
More harmful
CX_STATIC_CHECK
CX_NO_CHECK
CX_STATIC_CHECK:
Programmers are forced to react to exception by handling it or by propagating it Compiler warns if programmers have forgotten to do so Note: do not annoy programmers by forcing them to write handlers if there is no need to do so they would do the worst: writing empty handlers
Exceptions part of the layers' interfaces Abstraction in exceptions from bottom to top Bottom: more technically oriented Top: more semantic/user oriented
Abstraction
Resumable Exceptions
Motivation
Error situation can often be handled only outside service which detects it ( exceptions would be optimal), but is often not severe enough to terminate a whole service, e.g. in mass-data processing ( existing exceptions not usable).
Resumable exceptions
Service can specify that it is able to continue doing its work RAISE RESUMABLE EXCEPTION Handler can decide whether to terminate the service (the default) or to resume RESUME (only possible if allowed by raising statement and all intermediate callers, test by checking attribute is_resumable) Intermediate callers can control resumption of propagated exceptions RAISING ... RESUMABLE(cx)
SAP 2008 / SAP TechEd 08 / <COMP273> Page 96
Exceptions Exercise
Exercise 6: Open the transaction SE80. Create a new report ZTBEXERCISE6_<counter>. Open the report ZTBEXERCISE6_BASE and copy the local test class LTCL_ADV_EXCEPTIONS_TESTS into the newly created report. Have a look at the class ZCL_FILESYSTEM which is a very simple fake implementation of a file system. Find out what exceptions the method ADD_FILE might throw. Start implementing the test method RETRY_RESUME_EXCEPTION by creating an instance of the class ZCL_FILESYSTEM. Now, use the instance to add a new file to the file system. Make sure you catch all exceptions. The exception ZCX_FILE_ALREADY_EXISTS is resumable so make sure you use the correct syntax for the catch block. React appropriately to all exceptions. If there is no space on the file system left call the appropriate method to empty the recycle bin and retry. If the file already exists overwrite it by resuming the method call. In the end make sure by checking the return value of the method ADD_FILE that the file was successfully added to the file system. Debug your application and observe the program flow. Optional: Have a look at the exception ZCX_FILE_ALREADY_EXISTS and find out how it uses a message class + a class attribute to generate the exception text.
Conclusion
Exceptions enable programmers to write robust applications: the software is be able to recover from faults without substantially increasing the code complexity. but Error handling code (whether using exceptions or not using them) is more likely to contain software bugs than any other part of an application (increased complexity, difficult to test). The mere use of exceptions in a program does not imply a disciplined error management. (Douglas Thain)
Agenda
1. Static tests
1.1. Code Inspector
2. Dynamic tests
2.1. Test Driven Development with ABAP Unit 2.2. Coverage Analyser 3.3. ABAP Unit Browser
3. Robust code
3.1. Exceptions 3.2. Asserts
Assertions: Introduction
To write correct and maintainable programs make your assumptions and intentions explicit some_code. some_code. * the following condition should hold: v < 300000 more_code. more_code. Better than an informal comment: special statement assertion some_code. some_code. ASSERT v < 300000. " nothing is faster than light more_code. more_code.
Assertions
Definition An assertion is a condition (Boolean expression) which must be true during program execution
Program language construct which allows to verify consistent state by checking explicit assumptions at specific points during the execution of the program
ABAP statement
ASSERT <log_expr>.
Assertions
ASSERT <log_expr>. An assertion is violated if the expression <log_expr> does not evaluate to true when processing the ASSERT statement This indicates an error in the coding Violating an (always active) assertion terminates the program with runtime error ASSERTION_FAILED Assertions make implicit errors explicit.
system state
system state
normal termination
Execution is terminated as soon as incorrect state is detected limit the effect of bugs
SAP 2008 / SAP TechEd 08 / <COMP273> Page 103
normal termination
runtime error
system state
system state
Also finds bugs which only temporarily cause an incorrect state find more bugs
SAP 2008 / SAP TechEd 08 / <COMP273> Page 104
normal termination
runtime error
system state
?
Where did things start going wrong consistent state not stated explicitly program flow
system state
: assertion
Assertions provide insight into expected system behavior by making assumptions explicit enhances maintainability
SAP 2008 / SAP TechEd 08 / <COMP273> Page 105
DEMO
SAP 2008 / SAP TechEd 08 / <COMP273> Page 106
Problem
evaluating the assertion might be expensive not feasible in productive system
ASSERT ID <group> CONDITION <log_expr>. By specifying addition ID <group> the ASSERT statement is linked to checkpoint group <group> and can be activated Activatable assertions are inactive by default, unless activation is set for the corresponding checkpoint group (in contrast to always active assertions, which are always active and can not be disabled) Inactive ASSERT statements are ignored, the corresponding conditions are not evaluated Time consuming checks can be coded into assertions that can be activated, without degrading application performance in a productive environment
Checkpoint Groups
Checkpoint Group is a new workbench object type which is embedded into WB navigation and cross reference. It is used to control activatable checkpoint statements (e.g. ASSERT) Associated maintenance transaction (SAAB) can be called directly or via object navigator
Transaction SAAB
Activation of activatable Assertion is set dynamically via the specified checkpoint group by means of activation settings Assertions can be activated in a running system
An activatable ASSERT statement is ignored unless an activation setting with matching scope and target specification is found.
User TESTUSER
Server *
Mode ABORT
User TESTUSER
Server *
Mode ABORT
All users on all servers: Global activation All users on specified server: Server specific activation Specified user on all servers: User specific activation Special case: Personal activation
User TESTUSER
Server *
Mode ABORT
Assertions which are always active (no ID <group> specified) always run in mode ABORT.
Activation Mode
Activation mode and maintenance scenarios
Maintenance
BREAK
ABORT
LOG
User * * * TESTUSER 1
Multiple settings with the same scope (checkpoint group) but different target (user, server) can be specified simultaneously precedence rule defines which setting will be used to determine the activation mode
User * * * USER1
Server *
Mode ABORT
USER1 on SERVER2
SAP 2008 / SAP TechEd 08 / <COMP273> Page 117
DEMO
SAP 2008 / SAP TechEd 08 / <COMP273> Page 118
Transaction SAAB
User-specific Settings
Break Break/Log Break/Abort Abort
Server-specific Settings
Assertion Log
A dedicated logging facility exists for assertion violations
Switched on via activation mode LOG Log entries are viewed using transaction SAAB
Transaction SAAB
Activation Variants
Reusing (complex) activation settings
When working with a set of checkpoint groups, you may want to store your complex settings You may want to transport the stored settings In order to be reusable by other users, the stored settings must not contain target specifications Activation Variant
An activation variant is a workbench object containing template settings for a list of checkpoint groups. The target specification (user, server) is not stored in the activation variant, but has to be specified when activating via the variant.
Transaction SAAB
Corresponding modes
Variant Activation
Transaction SAAB
Activation target is specified when activation variant is activated. Variant is expanded and setting is applied for each contained checkpoint group.
ASSERT ID A ASSERT ID B
ASSERT ID D ASSERT ID E
ASSERT ID F ASSERT ID A
ASSERT ID A class y
Activation mode ABORT for checkpoints in group A Activation mode BREAK for checkpoints in class y
Transaction SAAB
Transaction SAAB
Compilation units
SAP 2008 / SAP TechEd 08 / <COMP273> Page 130
Conclusions
ABAP assertions support the developer in writing correct code Code instrumented with assertions is easier to support and maintain, as the developer explicitly declares his assumptions using assert conditions ABAP assertions are either always active, or can be activated on the fly and without program modification or recompilation (optionally user or server specific) Activation can be controlled via checkpoint group or compilation unit
SAP Certified Application Professional status is proof of quality, and thats what matters most to customers.*
Conny Dahlgren, SAP Certified Professional
Take advantage of the enhanced, expanded and multi tier certifications from SAP today!
SAP 2008 / SAP TechEd 08 / <COMP273> Page 132
Thank you!
Thank You !
SAP 2008 / SAP TechEd 08 / <COMP273> Page 134
Building Your Business with SDN Subscriptions SDN Subscriptions offers developers and consultants like you, an annual license to the complete SAP NetWeaver platform software, related services, and educational content, to keep you at the top of your profession.
SDN Software Subscriptions: (currently available in U.S. and Germany)
A one year low cost, development, test, and commercialization license to the complete SAP NetWeaver software platform Automatic notification for patches and updates Continuous learning presentations and demos to build expertise in each of the SAP NetWeaver platform components A personal SAP namespace
Starter Kit
To learn more or to get your own SDN Subscription, visit us at the Community Clubhouse or at www.sdn.sap.com/irj/sdn/subscriptions
SAP 2008 / SAP TechEd 08 / <COMP273> Page 135
Weitergabe und Vervielfltigung dieser Publikation oder von Teilen daraus sind, zu welchem Zweck und in welcher Form auch immer, ohne die ausdrckliche schriftliche Genehmigung durch SAP AG nicht gestattet. In dieser Publikation enthaltene Informationen knnen ohne vorherige Ankndigung gendert werden. Einige von der SAP AG und deren Vertriebspartnern vertriebene Softwareprodukte knnen Softwarekomponenten umfassen, die Eigentum anderer Softwarehersteller sind. SAP, R/3, xApps, xApp, SAP NetWeaver, Duet, SAP Business ByDesign, ByDesign, PartnerEdge und andere in diesem Dokument erwhnte SAP-Produkte und Services sowie die dazugehrigen Logos sind Marken oder eingetragene Marken der SAP AG in Deutschland und in mehreren anderen Lndern weltweit. Alle anderen in diesem Dokument erwhnten Namen von Produkten und Services sowie die damit verbundenen Firmenlogos sind Marken der jeweiligen Unternehmen. Die Angaben im Text sind unverbindlich und dienen lediglich zu Informationszwecken. Produkte knnen lnderspezifische Unterschiede aufweisen. Die in dieser Publikation enthaltene Information ist Eigentum der SAP. Weitergabe und Vervielfltigung dieser Publikation oder von Teilen daraus sind, zu welchem Zweck und in welcher Form auch immer, nur mit ausdrcklicher schriftlicher Genehmigung durch SAP AG gestattet. Bei dieser Publikation handelt es sich um eine vorlufige Version, die nicht Ihrem gltigen Lizenzvertrag oder anderen Vereinbarungen mit SAP unterliegt. Diese Publikation enthlt nur vorgesehene Strategien, Entwicklungen und Funktionen des SAP-Produkts. SAP entsteht aus dieser Publikation keine Verpflichtung zu einer bestimmten Geschfts- oder Produktstrategie und/oder bestimmten Entwicklungen. Diese Publikation kann von SAP jederzeit ohne vorherige Ankndigung gendert werden. SAP bernimmt keine Haftung fr Fehler oder Auslassungen in dieser Publikation. Des Weiteren bernimmt SAP keine Garantie fr die Exaktheit oder Vollstndigkeit der Informationen, Texte, Grafiken, Links und sonstigen in dieser Publikation enthaltenen Elementen. Diese Publikation wird ohne jegliche Gewhr, weder ausdrcklich noch stillschweigend, bereitgestellt. Dies gilt u. a., aber nicht ausschlielich, hinsichtlich der Gewhrleistung der Marktgngigkeit und der Eignung fr einen bestimmten Zweck sowie fr die Gewhrleistung der Nichtverletzung geltenden Rechts. SAP haftet nicht fr entstandene Schden. Dies gilt u. a. und uneingeschrnkt fr konkrete, besondere und mittelbare Schden oder Folgeschden, die aus der Nutzung dieser Materialien entstehen knnen. Diese Einschrnkung gilt nicht bei Vorsatz oder grober Fahrlssigkeit. Die gesetzliche Haftung bei Personenschden oder Produkthaftung bleibt unberhrt. Die Informationen, auf die Sie mglicherweise ber die in diesem Material enthaltenen Hotlinks zugreifen, unterliegen nicht dem Einfluss von SAP, und SAP untersttzt nicht die Nutzung von Internetseiten Dritter durch Sie und gibt keinerlei Gewhrleistungen oder Zusagen ber Internetseiten Dritter ab. Alle Rechte vorbehalten.
SAP 2008 / SAP TechEd 08 / <COMP273> Page 136