Perform and Form statements

Hello,
can anyone give egs of using PERFORM and FORM statement. what do these statements do actually.
thanks.

See this sample for PERFORM ... USING...CHANGING
DATA : c1 TYPE i, c2 TYPE i, res TYPE i.
c1 = 1.
c2 = 2.
<b>PERFORM sum USING c1 c2 CHANGING res.</b>
WRITE:/ res.
**& Form sum
** text
form sum using p_c1 p_c2 changing value(p_res).
p_res = p_c1 + p_c2.
endform. " sum
Note the difference between the above and below perform.
DATA : c1 TYPE i, c2 TYPE i, res TYPE i.
c1 = 1.
c2 = 2.
<b>data: subroutinename(3) VALUE 'SUM'.
PERFORM (subroutinename) IN PROGRAM Y_JJTEST1 USING c1 c2 CHANGING res</b>.
WRITE:/ res.
**& Form sum
text
form sum using p_c1 p_c2 changing value(p_res).
p_res = p_c1 + p_c2.
endform. " sum
ANother sample for simple perform
PERFORM HELP_ME.
FORM HELP_ME.
ENDFORM.
<b>... TABLES itab1 itab2 ...</b>
TYPES: BEGIN OF ITAB_TYPE,
         TEXT(50),
         NUMBER TYPE I,
       END OF ITAB_TYPE.
DATA:  ITAB TYPE STANDARD TABLE OF ITAB_TYPE WITH
                 NON-UNIQUE DEFAULT KEY INITIAL SIZE 100,
       BEGIN OF ITAB_LINE,
         TEXT(50),
         NUMBER TYPE I,
       END OF ITAB_LINE,
       STRUC like T005T.
PERFORM DISPLAY TABLES ITAB
                USING  STRUC.
FORM DISPLAY TABLES PAR_ITAB STRUCTURE ITAB_LINE
             USING  PAR      like      T005T.
  DATA: LOC_COMPARE LIKE PAR_ITAB-TEXT.
  WRITE: / PAR-LAND1, PAR-LANDX.
  LOOP AT PAR_ITAB WHERE TEXT = LOC_COMPARE.
  ENDLOOP.
ENDFORM.
Hope this helps.
Reward points if this helps u.

Similar Messages

  • Confusion on using USING/CHANGING in PERFORMS and FORMS

    I got a little confused with PERFORM statements.
    As far as I understood, the FORM definition is the one that ultimately defines which variable is going to be handled by value and which by reference (Using either USING, USING VALUE(...) or CHANGING (which is a particularity to deal with recursive functions). Thus, why does the PERFORM statement also accepts the CHANGING option ?
    Should I worry with the way the PERFORM statement is written or can I simply imply from it the values of the parameters passed, in a given moment of execution ?
    Thanks
    Avraham

    Hi
    The USING and CHANGING additions in the FORM statement define the formal parameters of a subroutine. The sequence of the additions is fixed. Each addition can be followed by a list of any number of formal parameters. When you call a subroutine, you must fill all formal parameters with the values from the actual parameters. At the end of the subroutine, the formal parameters are passed back to the corresponding actual parameters.
    Within a subroutine, formal parameters behave like dynamic local data. You can use them in the same way as normal local data objects that you would declare with the DATA statement. They mask global data objects with the same name. The value of the parameters at the start of the subroutine is the value passed from the corresponding actual parameter.
    Parameters Passed by Reference
    You list these parameters after USING or CHANGING without the VALUE addition:
    FORM <subr> USING    ... <pi> [TYPE <t>|LIKE <f>] ...
                CHANGING ... <pi> [TYPE <t>|LIKE <f>] ...
    The formal parameter occupies no memory of its own. During a subroutine call, only the address of the actual parameter is transferred to the formal parameter. The subroutine works with the field from the calling program. If the value of the formal parameter changes, the contents of the actual parameter in the calling program also change.
    For calling by reference, USING and CHANGING are equivalent. For documentation purposes, you should use USING for input parameters which are not changed in the subroutine, and CHANGING for output parameters which are changed in the subroutine.
    To avoid the value of an actual parameter being changed automatically, you must pass it by value.
    Input Parameters That Pass Values
    You list these parameters after USING with the VALUE addition:
    FORM <subr> USING    ... VALUE(<pi>) [TYPE <t>|LIKE <f>] ...
    The formal parameter occupies its own memory space. When you call the subroutine, the value of the actual parameter is passed to the formal parameter. If the value of the formal parameter changes, this has no effect on the actual parameter.
    Output Parameters That Pass Values
    You list these parameters after CHANGING with the VALUE addition:
    FORM <subr> CHANGING ... VALUE(<pi>) [TYPE <t>|LIKE <f>] ...
    The formal parameter occupies its own memory space. When you call the subroutine, the value of the actual parameter is passed to the formal parameter. If the subroutine concludes successfully, that is, when the ENDFORM statement occurs, or when the subroutine is terminated through a CHECK or EXIT statement, the current value of the formal parameter is copied into the actual parameter.
    If the subroutine terminates prematurely due to an error message, no value is passed. It only makes sense to terminate a subroutine through an error message in the PAI processing of a screen, that is, in a PAI module, in the AT SELECTION-SCREEN event, or after an interactive list event.
    reward if useful
    Regards
    Pavan

  • Java.io.File performance and file stat on windows

    hi,
    i've written an application that needs to find out about a section of a file tree as fast as possible. For each file from a given directory it needs to know things like the files length, lastModified and if its a directory etc..
    My problem is that this is a bottleneck - the application is a end-user GUI and so the 20 odd seconds it can take is annoying, even with a progress bar. I'm not sure why its taking so long - i've not done the tests yet but am pretty sure that a native routine would be much faster.
    I'm thinking that each call to File.length or File.isDirectory returns to the disk per method invokation to see whats happened. Although this is correct, it would be nicer to able to say something like get me a snapshot of the file (so it collects all the information at the same time) and have an explicit method for updating the snapshot. Does anyone know if this is correct?
    thanks,
    asjf
    http://onesearch.sun.com/search/developers/index.jsp?qt=%2B+%2Bjava.io.File+slow&col=javabugs&category=&state=&query=java.io.File+slow

    hi,
    ShellFolder also seems to work great :)
    It seems to have the same performance characteristics as the snapshot code on the network drive, but for local disk drives it seems maybe 10% faster again - why is this not part of the j2se libraries??? maybe JSR203 will provide something equivalent..
    thanks again,
    asjf
    import java.io.*;
    import java.lang.reflect.*;
    public final class FileTricks {
       private static Class cShellFolder, cShellFolderManager;
       private static Constructor ctrShellFolderManager;
       private static Method mCreateShellFolder;
       private static Object sfm;
       static {
          try {
             cShellFolder = Class.forName("sun.awt.shell.ShellFolder");
             cShellFolderManager = Class.forName("sun.awt.shell.ShellFolderManager");
             ctrShellFolderManager = cShellFolderManager.getDeclaredConstructor(new Class [] {});
             ctrShellFolderManager.setAccessible(true);
             sfm = ctrShellFolderManager.newInstance(new Object [] {});
             mCreateShellFolder = cShellFolderManager.getDeclaredMethod("createShellFolder",new Class [] {File.class});
             mCreateShellFolder.setAccessible(true);
          } catch(Exception e) {
             e.printStackTrace();
             cShellFolder = cShellFolderManager = null;
             ctrShellFolderManager = null;
             mCreateShellFolder = null;
             sfm = null;
       public static final File attemptReplaceWithShellFolder(File actual) {
          File result = actual;
          if(cShellFolder != null && !cShellFolder.isInstance(actual)) {
             try {
                result = (File) mCreateShellFolder.invoke(sfm, (new Object [] {actual}));
                System.out.print(".");
             } catch(Exception e) {
                System.out.print("#");
          return result;
       public final static class FileSnapshot {
          private static Method mGetBooleanAttributes;
          private static int BA_DIRECTORY, BA_EXISTS, BA_REGULAR, BA_HIDDEN;
          private static Object fs;
          public final boolean isDirectory, exists, isRegular, isHidden;
          public FileSnapshot(File f) {
             boolean e, d, r, h;
             try {
                int ba = ((Integer)mGetBooleanAttributes.invoke(fs, new Object [] {f})).intValue();
                d = (ba & BA_DIRECTORY)!=0;
                e = (ba & BA_EXISTS)!=0;
                r = (ba & BA_REGULAR)!=0;
                h = (ba & BA_HIDDEN)!=0;
             } catch(Exception x) {
                d = f.isDirectory();
                e = d || f.exists();
                r = f.isFile();
                h = f.isHidden();
             isDirectory = d; exists = e; isRegular = r; isHidden = h;
          static {
             try {
                Class cFile = Class.forName("java.io.File");
                Class cFileSystem = Class.forName("java.io.FileSystem");
                mGetBooleanAttributes = cFileSystem.getDeclaredMethod("getBooleanAttributes", new Class [] {File.class});
                Field fBA_EXISTS = cFileSystem.getDeclaredField("BA_EXISTS");
                Field fBA_REGULAR = cFileSystem.getDeclaredField("BA_REGULAR");
                Field fBA_DIRECTORY = cFileSystem.getDeclaredField("BA_DIRECTORY");
                Field fBA_HIDDEN = cFileSystem.getDeclaredField("BA_HIDDEN");
                Field fFs = cFile.getDeclaredField("fs");
                mGetBooleanAttributes.setAccessible(true);
                fFs.setAccessible(true);
                fBA_EXISTS.setAccessible(true);
                fBA_REGULAR.setAccessible(true);
                fBA_DIRECTORY.setAccessible(true);
                fBA_HIDDEN.setAccessible(true);
                BA_EXISTS = ((Integer)fBA_EXISTS.get(null)).intValue();
                BA_REGULAR = ((Integer)fBA_REGULAR.get(null)).intValue();
                BA_DIRECTORY = ((Integer)fBA_DIRECTORY.get(null)).intValue();
                BA_HIDDEN = ((Integer)fBA_HIDDEN.get(null)).intValue();
                fs = fFs.get(null);
             } catch(Exception e) {}
    }

  • Perform and form params, here's a thing i don't understand

    Hi all experts,
    a simple & dumb doubt I'd like to clarify about parameters in a form, if anybody can help
    Here's the declarative part of my sample code:
    TYPES: BEGIN OF ty_loghier,
                otype TYPE otype,
                objid TYPE hrobjid,
                stext TYPE stext,
               END OF ty_loghier.
        TYPES: tbl_ty_loghier TYPE TABLE OF ty_loghier.
        DATA: loghier TYPE tbl_ty_loghier WITH HEADER LINE.
    The FILTER form that follows should operate on the previously declared internal table, as follows:
    PERFORM filter CHANGING loghier[].
    I declared the form as follows:
    FORM filter CHANGING itab TYPE tbl_ty_loghier.
    but the syntax checker tells me that "TABLE- expected, not tbl_".
    I don't understand why, and also, I'd like to declare the form such that the itab used in the form is meant to be an internal table with header line. Seems quite a simple question but... I'm wasting a lot of time :P

    Hi ,
    Try this code...
    TYPES: BEGIN OF ty_loghier,
                otype TYPE otype,
                objid TYPE hrobjid,
                stext TYPE stext,
               END OF ty_loghier.
    DATA: loghier TYPE STANDARD TABLE OF ty_loghier .
    DATA : wa_loghier TYPE ty_org_data.
    PERFORM filter CHANGING wa_loghier.
    FORM filter CHANGING itab TYPE ty_loghier.
    Regards,
    Sachin M M
    Edited by: Sachin Mathapati on Jun 17, 2009 4:19 PM

  • Performance of WEB enabling ( Converting to Oracle 8i and Forms 6i)

    We are working on a project to convert a forms 4.5 and Oracle 7.3.4 application to a web based app ( Oracle 8i and Forms 6i). I want to know if there will be a performance hit (improve or decrease) as a result of this.
    Please help

    Satish - concerned about your statement that you have not used in in production but you think its not the good. If you can quantify your statement I will address is.
    As for Bobs points - check out http://forums.oracle.com/forums/message.jsp?id=836060
    This probably addresses Bobs concerns.
    If you are concerned - take a look at the testimonials. Go to otn.oracle.com/products/forms and click on the Testimonials link.
    Believe it or not we actually have people who are running FASTER on the Web - How can that be!!! - well the reason is that the have uses on slow links - when running client server there database access is across these links and since they had database intensive application they found it could be slow. On the web the data trasfer between the app server and the database was on a fast link and the client (who are still on the slow link) are getting only screen draw information which is alot less than the database traffic.
    Hope this helps
    Grant

  • Form - Perform and ABAP coding

    Hi:
    I have a requirement to get vendor address from database and print on the form. I could print only one field only Name1, but not details like Street or country Etc are not getting printed. Even if we pass multiple variables as input and putput variables using perform of form, I think we need to declare only one input as INTTAB  STRUCTURE ITCSY and one out put variable as OUTTAB  STRUCTURE ITCSY in the ABAP program. In the program I am using Index option like 1, 2 and modifying details of OUTTAB. Is it correct?.
    Still I am unable to print complete address on the form.
    For this I am unsing Perfom option in the form.
    Can you please help in the following:
    1) Can I pass one value vendor from form using perform and get back a structure from ABAP program?.
    2) I am using following:
             DEFINE &VENDOR_NAME& = ' '
             DEFINE &VENDOR_STREET& = ' '
             PERFORM GET_DATA IN PROGRAM Z_TEST
                       USING &VENDOR_NO&
                       CHANGING &VENDOR_NAME&
                       CHANGING &VENDOR_STREET&
             ENDPERFORM.
    For Printing I am using inthe form
                        &VENDOR_NAME&
                        &VENDOR_STREET&
    In the ABAP program I am using
    FORM GET_DATA TABLES INTTAB  STRUCTURE ITCSY
                         OUTTAB1 STRUCTURE ITCSY.
      IF SY-SUBRC EQ 0.
        SELECT SINGLE NAME1 STR_SUPPL1
           FROM ADRC
           INTO (V_NAME1,V_STR_SUPPL1)
           WHERE ADDRNUMBER = V_ADRNR.
        IF SY-SUBRC EQ 0.
    *- Name1
          READ TABLE OUTTAB1 INDEX 1.
          MOVE V_NAME1 TO OUTTAB1-VALUE.
          MODIFY OUTTAB1 INDEX SY-TABIX.
    *- Street
          READ TABLE OUTTAB1 INDEX 2.
          MOVE V_STR_SUPPL1 TO OUTTAB1-VALUE.
          MODIFY OUTTAB1 INDEX SY-TABIX.
      ENDIF.
    Can you please check above code and let me know if I am doing mistake anywhere?..like passing variables, printing variables on the form and ABAP sub-routine etc.
    Please do not copye again same code what is find in SAP ABAP help.
    Thanks in advance for your help.
    Thanks,
    Rama

    Naren:
    Your code did not work...
    Sorry I did not paste my complete code(when I posted message )as too much code might be confusing. Please find my code below:
    FORM GET_DATA TABLES INTTAB  STRUCTURE ITCSY
                         OUTTAB1 STRUCTURE ITCSY.
      DATA: V_ADRNR          LIKE LFA1-ADRNR,
                V_NAME1          LIKE ADRC-NAME1,
                V_STR_SUPPL1 LIKE ADRC-STR_SUPPL1,
                V_LIFNR             LIKE LFA1-LIFNR.
      READ TABLE INTTAB INDEX 1.
      V_LIFNR =  INTTAB-VALUE.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = V_LIFNR
        IMPORTING
          OUTPUT = V_LIFNR.
      SELECT SINGLE ADRNR
        INTO V_ADRNR
        FROM LFA1
         WHERE LIFNR = V_LIFNR.
      IF SY-SUBRC EQ 0.
        SELECT SINGLE NAME1 STR_SUPPL1
           FROM ADRC
           INTO (V_NAME1,V_STR_SUPPL1)
           WHERE ADDRNUMBER = V_ADRNR.
        IF SY-SUBRC EQ 0.
    *- Name1
          READ TABLE OUTTAB1 INDEX 1.
          MOVE V_NAME1 TO OUTTAB1-VALUE.
          MODIFY OUTTAB1 INDEX SY-TABIX.
    *- Name1
          READ TABLE OUTTAB1 INDEX 2.
          MOVE V_STR_SUPPL1 TO OUTTAB1-VALUE.
          APPEND OUTTAB1.
        ELSE.
          READ TABLE OUTTAB1 INDEX 1.
          MOVE 'NO NAME' TO OUTTAB1-VALUE.
          MODIFY OUTTAB1 INDEX SY-TABIX.
        ENDIF.
      ENDIF.
    ENDFORM.
    I am not sure where the mistake can be in the SAP-Form or in the ABAP Subroutine code....
    Thanks,
    Rama

  • Find perform statement in MB1B which is calling Form statement in Zprogram

    Hi,
    we written form statement in zprogram, it is called in MB1B transaction.this linked
    to one output type.my problem is how to find  perform statement in MB1B.
    Do help at earliest.
    Thanks in advance.
    Rama.
    SAP-Techincal consultant.

    Thanks for reply.
    in zprogram we have been updating ztables.problem here is even we set break point here, cursor  not coming into that subroutine when we run transaction MB1B.
    CAN U PLZ say how to stop execution in subroutine.
    YOURS
    RAM

  • HCM Process and Forms Dynamic Actions

    Hi
    We are implementing HCM process and forms and presume that dynamic actions will have to be recreated as rules.
    Can anyone give any guidance in this area as some of our dynamic actions are quite complex.
    Many thanks
    Ian

    Hi,
    For HR forms please follow the following link
    HCM Processes and Forms (www.service.sap.com/erp:  - SAP ERP Human Capital Management -> Workforce Process Management -> HCM Processes and Forms -> Media Library)
    https://websmp205.sap-ag.de/~form/sapnet?_SHORTKEY=00200797470000081848&
    A dynamic action has the following components.
    Infotype Number (INFTY): specifies the infotype for which you want the dynamic action triggered
    Subtype (SUBTY): narrows the focus to a specific subtype
    Field Name (FIELDN): starts your action when a maintenance function is performed on a particular field
    Function (FC): specifies the various maintenance operations to which your dynamic action would respond. They are 02 (change); 04 (create); 06 (create and change); 08 (delete); 10 (change and delete); 12 (create and delete). Dynamic actions are only applicable in maintenance operations, not in display functions.
    Sequence Number (NO): refers to a sequential number.
    Step (A): specifies a particular type of action. No dynamic action is executed if the function character has a value other than one of the following:
                 P: Plausibility checks, which allow you to check certain conditions.          
                 I: Calls an infotype for processing
                 W: Called after the I statement and used to assign values to screen fields while creating or copying another infotype record through the I statement 
                  F: Calls a FORM routine (subroutines in ABAP) during your action. The routine may reside in or out the module pool MPNNNN00.
                 V: Lets you treat collectively a number of fields for which you want to define a common dynamic action
                  M: Sends SAP Office mail
    Variable function part: The variable function part along with the step indicator forms the core part of your action. It specifies the processing details when the dynamic action is triggered. For example: 
    Requirement: When the postal code or the city of an employeeu2019s permanent residence is changed in infotype 0006, an email should be sent to the administrator.
    INFTY    SUBTY    FIELDN    FC          NO.    STEP       VARIABLE FUNCTION
    0006           1             ORT01      06             001           V               PSTLZ            
    0006           1             PSTLZ      06             002           M               M0001
    The V statement on line 001 is used to link the two fields to the M statement. The statements relevant to field PSTLZ are also applicable to the ORT01 field.
    When a record is created or changed in infotype 0006 of permanent address, an email is sent using the feature M0001. Information such as the recipient address, subject, and content of the mail is derived from M0001.
    Warm REgards,
    Kapil

  • Abort system error in program SAPLRSS2 and form MULTI_ASSIGN-01-

    After executing a query with RSRT, I got an error message: "Abort system error in program SAPLRSS2 and form MULTI_ASSIGN-01-".
    The error appeared first after patching the SAP BW with the Enhancement Package 1 to version 7.01.
    I found the note 1593976 concerning this problem. But installing the note didn't help.
    I set a breakpoint at the "PERFORM MULTI_ASSIGN" - statement in the function module "RRS_GVAR_FROM_VREP_FILL" where the exception is thrown.
    I compared the code of the form with the older version of the form.
    Current version (7.01):
    ASSIGN COMPONENT l_s_fieldname OF STRUCTURE c_sx_gvar TO <l_gvar_table>.
    IF sy-subrc NE 0. PERFORM x_message USING rs_c_true 'MULTI_ASSIGN-01-'. ENDIF.
    Older version (7.00):
      ASSIGN COMPONENT L_FIELDNAME OF STRUCTURE C_SX_GVAR TO <L_GVAR_TABLE>.
    check sy-subrc eq 0.
    The newer version raises an error message where the older version only left the form. So I simulated the old program behaviour by jumping over the 2 occurences of the "PERFORM MULTI_ASSIGN" - statement, because the form doesn't do any changes anyway, when it is left right after the call. The query then seems to be executed properly.
    I don't know whether the raising of a message is correct here and I already did something wrong in the old version, which hasn't been detected since EnhP 1 or if the raising of a message is not appropriate here. May you help me out in this situation ?

    Thanks! That really helped me out. I thought, I already regenerated the query report. But it seems it has not been the case.

  • QUERY PERFORMANCE AND DATA LOADING PERFORMANCE ISSUES

    WHAT ARE  QUERY PERFORMANCE ISSUES WE NEED TO TAKE CARE PLEASE EXPLAIN AND LET ME KNOW T CODES...PLZ URGENT
    WHAT ARE DATALOADING PERFORMANCE ISSUES  WE NEED TO TAKE CARE PLEASE EXPLAIN AND LET ME KNOW T CODES PLZ URGENT
    WILL REWARD FULL POINT S
    REGARDS
    GURU

    BW Back end
    Some Tips -
    1)Identify long-running extraction processes on the source system. Extraction processes are performed by several extraction jobs running on the source system. The run-time of these jobs affects the performance. Use transaction code SM37 — Background Processing Job Management — to analyze the run-times of these jobs. If the run-time of data collection jobs lasts for several hours, schedule these jobs to run more frequently. This way, less data is written into update tables for each run and extraction performance increases.
    2)Identify high run-times for ABAP code, especially for user exits. The quality of any custom ABAP programs used in data extraction affects the extraction performance. Use transaction code SE30 — ABAP/4 Run-time Analysis — and then run the analysis for the transaction code RSA3 — Extractor Checker. The system then records the activities of the extraction program so you can review them to identify time-consuming activities. Eliminate those long-running activities or substitute them with alternative program logic.
    3)Identify expensive SQL statements. If database run-time is high for extraction jobs, use transaction code ST05 — Performance Trace. On this screen, select ALEREMOTE user and then select SQL trace to record the SQL statements. Identify the time-consuming sections from the results. If the data-selection times are high on a particular SQL statement, index the DataSource tables to increase the performance of selection (see no. 6 below). While using ST05, make sure that no other extraction job is running with ALEREMOTE user.
    4)Balance loads by distributing processes onto different servers if possible. If your site uses more than one BW application server, distribute the extraction processes to different servers using transaction code SM59 — Maintain RFC Destination. Load balancing is possible only if the extraction program allows the option
    5)Set optimum parameters for data-packet size. Packet size affects the number of data requests to the database. Set the data-packet size to optimum values for an efficient data-extraction mechanism. To find the optimum value, start with a packet size in the range of 50,000 to 100,000 and gradually increase it. At some point, you will reach the threshold at which increasing packet size further does not provide any performance increase. To set the packet size, use transaction code SBIW — BW IMG Menu — on the source system. To set the data load parameters for flat-file uploads, use transaction code RSCUSTV6 in BW.
    6)Build indexes on DataSource tables based on selection criteria. Indexing DataSource tables improves the extraction performance, because it reduces the read times of those tables.
    7)Execute collection jobs in parallel. Like the Business Content extractors, generic extractors have a number of collection jobs to retrieve relevant data from DataSource tables. Scheduling these collection jobs to run in parallel reduces the total extraction time, and they can be scheduled via transaction code SM37 in the source system.
    8). Break up your data selections for InfoPackages and schedule the portions to run in parallel. This parallel upload mechanism sends different portions of the data to BW at the same time, and as a result the total upload time is reduced. You can schedule InfoPackages in the Administrator Workbench.
    You can upload data from a data target (InfoCube and ODS) to another data target within the BW system. While uploading, you can schedule more than one InfoPackage with different selection options in each one. For example, fiscal year or fiscal year period can be used as selection options. Avoid using parallel uploads for high volumes of data if hardware resources are constrained. Each InfoPacket uses one background process (if scheduled to run in the background) or dialog process (if scheduled to run online) of the application server, and too many processes could overwhelm a slow server.
    9). Building secondary indexes on the tables for the selection fields optimizes these tables for reading, reducing extraction time. If your selection fields are not key fields on the table, primary indexes are not much of a help when accessing data. In this case it is better to create secondary indexes with selection fields on the associated table using ABAP Dictionary to improve better selection performance.
    10)Analyze upload times to the PSA and identify long-running uploads. When you extract the data using PSA method, data is written into PSA tables in the BW system. If your data is on the order of tens of millions, consider partitioning these PSA tables for better performance, but pay attention to the partition sizes. Partitioning PSA tables improves data-load performance because it's faster to insert data into smaller database tables. Partitioning also provides increased performance for maintenance of PSA tables — for example, you can delete a portion of data faster. You can set the size of each partition in the PSA parameters screen, in transaction code SPRO or RSCUSTV6, so that BW creates a new partition automatically when a threshold value is reached.
    11)Debug any routines in the transfer and update rules and eliminate single selects from the routines. Using single selects in custom ABAP routines for selecting data from database tables reduces performance considerably. It is better to use buffers and array operations. When you use buffers or array operations, the system reads data from the database tables and stores it in the memory for manipulation, improving performance. If you do not use buffers or array operations, the whole reading process is performed on the database with many table accesses, and performance deteriorates. Also, extensive use of library transformations in the ABAP code reduces performance; since these transformations are not compiled in advance, they are carried out during run-time.
    12)Before uploading a high volume of transaction data into InfoCubes, activate the number-range buffer for dimension IDs. The number-range buffer is a parameter that identifies the number of sequential dimension IDs stored in the memory. If you increase the number range before high-volume data upload, you reduce the number of reads from the dimension tables and hence increase the upload performance. Do not forget to set the number-range values back to their original values after the upload. Use transaction code SNRO to maintain the number range buffer values for InfoCubes.
    13)Drop the indexes before uploading high-volume data into InfoCubes. Regenerate them after the upload. Indexes on InfoCubes are optimized for reading data from the InfoCubes. If the indexes exist during the upload, BW reads the indexes and tries to insert the records according to the indexes, resulting in poor upload performance. You can automate the dropping and regeneration of the indexes through InfoPackage scheduling. You can drop indexes in the Manage InfoCube screen in the Administrator Workbench.
    14)IDoc (intermediate document) archiving improves the extraction and loading performance and can be applied on both BW and R/3 systems. In addition to IDoc archiving, data archiving is available for InfoCubes and ODS objects.
    Hope it Helps
    Chetan
    @CP..

  • Design Time for Processes and Forms

    Hi experts,
    When trying to open  "Design Time for Processes and Forms" in order to create a process, I get a dump.
    Could you let me know what could be wrong ? config? etc..
    Hereunder is a sample of what I found in T.code ST22
    The following checkpoint group was used: "No checkpoint group specified"
    If in the ASSERT statement the addition FIELDS was used, you can find
    the content of the first 8 specified fields in the following overview:
    " (not used) "
    " (not used) "
    " (not used) "
    " (not used) "
    " (not used) "
    " (not used) "
    " (not used) "
    " (not used) "
        referenced node must exist
          READ TABLE object_hierarchy_nodes TRANSPORTING NO FIELDS
                     WITH KEY node_id = object_hierarchy_node_wa-ref_node_id
    >>>      ASSERT sy-subrc = 0.
        ENDIF.
      provider has to be specified (except in case of recursion)
        IF object_hierarchy_node_wa-ref_node_id IS INITIAL.
          ASSERT object_hierarchy_node_wa-provider_id IS NOT INITIAL.
        ENDIF.
    Thanks in advance,
    Louis

    note: Note 1075650
    Re: Assertion_Failed dump when accessing Design Time for Processes & Forms EP3
    regards,
    Prakesh.

  • Change of Position in MSS with Process and Forms

    Hi,
    I'm trying to create authorizations for a change of position in Process and Forms, but every time that I choose a new position to the employee I get the error, No authorization, with this details:
    No authorization
    Message no. 5A277
    Diagnosis
    You are not authorized to perform this activity.
    System Response
    The system cancels the activity you have tried to perform.
    Procedure
    If necessary, you can maintain missing authorizations in Customizing. Please remember that both the standard authorizations and the structural authorizations are checked.
    I have managed to change the position and create positions in SAP with t-code PPOME, but in the MSS Portal it doesn't work.
    I use authorization with context ( S_ORIGINCON ) with a FM in the structural profile that returns my objects ( O, S, P ). I also have personnel planning authorization ( PLOG ) for the returned objects.
    Any help to overcome this problem will be greatly appreciated.
    Regards,
    Diogo Silva.

    Hi there,
    We stop using SAP code to manipulate the infotype 0001, and started using our own code throw generic services I guess (Not my part of the project).
    The problem was that in a change of position for a new created position or even for an existing position there was a need for access to the default position OBJID='99999999'. That's why when you give authorization for object OTYPE=' ' and OBJID = ' ' you will not get an error, because it gives authorization for all objects, witch defeats the purpose of security.
    If you debug the functions used by the portal (MSS or ESS) you will see that in some FM on the call stack there is passed a flag that controls wether or not there is a authorization check for that default position.
    Basically ww stop using the SAP code, and started calling this FM (BAPI, etc) ourselves, and them we manipulated that flag so that we could circumvent the error.
    I hope it was clear, sorry if it was not, truth be told it was a long time since I finish that project.
    If you need anymore help just let me know.
    Regards,
    Diogo Silva.

  • 9.2.0.6 performs better if stats are deleted

    I have this behaviour with 90% of queries where deleting the schema stats makes it perform the best in some cases improvement of 300%.
    The query was written for 9.2.0.6 and we never had 8i.
    I have modified the optimizer settings in init.ora but never got close to the way rule based performs. What could be causing this?
    I can post the query with 3 scenarios if anyone wants to look.
    Thanks

    Check the explain plans for the queries with and without statistics, that will tell you what's causing the performance difference. You may end up having to re-work some of the queries if you plan on switching to the cost based optimizer. We have applications that have never used statistics, generating them degraded performance and they were deleted. Application area decided they did not want to spend the time to rework the queries, I guess they'll do it when rule based goes away.
    Good luck.

  • Report and Form - Nothing in Session

    Version 2.0
    I have a Report and Form combination. The "Edit" link is set to the seq_id. When the "Edit" link is clicked on the report and the form populates with the information, I then clicked on the Session link in the dev bar and there is nothing in session state except for my seq_id.
    I would have expected to see all my information that is populated on the form. Am I missing something (except for my information in session :) )?
    Thanks,
    Joe

    Arie,
    That's what I have in my HTML Header section:
    function compute_total_cost()
    document.getElementById('P2_TOTAL_COST').value =
    parseInt (document.getElementById('P2_DATA_COLLECT_FORM_PREP').value) +
    parseInt (document.getElementById('P2_PRINT_COST').value) +
    parseInt (document.getElementById('P2_MAIL_COST').value);
    and a call of onChange="javascript:compute_total_cost();" in each of the costing HTML Form Element Attributes. But if there's noting in session, how can the values be accessed.
    I also did start a new thread for this per Scott's instructions :)
    Thanks,
    Joe

  • FAQ's, intros and memorable discussions in the Performance and Tuning Forum

    Welcome to the SDN ABAP Performance and Tuning Forum!
    In addition to release dependent information avalaible by:
    - pressing the F1 key on an ABAP statement,
    - or searching for them in transaction ABAPDOCU,
    - using the [SDN ABAP Development Forum Search|https://www.sdn.sap.com/irj/sdn/directforumsearch?threadid=&q=&objid=c42&daterange=all&numresults=15&rankby=10001],
    - the information accessible via the [SDN ABAP Main Wiki|https://wiki.sdn.sap.com/wiki/display/ABAP],
    - the [SAP Service Marketplace|http://service.sap.com] and see [SAP Note 192194|https://service.sap.com/sap/support/notes/192194] for search tips,
    - the 3 part [How to write guru ABAP code series|https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/f2dac69e-0e01-0010-e2b6-81c1e8e5ce50] ... (use the search to easily find the other 2 documents...)
    ... this "sticky post" lists some threads from the ABAP forums as:
    - An introduction for new members / visitors on topics discussed in threads,
    - An introduction to how the forums are used and the quality expected,
    - A collection of some threads which provided usefull answers to questions which are frequently asked, and,
    - A collection of some memorable threads if you feel like reading some ABAP related material.
    The listed threads will be enhanced from time to time. Please feel welcome to post to [this thread|Suggestions thread for ABAP FAQ sticky; to suggest any additional inclusions.
    Note: When asking a question in the forum, please also provide sufficient information such that the question can be answered usefully, do not repeat interview-type questions, and once closed please indicate which solution was usefull - to help others who search for it.

    ABAP Performance and Tuning
    Read Performance   => Gurus take over the discussion from Guests caught cheating the points-system.
    SELECT INTO TABLE => Initial questions often result in interesting follow-up discussions.
    Inner Joins vs For all Entries. => Including infos about system parameters for performance optimization.
    Inner Join Vs Database view Vs for all entries => Usefull literature recommended by performance guru YukonKid.
    Inner Joins vs For All Entries - performance query => Performance legends unplugged... read the blogs as well.
    The ABAP Runtime Trace (SE30) - Quick and Easy => New tricks in old tools. See other blogs by the same author as well.
    Skip scan used instead of (better?) range scan => Insider information on how index access works.
    DELETE WHERE sample case that i would like to share with you => Experts discussing the deletion of data from internal tables.
    Impact of Order of fields in Secondary  index => Also discussing order of fields in WHERE-clause
    "SELECT SINGLE" vs. "SELECT UP TO 1 ROWS" => Better for performance or semantics?
    into corresponding fields of table VERSUS into table => detailed discussion incl. runtime measurements
    Indexes making program run slower... => Everything you ever wanted to know about Oracle indexes.
    New! Mass reading standard texts (STXH, STXL) => avoiding single calls to READ_TEXT for time-critical processes
    New! Next Generation ABAP Runtime Analysis (SAT) => detailed introduction to the successor of SE30
    New! Points to note when using FOR ALL ENTRIES => detailed blog on the pitfall(s) a developer might face when using FAE
    New! Performance: What is the best way to check if a record exist on a table ? => Hermann's tips on checking existence of a record in a table
    Message was edited by: Oxana Noa Zubarev

Maybe you are looking for

  • User defined data type generated class

    Hi When defining a new data type in the local dictionary, one has to option of generating a representation class. I have done this and indeed received the class in my app. However, I fail to understand how I can use this class to retrieve values set

  • Installing two iMS against one iDS

    Hello, I need to install two iMS 5.2 against one iDS 5.0 sp2 on solaris. My question is wether there is anything that could go wrong with the installation of the second one and wether there are any steps that should be taken before proceeding. Is the

  • Retrieving File from remove server into String

    Hi, I've tried a few strategies to solve this problem but haven't been able to figure it out yet. Here is what I'm trying to do. From my website, I would like to call a JavaScript function from another external server. When this javascript function i

  • Removing Open With dialog from contextual menus

    Does anyone know how to remove the "Open With..." option from contextual menus? Thanks

  • How Do I Unsubscribe from the Mac-Forums Newsletter?

    Apple has started another newsletter.  I don't want it. The One-Click Unsubscribe button at the bottom does not work. Nor does the Manage Subscriptions button. They both just tell you to log in and manage your email notifications. In addition to rele