Anda di halaman 1dari 62

Analyse Problem - Debugging Tool

ABAP Trace

Active Global Support


March 2009

1
Course Contents (current Highlighted)

Introduction Dump Analysis

R/3 Basis Technological Overview ABAP Trace (Runtime Analysis)

Debugger I Performance Trace

Screens Memory Management

ABAP Messages Batch Processing

Debugger II Updates

Dynpro Trace User Exits

Syslog

2
Overview (1)

Runtime Analysis - Overview

Enables you to execute a performance and structure analysis of any


transaction, program, or function module created with ABAP/4.
The measurements are saved in performance data files.
You can:
display the results as a series of hit lists to identify runtime-intensive
statements,
display table access summaries
display the program flow hierarchy.

OK,
Abap Trace,
But, How...What...

Hit Lists Call Hierarchy

The Runtime Analyzer is specifically designed for tuning individual reports and
transactions. For broader tuning efforts on the system or database level, you should use
the Performance Trace (ST05) function.

Starting Runtime Analysis:


From any screen (System -> Utilities -> Runtime analysis -> Execute)
ABAP Workbench initial screen (Test -> Runtime analysis)
ABAP Editor initial screen (Program -> Execute -> Runtime analysis)
The ABAP Editor (Utilities -> More utilities -> Runtime analysis)
Repository Browser (Choose a program or transaction. Then choose Development object
-> Test/Execute A dialog box appears. Select Runtime analysis and choose Continue.)

3
Overview (2)

OK,
How could this be useful? What is my benefit?

Flow Hierarchy:

Find the location of the statement you interested in


Compare the flow of the application in different clients / systems
Find USER EXITS, FIELD EXITS, TA Variants.
Memory Consumption

Series of hit lists:


Determine the specific bottleneck area of the program (ABAP vs. SQL)
Determine the SQL or ABAP statement causing the highest load

How could this be useful for support:


See on a glance how often database tables are accessed and if they are buffered in R/3
(table hit list)
Find the relevant coding (error occurs in a subroutine in a different main program)
Trace the memory consumption.
Find unnecessary database accesses
Find unnecessary calling of modularization units and ABAP statements
Find user programmed functions that replace existing ABAP statements

4
Understanding the Measurement (1)

What is measured?
How do they
ABAP statements that are potentially expensive in terms of CPU time. do it?
The most significant of these are:
DB accesses: Select, Exec SQL,
Modul. Units: Module, CALL Function, CALL SCREEN, CALL Transaction,
CALL Dialog
Internal Tables: Append, Collect, Sort, Read Table, Read Dataset
Datatransfer: Transfer, Assign
Others: EXPORT .. TO ..., IMPORT ... TO ..., Rollback, ...
SET PF-STATUS, SET TITLEBAR, MESSAGE

How is it measured?

During runtime analysis, the system measures the statements listed above.
The system stores these measurements in a performance data file.
You can evaluate the file immediately or at a later time.
The system subtracts the CPU consumption needed to measure data from the
overall CPU consumption.

To be able to use the tool at the right time you need to know what can be traced

To be able to evaluate the results you need to know how the measurement is done

5
Understanding the Measurement (2)

What are the options?


Is there a choice?
Subroutines: Default
Records all PERFORM statements
Internal tables: Records all APPEND, COLLECT, SORT, READ statements
Technical db info: Records technical database information
(For specialists only)
Memory management: Memory allocation and release,
Data and data control block transfer,
PXA generation and search,
Screen synchronization
Restriction to
Function module: calls of a particular function module
Particular units: restricted to calls of a particular function module

Why using them?


The evaluation process can be expensive.
The Trace file size quota might be exceeded
For this reason, you should restrict your analysis as much as possible

In real productive environment you will very often see the problem that the file size of the
trace file exceeds the allocated space on the system.

TRACE ONLY WHAT IS NEEDED!

6
Understanding the Measurement (3)

Reliability on machines running with more than 1 processor


execution times
execute several times
Take into account what else is running on the machine
the numbers represent not an exact measurement

memory consumption
Reliable

structure of the program


reliable

7
ABAP/4 Trace: How To Run It – TRACE ALL
And now,
How do I use
1. Specify type and name of the program the SE30?

2.
Set the filters according
to the information you
want to measure:

Create a temporary recording


variant that allows:
- Analyzing Hierarchy
TMP - Analyzing relevant
statements
Change
- Analyzing Memory Usage

3.
Execute

To test a program, carry out the following steps

1. Specify type and name of the program

2. Set the filters in your variant according to the information you want to be measured

3. Press F8 = Execute to start the runtime analysis measurement.

8
ABAP/4 Trace: How To Run It – TRACE ALL

Create a variant that allows And now,


1. Analyzing the hierarchy How do I use
2. Analyzing the relevant statements SE30?
3. Monitoring the memory use

TMP
Change Do not forget !

Execute

9
ABAP/4 Trace: How To Run It - TRACE ALL

Do what you want to do


in the transaction

10
ABAP/4 Trace: How To Run It - TRACE ALL

Enter your data and continue


(e.g. with ENTER)

11
ABAP/4 Trace: How To Run It - TRACE ALL

1)
Enter your data
and continue with ENTER

2)
Choose
SORG = 3020

3)
Receive the
I-message
and continue

12
ABAP/4 Trace: How To Run It - TRACE ALL

/nSE30

As soon as the point of


interest has been reached
switch back to SE30

13
ABAP/4 Trace: How To Run It - TRACE ALL

AND HERE YOU ARE


prompted with the data
generated by the last
run for the analysis

ANALYZE or CHOOSE
from all available
performance files

14
ABAP/4 Trace: How To Run It - TRACE ALL

AND HERE YOU ARE


In the main navigation screen of the
SE30 analysis

Note:
The percentage values for execution times are
depending on the recorded statements

The central focus is the colored bar chart, that shows the total execution time.

We notice that the main resource consumption is caused by the ABAP statements and not
the database load.

If a time segment exceeds 50% of total execution time, the appropriate bar appears in red
to signify an alert situation.

This alert bar is not a bible it serves only as an indicator where to start from. Depending on
the execution time and other circumstances the result may still be that the program will not
get changed.

Don’t forget other criteria:


how often is the program executed
do we really have to perform the task this way

15
ABAP/4 Trace: How To Run It - TRACE ALL

Run the trace for VA01 without analyzing it! Analysis will be done later.

First run: With the default options plus internal tables plus memory use. TASK
Aggregation: NONE.
Second run: With the default options. Aggregation: NONE.
Third run: With modularization units and screens only. Aggregation: NONE
Fourth run: With the default options. Aggregation: FULL

Get three more sessions, select the 4 different trace files and display the
runtime analysis overview screen.

Make sure that the recording has been successful (file size > 0)
Check the availability of the call hierarchy

Compare the file size of the recordings. What are your findings?

Use the following data:


Order Type : TA Sold-to-party: 3063
Sales Organisation:0001 Purch. Order no.: 1
Distribution Channel: 01 Item: 1
Division: 01 Material: T-HM123
<ENTER> <ENTER>
SORG: 3020

Don‘t bother analyzing the details. That will be covered later on.

16
ABAP/4 Trace: How To Run It - TRACE ALL

Compare the first three trace files


Check the Overview Screen.
Compare the percentage of execution times spend in ABAP, DB and
System. What are the differences?
Check the Group hit list.
What groups remain empty? Why?
Check for programs and tables in customer name space
Check the Call hierarchy. What statements are recorded with option:
Internal tables
Database access
Memory Use
Data transfer
Generation loading
Explain why internal tables do not appear with their real name (e.g. IT_869
rather than KNVV_TAB).What is the difference compared to database tables?

17
ABAP/4 Trace: Be Aware of Trace File Size

The size of the trace file strongly depends on the amount of data that is included

When selecting your options restrict yourself as


much as possible.

Include Modularization Units, Screens and


Database accesses
(in order to get a structured hierarchy)

Do not include Memory Usage and Internal


tables unless this turns out to be necessary
(in order to speed up navigation)

18
ABAP/4 Trace: How To Run It - TRACE ALL

Solution

Without internal tables fewer ABAP


statements are traced (APPEND, ...

Without database accesses


Nothing is traced on the DB (0.0 %)
(No SELECT, OPEN, FETCH, …)

The result is not depending


on the Aggregation.

Bottom Line: Don‘t stick to much to the overview graphic

Did you notice that the size of the trace file increased every time?

Note:
Don‘t stick to much to the overview screen it will vary depending on the trace options.
This is only intended to give you an indication if you most likely should start with ABAP or
SQL Analysis, if you are dealing with performance problems.
If you are interested in performance, always execute the whole transaction once before
you start tracing. Otherwise the times for loading and generating may lead to unexpected
results and guide your analysis in wrong direction.

19
ABAP/4 Trace: How To Run it –
TRACE PARTICULAR UNITS

And now,
How do I trace a
particular unit?

1. Specify type and


name of the program

3. Execute

2. Set the restriction


accordingly

20
ABAP/4 Trace: How To Run it –
TRACE PARTICULAR UNITS

Do what you want to do


in the transaction

21
ABAP/4 Trace: How To Run It –
TRACE PARTICULAR UNITS

• Switch the trace on


• Notice the Runtime analysis
enabled Information in the
status line
• Perform the action to be traced
and (ENTER)

22
ABAP/4 Trace: How To Run It –
TRACE PARTICULAR UNITS

/nSE30

•The message appeared


•Switch the trace off
•Go back to SE30

23
ABAP/4 Trace: How To Run It –
TRACE PARTICULAR UNITS
Run the trace for VA01 without analyzing it! Analyzing will be done later.
Start the actual recording on the second screen. TASK
Run SE30.
Select the default statements plus Internal tables.
Choose Aggregation NONE.
Use the following data:
Order Type : TA
Sales Organisation:0001
Distribution Channel: 01
Division: 01
<ENTER>

Sold-to-party: 3063
Purch. Order no.: 1
Item: 1
Material: T-HM123
<ENTER>

SORG: 3020

Compare the size with the previous trace files

Don‘t bother analyzing the details. That will be covered later on.

24
ABAP/4 Trace: How To Run It –
TRACE PARTICULAR UNITS

Solution

With particular units or with full Aggregation the file


is noticeable smaller and it still contains the required information

25
ABAP/4 Trace – Understanding The Analysis

Runtime Analysis - Integration


Runtime analysis is an integrated test tool in the ABAP Workbench.
The following illustration shows it’s architecture and the principal
navigation destinations within the tool.

SE30
initial screen

Tips & Tricks Analyze File list

Display filter

Hit list Table hit list Group hit list Call hierarchy Table hit list

ABAP Dictionary ABAP Editor

You can branch to the ABAP Editor from the hit list, the group hit list and the call hierarchy.

This allows you to display or change the source code.

You can navigate into the dictionary directly from the table hit list.

26
ABAP/4 Trace – Understanding The Analysis

Hit list F5

Only generating additional info if trace option selected

The times displayed here depend on the selection in the display filter.

The hit list shows you which statements were the most expensive and is sorted by gross
time in descending order. The value in the number column tells you how many times the
statement was called.

Here you can


check for the most expensive processing in your program AND
branch directly to the source code

27
ABAP/4 Trace – Understanding The Analysis

Gross
This time includes the time
Hit list F5 needed to complete the
processing of all called programs,
functions, forms or any other
modularization unit Net
This time is exactly the time
spend in this mudularization unit.

Sort according to
the NET times and
check for the most
expensive call
(ABAP or SQL)
Continue with particular unit
trace using specific options
or SQL trace for the
statement!

Example: PERFORM DEVCLASS_ACTUALIZE


Gross: 367.090
Net: 310
This leads to the assumption that most of the time is spend in the modularization units
called in theirs form routine.

Most expensive processing in the program:


Order the NET column
Check what is the most expensive processing (either SQL or ABAP)

28
ABAP/4 Trace – Understanding The Analysis

Group hit list F7

Use the Group hit list to get an


overview about
- Loaded (Z-) programs
- Exit-functions (e.g. User exits,
Field exits, Conversion exits, …)
-Import from memory, set locale ,
etc

Example: PERFORM DEVCLASS_ACTUALIZE


Gross: 367.090
Net: 310
This leads to the assumption that most of the time is spend in the modularization units
called in theirs form routine.

Most expensive processing in the program:


Order the NET column
Check what is the most expensive processing (either SQL or ABAP)

29
ABAP/4 Trace – Understanding The Analysis

Call hierarchy F8

Call level in the program

No sort option,
since you want to Memory requested
analyze the
by each program
structure!!!!
Option „Memory management‘‘ not
required for this output

The call hierarchy allows you to display a more precise list showing the chronological flow
of your transaction or report. Subroutine calls are intended to increase the readability.

The functions displayed in the column ‘call hierarchy’ are specified by the program that
called them and by the level in the call hierarchy.

Memory Requested by each program:


>TSV_NEW_PAGE_ALLOC_FAILED

30
ABAP/4 Trace – Understanding The Analysis

Table hit list F6

Use the description to search


for the right table

Number of accesses ....


1. Double-click and see the origin
2. Branch into the source code
3. Unfortunately no aggregation, yet....

The table hit list contains a list of the relevant database tables, the number of accesses and
the time required for each and the short description and the buffer method used in the SAP
system.

With a double click you can obtain more detailed information about the database accesses
of one specific table.

If you want to see the exact context of a particular statement, you can branch to a source
code display.

The source code you see is a simple listing with numbered lines, with the cursor positioned
in the line containing the specific statement.

31
ABAP/4 Trace: How To Read It

Check the table hit list for partial buffering and the flow hierarchy for select single

Double- click
Or
Search the hierarchy

Goto the table hit list and look for a table that is defined to be partially buffered
Here you can double click to get an overview on the origin of the statements in the
source code
You can directly branch into the source code from there

Goto the hierarchy and search for the table name and check if the select single is used
when it should be used

32
ABAP/4 Trace: How To Read It

Analyze the traces created for VA01


a) Functional analysis:
Check if there occur any Field exits, Conversion exits, User exits or Variants.
TASK
(use the hierarchy and the group hit list.
Search for exit_ and for SHD.)
Check if data is being transferred to memory and/or file system.
(use the hierarchy or the group hit list and search for import / export and
for transfer)
Which messages are raised from which program?
(use the hierarchy and search for message)
Which tables are read to get General Material Data?
(use the table hit list and search for material in the hierarchy)
Which modules are involved?
Find out the name of the form and the corresponding function module where the
select occurs.
Also find out the name of the function group!
(use the hierarchy and search for the <table name>. Navigate in the
hierarchy).

The trace files are already created.

The first 4 contain an error message and the 5th (particular units…) a warning message.

33
ABAP/4 Trace: How To Read It

Analyze the traces created for VA01

b) Performance analysis TASK


Check if there are particularly slow statements (especially on DB tables and
internal tables). Sort the output by net times.
(use the hit list sorted by Net times)

Do the select statements take advantage of the the partial buffering whenever
possible?
(use the table hit list and the hierarchy)

Check the memory consumption. Is there a continuous accumulation of


memory or is memory also released during the transaction?
(use the hierarchy)

The trace files are already created.

The first 4 contain an error message and the 5th (particular units…) a warning message.

34
ABAP/4 Trace: How To Proceed With Analysis

Analyze the fourth trace created for VA01 (the one tracing
particular units)
Find the reason, why the E-message (E382) is being raised. TASK
Find the message in the call hierarchy.
Check the entries that are preceding the message statement in the trace file.
Navigate to the source Code and get an idea what is going on.
Create a breakpoint at relevant statements and verify your understanding. Make use of
the debugger.
What is the result of the select statement on MARA?
Optional:
Find the reason for the I-message (I101). Proceed as with the E-message.
What happens directly before the message? Get the name of the internal table and also
the call level in the hierarchy.
Navigate to the source code and create a breakpoint to verify that the read is
responsible for raising the I-message.
Search the call hierarchy for previous operations on this internal table. Use Call
hierarchy AND Debugger to understand what is going on technically.

The trace files are already created.

The first 4 contain an error message and the 5th (particular units…) a warning message.

35
ABAP/4 Trace: How To Read It

Create a trace for the building of the first screen of


transaction SHDG. TASK
Use full aggregation to reduce the size of the trace file
Sort the file by Net times
What is the most expensive SQL statement?
Where is the highest memory consumption caused?

Trace the expensive function module separately using all


options. Set Aggregation to NONE.
What could be changed?

Hint:

Use the overall hit list to search for the most expensive processing

Use the table hit list to identify the most expensive table access

36
ABAP/4 Trace: How To Read It

Solution

Main resource consumption caused by ABAP statements

Almost the same amount of time is spend in the db access as in the abap processing. We
will have to have a look into both areas.

37
ABAP/4 Trace: How To Read It

Solution

Hit list sorted by net times

ABAP processing:

Function module: STREE_READ_REFERENCES_GENER

Table access:

Fetch DF14L

38
ABAP/4 Trace: How To Read It

Solution

Start the analysis for the module only using


all options

You may set a breakpoint directly from SE30 and start the
transaction again to get directly to the point of interest

Memory Consumption: no release / constant allocation

Restrict the ABAP trace to the function module: STREE_READ_REFERENCES_GENER

Switch all option on

Start the measurement

39
Tips&Tricks:
Download the Trace File for Later Analysis
Safe trace on your PC
as an unconverted file (.txt)
Load file into Excel

40
Tips&Tricks:
Create an Excel From the Trace File

41
Tips&Tricks:
Analyse Runtime Consumption at the Levels

42
ABAP/4 Trace: Specialties

Batches

Variants

Updates

43
ABAP/4 Trace: Specialties - Batches

Officially available in SE30 as of release 4.6


SE30 on 4.6

You can select the work process you want to trace

Set the measurement accuracy (High / Low)

Set the measurement interval in seconds (default 23 seconds)

Start measurement in current session or in parallel session

Create a different variant if you want to get a hierarchy

44
ABAP/4 Trace: Specialties - Batches

For all earlier releases use Batch Input to support analysis

Restrictions:
Step 1:
note 192277 1)Report is running in Batch
Record a session
Input Mode (SY-BINPT)
SHDB
2)No Particular Unit Trace
(only function trace)
3)No Spool List in SM37
->use the debugger

F5 Session name

Transaction to be recorded = SE30

45
ABAP/4 Trace: Specialties - Batches

Step 1:
Record a session

Program to be traced

Start the measurement

No Particular Unit Trace !!!

46
ABAP/4 Trace: Specialties - Batches

Step 1: After the report finished:


Record a session
Go Back using F3

until you reach the screen

Batch Input: Recording

Continue:
4.0 4.6

Button: Get Transaction Icon: Save


(copy the transaction to recording) (save the recording)
&
Icon: Save
(save the recording)

Menu: Recording : Exit


(exit the recording)

47
ABAP/4 Trace: Specialties - Batches

Step 2:
Generate a session Continue:

F8: Overview

F8
4.6

4.0

Session has been generated!

48
ABAP/4 Trace: Specialties - Batches

Step 3:
Run the session to create the trace

SM35 SM35
4.0 4.6

F2:process session

You must choose Background destination otherwise the program will be processed in the
Dialog work process!

49
ABAP/4 Trace: Specialties - Batches

Step 4:
Find the the trace (User, Transaction)
SE30

You will find 2 files:


First: created during recording
Second: created during BI Session processing

Check if it finished in SM50 and SM37!

50
ABAP/4 Trace: Specialties - Batches

Run the trace and check the difference


Program: ZDEBUGBATCH_UEBUNG TASK
Create the trace using SHDB (while recording the session) and SM35
(while processing the session)

Check:
Is there a difference?
Where can you find it?

51
ABAP/4 Trace: Specialties - Batches

Solution

Comparing the hierarchy list we find that a


different form routine is called!

52
ABAP/4 Trace – SE30: Specialties - Variants

Start the measurements in SE30 for


Transactions: SHD0 to trace the transaction variant
Oh my goodness, I got the
Reports: SA38 to trace the report variant transaction variant from the
customer for VA01, fine, but
how do I now start the trace
with a variant?

No problem: Start SE30 to trace SHD0

On 4.6: Use Transaction: ZV1_CW_ASYNCH_ERR

The example on the slide covers the tracing of a transaction variant.

The trace for the reports needs to be done accordingly.


Choose transaction and type in the ‚SA38‘ or ‚SE38‘
Set the restriction to ‚Particular Units‘
Start the measurement
Switch the trace on in the system menu
Start the program with the variant

53
ABAP/4 Trace – SE30: Specialties - Variants

Step 1:
Create the transaction variant
SHD0

Tip:
How to create the variant

1)SHD0
On 4.6: Use Transaction: ZV1_CW_ASYNCH_ERR 2)Your transaction
3)Type in any name for the
variant
4)Use the create button
5)Choose a short text
6)Button Screen entries

Fill in the values

54
ABAP/4 Trace – SE30: Specialties - Variants

Step 1:
Create the transaction variant

Specify the attributes:


• With contents,
• Output only
Save the variant
• Button AND Icon

SAVE: CTRL+S

55
ABAP/4 Trace – SE30: Specialties - Variants

Create a variant for TCCA (Carrier: AA, Connection number: 0017)


Input data in SE30:
TASK
Transactions: SHD0
Particular Units
On 4.6: Use Transaction: ZV1_CW_ASYNCH_ERR
Start the measurement
Switch the trace on
Fill in the variant you created
Start the processing

Check the trace for the first statement of the program?


What screen will be processed first?

Variant creation: SHD0:


Initial screen
Transaction: tcca
Variant: tcca-aairlines
Hit the create Icon or F5 to create the variant
Second Screen (Transaction Variant change attributes)
Fill in the short text (My test variant)
Push the button ‚Screen Variants‘
Third Screen (First Screen of the transaction)
Fill in (Airline Carrier: AA, Connection Number: 17, Date of flight, choose a valid date)
Continue with enter
Fourth Screen (Confirm Screen Entries)
Put a check mark in the column ‚w. contents‘ for the airline carrier and the connection number
Push the button ‚Exit and Save‘ to confirm
Fifth Screen (Transaction Variant ‚TCCA-Airlines‘ Field Values
Push the Save Icon to leave the screen (Don‘t leave with enter)

56
ABAP/4 Trace – SE30: Specialties - Variants

Solution

2) Check the program for the screen

1) First Line traced for this program program

The screen status is set first than the titlebar

The first screen is Number ‚100‘. This is defined in the transaction, therefore we do not see
any setting in the program

TIP: It might be a good idea to run the SQL trace at the same time

57
ABAP/4 Trace: Specialties – Update

TIP
Especially helpful when
Trace an aborted update request working on Problems
when you cannot
Goto SE30 run the transaction again
Start the measurement of SM13 (with particular units)
List the aborted request
Switch the trace on
And trace the request by using the test functionality in SM13

Note: After the test has finished the system will automatically perform a rollback.
There will be no change in the actual data of the DB.

Question:
In what kind of process will your trace run?
Dialog....

Why?
Tracing the full run you use the debugging mode in a dialog work process
Tracing the aborted update request will run in dialog mode as well. This is only a
simulation!

When would it run in the update process?


When the function ‚repeat update‘ will be used.

58
ABAP/4 Trace – Configuration / Troubleshooting

SE38 RSPARAM

Storage limit for performance data files


Default value: 30000 kbyte
Generic name of performance data file

AL11 SAP Directories

In case of any problems check the file size quota and the space available in the directory.

RSPARAM:
Never really hered before? This report lists the current parameter setting in the system
RSPARAM1 would only list the variables that are used. This functionality is provided in
REPARAM as an option.

59
ABAP/4 Trace - program analysis made easier

Tips and Tricks are updated in 4.6 and provide


orientation for new statements.

Administration changed:
If you can not change the select anymore for testing:
-productive system: set to not changeable?
-authority check: s_develop?

Tips & Tricks offers the developer help and guidelines in the ABAP/4 runtime analyzer for
efficient ABAP/4 programming. The examples take into account performance critical
aspects of ABAP/4 programming, such as: database access, string manipulation, internal
table processing.

Every example is shown in two variants. You can measure the runtime for both, so that the
differences can be seen immediately.

Be aware that there is only a significant comparision possible if the amount of data is
typically for the application tested

60
Summary

Now you are able to:


Record an ABAP Trace
Restrict the recording to the essential
information
Analyse the ABAP trace efficiently
Identify problems where the ABAP trace
may serve as a powerful tool

61
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 warrant.

62

Anda mungkin juga menyukai