23-useful abap tips

62
ABAP TIPS

Upload: api-3823432

Post on 14-Nov-2014

135 views

Category:

Documents


10 download

TRANSCRIPT

Page 1: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Page 2: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

USEFUL ABAP/4 INFORMATION

TIP

Area1

Use of ON CHANGE in Loop Processing

ON CHANGE OF does seem to work in loop processing.However, it only works the first time the code is used, and on the second pass you may get unexpected results. Look at the code sample below.

Page 3: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

DATA: ITAB LIKE MARA OCCURS 10 WITH HEADER LINE.ITAB-MATNR = '5'. APPEND ITAB.ITAB-MATNR = '6'. APPEND ITAB.PERFORM PRINT_ITAB.REFRESH ITAB.ITAB-MATNR = '6'. APPEND ITAB.ITAB-MATNR = '7'. APPEND ITAB.PERFORM PRINT_ITAB.FORM PRINT_ITAB.

ON CHANGE OF MATNR.WRITE: ITAB-MATNR.

ENDON.ENDFORM

Page 4: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Those of you who guessed that the output would be "5 6 6 7" are wrong! The actual output is simply "5 6 7." What happens during the ON CHANGE OF is that SAP holds the contents of the last ON CHANGE OF variable in memory, and this does not get refreshed or cleared during loop processing. For this reason you should avoid using ON CHANGE OF when processing loops.

Another area to look out for in control statements for loop processing is the use of AT. Do not use this statement when using the loop additions FROM, TO, and WHERE. New programmers out there should remember that AT NEW compares the structure for anything that has changed starting at the left hand side of the structure all the way to the field that you are specifying.

Page 5: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area2

Enhance performance of the SELECT statement

One of the most harmful things that I see nearly every day is SELECT * FROM _ when you are using only one or two fields from the table being read. This is usually the result of lazy coding practices. It can significantly slow the program and put an unnecessary load on the whole system. To understand why this is such a performance problem you have to understand a little about SAP hardware architecture and what happens when your ABAP processes the SELECT statement.

Page 6: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

When you execute an ABAP program, it runs on an application server, which is usually a different physical box from the database server. When you write a SELECT * statement, the application server sends the request to the database server, which in turn must pass the entire structure for each row back to the application server. This consumes both CPU and networking resources, especially for tables with large structures. SELECT ing only the specific fields you need from the database means that the database server will only pass a small amount of data back. This will greatly increase the speed of the SELECT. The following example outlines this change:

SELECT MATNR MTART FROM MARA INTO (L_MATNR, L_MTART). ... processing code ... ENDSELECT.

Page 7: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Another item to avoid with the SELECT statement is code like the following:

SELECT MATNR MTART FROM MARA INTO L_MATNR, L_MTART. CHECK L_MTART <> 'KMAT'.... processing code ...

ENDSELECT.

As in the previous SELECT * example, this will put an unnecessary load on the overall system because potentially many records that will not be processed are still going from the database 8server to the application server.

Page 8: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area3

Generic routine to initialize all fields of a structure

It seems that whenever you have to write a tricky piece of code, you need a field symbol. The following code example will initialize all the fields of any structure to any character you want. The two assumptions here are that the structure comprises fields of the same type and that you can move IS_FILL into them. This routine is useful when building an ABAP program that will write a file for one of SAP's standard load programs. Typically, the header record these programs use has a NO-DATA field that you populate with a character you will use when you do not want SAP to touch a field. You then fill all fields in the data record with this character, except the ones you want SAP to process. Look at the material direct load header record BMM00 and data record BMMH1 for an example.

Page 9: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

FORM INIT_STRUCTURE USING IS_STRUC IS_FILL. FIELD-SYMBOLS: <FS_STR1>,

<FS_STR2>. ASSIGN (IS_STRUC) TO <FS_STR2>. DO. ASSIGN COMPONENT SY-INDEX OF STRUCTURE <FS_STR2>

TO <FS_STR1>. IF SY-SUBRC NE 0. EXIT. ENDIF.

<FS_STR1> = IS_FILL.ENDDO.

ENDFORM.

This routine is then simply called like this:

TABLES: BMM00, BMMH1. PERFORM INIT_STRUCTURE USING: 'BMM00' '\', 'BMMH1' '\'.After the call to INIT_STRUCTURE is performed, all fields in BMM00 and BMMH1 are set to a \.

Page 10: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area4Generic Tips

When you're working in the ABAP editor and you want to print out just a few lines of code, use the line command PR. This works same as the line command CC in that you put the PR at both the top line and bottom line of the section of code that you want to print and then press return. You can also use the WW command to copy sections of code to the

window's clipboard.

Do you want to make your printed ABAP look a little better? Use the *EJECT comment in your code to force a

page break on the printout.

Page 11: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Have you ever had a user ask you why a certain warning or error message is coming up in a transaction? If you're not familiar with the transaction, you'll probably slowly debug your way in until you get to the message in question. This can be time-consuming. A faster approach is to go into debug mode when you start the transaction and then set up a break point on the keyword MESSAGE. Go to the pull down menu once you're in the debugging screen and select BREAKPOINT-> BREAK-POINT-> KEYWORD in 3.x or BREAKPOINT-> BREAK-POINT-> STATEMENT in 4.x. Once you set the break point, press Continue and carry on with the transaction. The code will stop

right where it encounters the message.

Page 12: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

When you're working on a piece of code that several others are using (a customer exit, for example), use the macro BREAK followed by your user name instead of using the BREAK-POINT ABAP keyword. In the following example, the code will stop only when the user-id is DRABAP. This allows other users to use the transaction without ending up in the debug screen and having to press Continue. X = Y1. BREAK DRABAP. Z = SUM / X.

Page 13: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

5

Database Optimizer Hints

It's true that in many cases the programmer knows exactly which index works best, which is one reason why different database system vendors provide so-called "optimizer hints."At first glance, it seems that optimizer hints could make the database optimizer obsolete. But a closer look shows that in order to select an optimal search method and index, the programmer needs a good idea of the value distribution of the related tables. Because R/3 is a highly configurable meta-application used in many industries and countries by many customers, you can find very differently scaled customer-order and order-product relationships.

Take the following query that returns all Lufthansa flights starting at

Frankfurt:

Page 14: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

DATA: xcarrid LIKE spfli-carrid, xconnid LIKE spfli-connid, xcityfrom LIKE spfli-cityfrom.SELECT carrid

connid cityfrom

FROM spfli INTO (xcarrid, xconnid, xcityfrom) WHERE carrid = 'LH ' AND cityfrom ='FRANKFURT'. WRITE: / xcarrid, xconnid, xcityfrom.ENDSELECT.

Copy this ABAP code into a test program, and we'll take a look at SQL Trace - an important tool for programmers and system administrators. You'll need to follow these steps:

Page 15: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Start transaction ST05. On the initial screen, select the trace functions you want to switch on (SQL Trace). To switch on the trace under your user name, choose Trace on.

Run the test program you just created. Select the trace functions you want to switch off. Choose Trace off. Now the system has recorded all the SQL calls being executed during this time. Choose Trace list to get a list of the calls.

If you've never tried out this function, you'll probably experience some confusion:

Page 16: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

The trace list obviously contains many lines that are not related to the SELECT statement in the ABAP program.

Explanation: The execution of any ABAP program requires additional administrative SQL calls. To restrict the list output, you can use the filter introducing the trace list.

The trace list contains different SQL statements simultaneously related to

the one SELECT statement in the ABAP program. Explanation: The R/3 Database Interface - a sophisticated component of the R/3 Application Server - maps every Open SQL statement to one or a series of physical database calls and brings it to execution. This mapping, crucial to R/3s performance, depends on the particular

call and database system.

The WHERE clause in the trace list's SQL statement is different from the WHERE clause in the ABAP statement.

Page 17: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Explanation: In an R/3 system, a client is a self-contained unit with separate master records and its own set of table data (in commercial, organizational, and technical terms). With ABAP, every Open SQL statement automatically executes within the correct client environment. For this reason, a condition with the actual client code (here MANDT = '000') is added to every WHERE clause if a client field

is a component of the searched table.

Since release 4.5, you can provide optimizer hints for SELECT statements using the %_HINTS parameter that enables emergency repairs on the spot. Of course, this parameter only works for those database systems that support optimizer hints. Because optimizer hints are not covered by SQL standards, each database vendor is free to provide them. Note that parameters starting with "%_" are never published in the documentation and should be used with special care only in an emergency. This introduction is very simplified; for a detailed description, please refer to Note 129385 in OSS.

Page 18: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Using the %_HINTS parameter, the example becomes:

SELECT carrid connid cityfrom FROM spfli INTO (xcarrid, xconnid, xcityfrom) WHERE carrid = 'LH ' AND cityfrom = 'FRANKFURT' %_HINTS ORACLE 'INDEX("SPFLI" "SPFLI~001")'. WRITE: / xcarrid, xconnid, xcityfrom.ENDSELECT.

The optimizer's execution plan for the query has changed. Instead of performing a full table scan, the optimizer will perform an index range scan, which is almost always a more efficient operation, unless the table has a small number of rows. If you specify hints incorrectly, ABAP ignores them but doesn't return a syntax or runtime error. This lack of notification is the reason why you have to make sure that you specified the index's correct denotation.

Page 19: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

6

Assign content to a field structure

The problem: You want to assign a special content to every field of a structure. What is the easiest routine to do that?

REPORT ZFTER910.DATA I_BLFA1 LIKE BLFA1.FIELD-SYMBOLS: <FS>.DO.ASSIGN COMPONENT SY-INDEX OF STRUCTURE I_BLFA1 TO <FS>.

IF SY-SUBRC <> 0. EXIT. ENDIF. <FS> = '/'.ENDDO.

Page 20: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

7

Simple F4 selection from an internal tables

The problem: You want to select a value from an internal table within a popup like the F4-selection?

DATA: FIELDTAB LIKE HELP_VALUE OCCURS 2 WITH HEADER LINE, VALUETAB(40) OCCURS 200 WITH HEADER LINE.

FIELDTAB-TABNAME = 'AUSP'.FIELDTAB-FIELDNAME = 'ATWRT'.FIELDTAB-SELECTFLAG = 'X'.APPEND FIELDTAB.

LOOP AT IT_TREE WHERE PPRICE NE SPACE. VALUETAB = IT_TREE-PPRICE. APPEND VALUETAB.ENDLOOP.

Page 21: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE' EXPORTING TITEL = 'Allowed Values' IMPORTING

SELECT_VALUE = PVAR TABLES FIELDS = FIELDTAB VALUETAB = VALUETAB EXCEPTIONS FIELD_NOT_IN_DDIC = 1 MORE_THEN_ONE_SELECTFIELD = 2 NO_SELECTFIELD = 3 OTHERS = 4.

Page 22: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

8

Tools and techniques to analyze performance problems

ABAP Runtime Analysis (SE30) ABAP Program Extended Syntax Check (SLIN) Process Overview (SM50) Performance workload Analysis (ST02, ST03) Performance workload Statistics Records (STAT) Miscellaneous database statistics (ST04, DB01, DB02) Trace Requests (ST05)

ABAP Program Debugger (SE38).

Fundamental Tools for Application Tuning

When trying to improve the performance of your R/3 system, the toughest job is deciding what to tune. In order to make this decision, everyone must first agree on the objectives, costs, and benefits of the tuning the project.

Page 23: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

PROBLEM DETERMINATION

To find out what to tune, start by asking these questions: How many programs are slow ? Which programs are slow ?

Are specific transactions or specific parts of a transaction slow ? What are average response times? Are response times high for all dialogs?

Let’s start with problems that seem to affect everyone.

TUNING THE SYSTEM

I will list the basics I always cover and let you develop a path that works best for you. Rule number one is, don’t attempt to tune production systems based on statistics from development systems or from any time periods when data conversion, transport, or other one-time only

processes were executing.

Page 24: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Here are some base-level tuning tips grouped by the five most common tuning transactions.

1. Base configuration: servers, work processes, and load balancing. The Process Overview (SM50, SM51, and SM66) is often the best way to gain a high-level view of your R/3 system. With SM50 you can watch programs execute in real time and see cumulative processing times for work processes

Time statistics on work process activity will provide information on the types of jobs that are being processed and on the servers handling the heaviest loads, allowing you to quickly identify servers with too few or too many processes.

When you see several servers with uneven distribution, review your logon load balancing schemes

If you see work processes in PRIV mode, you need to analyze your memory management strategies and server profile parameters. Private mode is usually an indicator of serious or complex problems that should be entrusted to the SAP EarlyWatch team.

Page 25: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Work processes that stop or hang up will display a reason code and probably semaphores or other valuable system codes. For semaphore analysis, the SAP Online Support Services (OSS) Note 33873 provides a listing of codes and definitions. Semaphores are generally wait or conflict codes issued by the operating system.

2. Hardware and operating system. Although we hope nothing other than R/3 is running on the operating system, in reality processes are often contending for OS-level memory. These will have a dramatic effect on the R/3 System because SAP memory management is completely dependent on the resources allocated by the base operating system.

So tuning is even more complicated: You have to decide when to analyze

the operating system and when to concentrate on R/3.

These rough guidelines, and statistics from OS06/ST06, indicate reasons to suspect the hardware and operating system:

Page 26: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

CPU idle time for a single server that consistently falls below 30 percent. “Pages out/second” that exceeds 10,000 per hour over a 24-hour period. Load average over the last 15 minutes that exceeds 3.00. Low values for “physical memory available.” (These values vary greatly by the operating system, R/3 release, and the server loads, but you should expect at least 1GB of memory to be available for R/3.)

3. SAP R/3 WorkLoad Analysis. The WorkLoad Analysis statistics found via transaction ST03 are the most popular indicators of R/3 performance. WorkLoad Analysis will show average response times for the entire environment or for individual servers. It also provides detailed statistics for specific transactions and programs within a given time period. Transaction RZ03 will generate some of these same statistics, as well as

buffer usage, in real time.

Page 27: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Most background jobs are reported as a single dialog step and will have very high average response times. Response times for query or report programs should generally have a lower percentage of CPU time and higher percentage of database request time.

Programs that perform complex calculations or routine scheduling (for example, Material Requirements Planning should have a higher percentage of CPU time and lower percentage of database request time).

Programs with UPDATE LOCAL will have higher database request times. Custom programs that are not stored in the buffer and programs that generate code (for example, Batch Data Conversion programs [BDCs] will have higher load times).

Page 28: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

4. SAP R/3 buffer statistics. ST02 is used to tune system memory and buffers. Tuning memory and buffers is very complex, so don’t attempt to do it without extensive analysis and expertise. Additionally, memory must always be tuned as a unit, because changes to one parameter will always affect other areas. Several hundred profile parameters affect system performance, and the majority of these either directly affect memory or

rely on proper memory management.

Hitratio: The hitratio is an indication of the buffers’ efficiency. When an SAP user or system function module needs data or additional objects, the system will generally look in R/3 buffers first. When the system is initially started, buffers are empty; once objects are called for they are stored subsequently in each buffer. The buffers will start with a hitratio of zero and should improve over time to a maximum possible of 100 percent. A system must be active for a considerable length of time before the hitratios will be stable enough for analysis. For a stable system, investigate buffers that consistently show hit ratios below 95 percent or

whose hitratios appear to be declining.

Page 29: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Directory entries: All buffers need free directory entries. Memory space requirements for storing directory entries is minimal, so don’t hesitate to increase the number of directory entries for any buffer.

Object swaps: A large number of object swaps is generally an indication of poor tuning; however, some swaps are unavoidable. Object swap totals are cumulative from system startup; therefore, you should expect to see these numbers grow over time.

Roll and paging area memory: Analyze roll and paging area memory in detail when the percentage of current use consistently exceeds 80 percent or when a large portion of processing occurs on disk rather than in real memory.

Heap memory: Batch programs can use large amounts of heap memory and, therefore, cause OS-level swap space requirements to increase. When you see large amounts of heap memory being used, make sure you have enough OS swap space to keep from freezing your operating system.

Page 30: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Call statistics: You can use call statistics to analyze table buffers and how effectively ABAP programs use them. Investigate low hitratios and high numbers of fails. Unusually high numbers for SELECT are often caused by programs performing large numbers of table scans, improper use or unavailability of appropriate indexes, or improper search techniques.

5. SAP R/3 table statistics. Use transaction ST10 to review table call statistics. ST10 will show the number of table changes, direct reads, and sequential reads and the number of calls and rows affected. These statistics can be invaluable when you’re considering buffering a table, adding an alternate index, or stripping data and tablespaces.

TUNING SPECIFIC PROGRAMS

The following tools and techniques can be used to analyze performance problems with a little more exacting science:

Page 31: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

ABAP Runtime Analysis (SE30) ABAP Program Extended Syntax Check (SLIN) Process Overview (SM50) Performance workload Analysis (ST02, ST03) Performance workload Statistics Records (STAT) Miscellaneous database statistics (ST04, DB01, DB02) Trace Requests (ST05) ABAP Program Debugger (SE38).

The ABAP Program Extended System Check is able to: SLIN Locate unused data fields and tables Find dead code in programs Check authorizations Quick check interfaces and compatibility of calls to forms, modules, and external programs Locate type conversions Give details of errors or warnings.

Page 32: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

The Process Overview, transaction SM50Is often the best way to observe a program during execution. By watching the function modules being processed in real time, you can see which areas are the most time consuming and decide what types of tracing or debugging is most appropriate.

Performance workload Analysis statistics from transaction ST02. You can use ST02 and ST03 to generate a nearly endless variety of statistics to tune individual programs or the entire system. For a more detailed breakdown of processing times for individual programs see Top Time, By Task, and other displays within ST03. ST02 and ST03 are very complex transactions with a multitude of performance statistics. For custom code or programs with user exits, use the dialog step counts to determine roughly how modifications affect standard SAP code. Comparing statistics from code before and after modifications have been made will tell you a lot about how efficiently

the code was written.

Page 33: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Database statisticsTransaction DB01 can reveal exclusive lockwait situations, which can be used for both system-level and application tuning. (It can often explain why programs appear to be doing nothing.)

Transaction DB02 shows table and index statistics. You can check for missing indexes, files with too little or too much space, extent problems, and a host of related items. These numbers will come in handy when you begin stripping data and tablespaces.

Database transaction ST04 will provide high-level performance statistics. With ST04, you can make sure the database interface isn’t having problems servicing your program’s request for data.

Page 34: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

SQL traceFor individual program tuning, try SQL, enqueue, and RFC tracing via transaction ST05 – Trace Requests. The traces will show step-by-step details of each and every function within your program. SQL trace will show database-level activity, as well as ABAP. The SQL trace will reveal full scans of tables, inappropriate index choice, any failure to load record keys, repetitive calls to the same data, and similar conditions that make tuning an application much easier.

ABAP Program DebuggerThis tool is best suited for program development and maintenance, but may be useful for tracing some difficult performance problems. The debugger allows you to watch particular sections of code or data fields during program execution. You can also generate lists of modules, calls, and other key commands to summarize program execution. You also have the ability to change data fields and

processing routines in a real-time mode.

Page 35: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Database statistics

Transaction DB01 can reveal exclusive lockwait situations, which can be used for both system-level and application tuning. (It can often explain why programs appear to be doing nothing.)

Transaction DB02 shows table and index statistics. You can check for missing indexes, files with too little or too much space, extent problems, and a host of related items. These numbers will come in handy when you begin stripping data and tablespaces.

Database transaction ST04 will provide high-level performance statistics. With ST04, you can make sure the database interface isn’t having problems servicing your program’s request for data.

Page 36: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Database statistics

Transaction DB01 can reveal exclusive lockwait situations, which can be used for both system-level and application tuning. (It can often explain why programs appear to be doing nothing.)

Transaction DB02 shows table and index statistics. You can check for missing indexes, files with too little or too much space, extent problems, and a host of related items. These numbers will come in handy when you begin stripping data and tablespaces.

Database transaction ST04 will provide high-level performance statistics. With ST04, you can make sure the database interface isn’t having problems servicing your program’s request for data.

Page 37: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

9

SAPscript upload/download

Use program RSTXSCRP to upload and download SAPscript data - including: forms, styles, printers, character sets, etc..Download to the front-end or application server.

Page 38: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

10

Calculating Invoice due dates

Use function: FI_TERMS_OF_PAYMENT_PROPOSE.

Page 39: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

11

Accessing the ABAP editors programmatically

To access the ABAP editors (as well as screen painter, menu painter) programmatically; use function: RS_TOOL_ACCESS.

Page 40: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

12

Hiding ABAP source code

In SAP releases upto 4.6C you can place the special character sequence *@#@@[SAP] on the first line of an ABAP to hide the source code - it will still run and behave as normal. To bring the code back to visible you must upload it again from a file or put it into a Transport - release it, then edit the transport file and remove the character string.

For 4.6C you can look at table: D010SINF This table includes a field SQLX. When this field is set to "X" the program source will not be viewable as for program: SAPMSYST.

Page 41: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

13

Delivery due list for release 4.6

The delivery due list (VL10G) uses user-exits to enable extra data to be presented to the user in the ALV list - these are:LV50R_VIEWG03 for data from Sales and LV50R_VIEWG06 for data from Purchasing.

Page 42: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

14

To change development class of a SAPscript

Use program RSWBO052

Page 43: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

15

To transport Standard Texts

Use Program RSTXTRAN or enter directly in transport

Put entry directly into the transport:

R3TR TEXT TEXT,Text Name,ST,Language

R3TR TEXT TEXT,Z_ALLERGAN_SWISS_DISTRIBUTOR,ST,E

Page 44: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

16

Importing Graphics (Logos) into SAPscript

The program RSTXLDMC can be used to upload graphics (file extension .tif on PC files) into individual standard text.

Page 45: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

17

Calling an ABAP form from SAPscript

In Layout Set: DEFINE &X& = ...

DEFINE &Y& = ... DEFINE &Z& = ... PERFORM XXXXXX IN Zxxxxxxx USING &X& USING &Y& CHANGING &Z&

In ABAP program ZxxxxxxFORM XXXXXX TABLES INPUT1 STRUCTURE ITCSY

OUTPUT1 STRUCTURE ITCSY

Page 46: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

*get input parametersLOOP AT INPUT1.

CASE INPUT1-NAME. WHEN 'X'.

INPUT_X = INPUT1-VALUE. WHEN 'Y'. INPUT_Y = INPUT1-VALUE.

ENDCASE.ENDLOOP.{logic to use program variable input_x and input_y to set say program variable output_z}

*set output variables:REFRESH OUTPUT1.OUTPUT1-NAME = 'Z'.OUTPUT1-VALUE = OUTPUT_Z.APPEND OUTPUT1.

Page 47: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

18

Debug SAPscript

You can debug a SAPscript: Use Tools - Word Processing - Layout Set. Enter name of layout set and then Utilities - Activate Debugger.

It is of no consequence which layout set you enter when selecting the SAPscript debugger. (Menu path: Tools-Word-processing - Forms, Utilities - Activate Debugger) The next layoutset called will invoke the debugger. This is quite handy when verifying which layoutset is being called (Verifying customizing settings).

Another way to set the SAPscript debugger is to run program RSTXDBUG.

Save Internal Table as File on the Presentation Server

Page 48: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

19

Standard Conversion Exits

Most conversion exits used in screens by SAP are actually function modules. You can find them by searching for

CONVERSION_EXIT_name_INPUT and CONVERSION_EXIT_name_OUTPUT.

Page 49: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

20

List of ways to transport variants

There are at least three ways that you can transport a variant for a program.When you first transport a program, all elements of a program are transported along with the source code. This includes any variants that have been created at this time

After the first time a program has been transported, there are two ways to move a variant. The first method is to manually add an entry to the transport for the variant you want to move. The format of the entry is LIMU VARX xxxxxxxxName_of_the_variant where xxxxxxxx is the program name.

The last method is the easiest, in that you do not have to remember any arcane codes. Go to the ABAP editor, and go to the variant screen. Under the Utilities menu is Transport Variant. This allows you to choose the variants to transport, and the transport to put them in.

Page 50: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

21

List of methods to FTP from within SAP

Write a UNIX script and call it via CALL SYSTEM Create a command through transaction SM69 (and execute via SXPG_CALL_SYSTEM) that call the script with parameters.

Use the FILTER option on the OPEN DATASET command Have an external step in your job that runs after the dataset has been created. The external step will call a script with parameters to do the ftp.

NOTE: ftp can accept commands from a file, and it is often useful to create a file containing the commands, and pipe the file into the ftp command.

Page 51: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

22

User Status Tip

If you have several status' for a program that are nearly identical, it can be easier to setup and maintain a single status, and just hide parts of it as required.

EG:

DATA: BEGIN OF MTAB_UCOMM_EXCLUDE OCCURS 0,VALUE(4) TYPE C,END OF MTAB_UCOMM.AT USER-COMMAND.PERFORM SET_PF_STATUS.

Page 52: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

*---------------------------------------------------------------------** FORM SET_PF_STATUS **---------------------------------------------------------------------** Set up the menus/buttons for the report **---------------------------------------------------------------------*FORM SET_PF_STATUS.CLEAR MTAB_UCOMM_EXCLUDE.REFRESH MTAB_UCOMM_EXCLUDE.CASE MI_CURRENT_PAGE.WHEN 1.*-- Do not want any pushbuttons that point to items to the right*-- since the list is at its rightmost positionMTAB_UCOMM_EXCLUDE-UCOMM = 'FRST'.APPEND MTAB_UCOMM_EXCLUDE.MTAB_UCOMM_EXCLUDE-UCOMM = 'PREV'.APPEND MTAB_UCOMM_EXCLUDE.

Page 53: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

WHEN MI_TOTAL_PAGES.*-- Do not want any pushbuttons that point to items to the left*-- since the list is at its leftmost positionMTAB_UCOMM_EXCLUDE-UCOMM = 'LAST'.APPEND MTAB_UCOMM_EXCLUDE.MTAB_UCOMM_EXCLUDE-UCOMM = 'NEXT'.APPEND MTAB_UCOMM_EXCLUDE.WHEN OTHERS.*-- Want all pushbuttons to appear on any other pageENDCASE.SET PF-STATUS 'MAIN' EXCLUDING MTAB_UCOMM_EXCLUDE.ENDFORM. " SET_PF_STATUS

Editor Tips (*EJECT and *$*$)*EJECT - If you put *EJECT at the start of a line, it will force a new page when you print your source code. This comes in real handy when you would like to have subroutines start at the top of a new page.

Page 54: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

*$*$* - By placing *$*$ at the beginning of a comment line will lock the line for editing. You are able to edit the line until you hit the enter key.

Page 55: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

23

Change the font on the X_65_255 paper size

This tip was taken from the SAP-R3 mailing list, and is by Sheila Tichener. If you need to use a large line-size to get all your data in I know the sap version of X_65_255 for hp laser jet 4 gives an unnecessarily small font . You can change it in SPAD (or copy to Y_65_255) as follows.Choose Device formats, Changehplj4x_65_255ExecuteDouble click on printer initializationChange from:- # select Courier 16.67 CPI normal font \e(s0p16.67h0s0b4099Tto:-# select Arial 24 CPI 15 point normal\e(s0p24h15v0s0b16602T

Page 56: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

Also bold as follows:-# select Arial 24 CPI 15 point bold\e(s0p24h15v0s3b16602Tit still fits and looks better.Also the error you get when changing a format in the output screen is only a warning and can be overridden by pressing the green tick.If the sap standard formats don't fit your requirements you can create your own e.g. Y_65_170 . It seems to be the numbers in the name that somehow triggers which one the ABAP chooses.

Page 57: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

24

To find a single quote within a string

Use 4 single quotes to find one quote in a string. The following code snippet will replace a single quote with a double quote. replace '''' with '"'

into field

Page 58: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

25

Helping the DBMS find the correct index

Sometime, you may find that the a SELECT that you have coded is very slow, even though you have put all the fields needed for an index in your where clause. Usually, this means that the DBMS is selecting the wrong index, you can tell if this is the case by doing an SQL trace (System - Utilities - SQL Trace). You can help the DBMS select the correct index by providing hints, include all fields from the index, and make sure that the fields are in the same order as they appear in the

index.

Page 59: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

26

Saving screens created with Screen Painter

You can not download code for the Screens (except for the ABAP part), but at least you can download a printout of what you set up. If you are in Object Browser looking at the module program, you can highlight the screens and click the print button. Click no to print immediately, then go into System -- Services -- Output Control to select the spool request and then go into List -- Save -- Local File. (Of course, you can send it to a printer to see documentation on your screen).

Page 60: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

TIP

Area

27

Help Views

For instance, in a Multi-language environment when you have a code and text combination you want to set up. Typically, you have to set up two tables: One with just the valid codes i.e. Zxxx where the only field is the code field, the second is ZxxxT which contains the code and language as the primary index with the description as the data field. In this case, then you usually define a view H_Zxxx which is a join on these two tables. The key thing is that the Foreign Key definition for the code field in the ZxxxT must have the must have the type "Key Fields of a Text Table". This results in the Table Maintenance generator (SM30) generating a screen that allows you to maintain the code and description together for the system language.

Page 61: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

In a related note, to set up a customer transaction for a Table Maintenance generated dialog, use SE80 and enter the function group used for the table maintenance dialog. Then Create a transaction (Zxxx) of type parameter. Fill in text, specify Transaction SM30, click on "skip initial screen" and set up default values of VIEWNAME set to Zxxx and UPDATE set to X.

* After defining a foreign key relation of type KEY FIELDS IN A TEXT TABLE the system automatically combines updates of the base table and the text table. Try defining two tables and the foreign key as stated above. So creating a help view is not needed for this purpose.

Page 62: 23-Useful Abap Tips

ABAP TIPSABAP TIPS

* The help view is useful when you want to have a matchcode-like F4 help on a specific field. Every field that is based on same domain automatically uses the help view if no other F4 help (Matchcode, Process on value request) is related. For a value table only one help view can be defined.

Example:

If you define in your abap a parameter or select-options 'parameters: pa_bukrs like t001-bukrs.' you will see that is automatically has a F4 help. This help is provided by helpview H_T001.