Quantcast
Channel: SCN : All Content - ABAP Development
Viewing all articles
Browse latest Browse all 8332

LUW (Logical Unit of Work)

$
0
0

Transactions and Logical Units of Work

 

In everyday language, a transaction is a sequence of actions that logically belong together in a business sense and which either procure or process data. It covers a self-contained procedure, for example, generating a list of customers, creating a flight booking, or sending reminders to customers. From the point of view of the user, it forms a logical unit.

The completeness and correctness of data must be assured within this unit. In the middle of a transaction, the data will usually be inconsistent. For example, when you transfer an amount in financial accounting, this must first be deducted from one account before being credited to another. In between the two postings, the data is inconsistent, since the amount that you are posting does not exist in either account. It is essential for application programmers to know that their data is consistent at the end of the transaction. If an error occurs, it must be possible to undo the changes made within a logical process.

In the R/3 System, there are three terms frequently used in this connection:

Database Logical Unit of Work (LUW)

A database LUW is the mechanism used by the database to ensure that its data is always consistent.

SAP LUW

An SAP LUW is a logical unit consisting of dialog steps, whose changes are written to the database in a single database LUW.

SAP Transaction

An SAP transaction is an application program that you start using a transaction code. It may contain one or more SAP LUWs.

 

 

 

Database Logical Unit of Work (LUW)

 

  1. From the point of view of database programming, a database LUW is an inseparable sequence of database operations that ends with a database commit.
  2. The database LUW is either fully executed by the database system or not at all. Once a database LUW has been successfully executed, the database will be in a consistent state.
  3. If an error occurs within a database LUW, all of the database changes since the beginning of the database LUW are reversed. This leaves the database in the state it had before the transaction started.
  4. The database changes that occur within a database LUW are not actually written to the database until after the database commit. Until this happens, you can use a database rollback to reverse the changes.

 

 

(In the R/3 System, database commits and rollbacks can be triggered either implicitly or using explicit commands)

 

 

Implicit Database Commits (in the R/3 System).

 

A work process can only execute a single database LUW. The consequence of this is that a work process must always end a database LUW when it finishes its work for a user or an external call.

There are four cases in which work processes trigger an implicit database commit:

  1. When a dialog step is completed.

Control changes from the work process back to the SAPgui.

  1. When a function module is called in another work process (RFC).

Control passes to the other work process.

  1. When the called function module (RFC) in the other work process ends.

Control returns to the calling work process.

  1. Error dialogs (information, warning, or error messages) in dialog steps.

Control passes from the work process to the SAPgui.

Explicit Database Commits (in the R/3 System)

 

There are two ways to trigger an explicit database commit in your application programs:

  1. Call the function module DB_COMMIT

The sole task of this function module is to start a database commit.

  1. 2. Use the ABAP statement COMMIT WORK

This statement starts a database commit, but also performs other tasks (refer to the keyword documentation for COMMIT WORK).            

 

 

 

 

Implicit Database Rollbacks in the R/3 System

 

  1. Runtime error in an application program

This occurs whenever an application program has to terminate because of an unforeseen situation (for example, trying to divide by zero).

  1. 2. Termination message

Termination messages are generated using the ABAP statement MESSAGE with the message type A or X. In certain cases (updates), they are also generated with message types I, W, and E. These messages end the current application program.

Explicit Database Rollbacks in the R/3 System

 

You can trigger a database rollback explicitly using the ABAP statement ROLLBACK WORK. This statement starts a database rollback, but also performs other tasks

(refer to the keyword documentation for COMMIT WORK).

 

Notes :

 

 

Database LUWs and Database Locks

 

The database changes made within it, a database LUW also consists of database locks. The database system uses locks to ensure that two or more users cannot change the same data simultaneously, since this could lead to inconsistent data being written to the database.

A database lock  can only be active for the duration of a database LUW. They are automatically released when the database LUW ends. (In order to program SAP LUWs, we need a lock mechanism within the R/3 System that allows us to create locks with a longer lifetime (refer to The R/3 Locking Concept [Page 1270])

 

SAP LUW

The Open SQL statements INSERT, UPDATE, MODIFY, and DELETE allow you to program database changes that extend over several dialog steps.

The following diagram shows the individual Database LUWs in a typical screen sequence:

  1. Even if you have not explicitly programmed a database commit, the implicitdatabase commit that occurs after a screen has been processed concludes the database LUW.

Under this procedure, you cannot roll back the database changes from previous dialog steps. It is therefore only suitable for programs in which there is no logical relationship between the individual dialog steps.

  1. However, the database changes in individual dialog steps normally depend on those in other dialog steps, and must therefore all be executed or rolled back together. These dependent database changes form logical units, and can be grouped into a single Database LUW using the Bundling techniques listed below.

 

 

SAP LUW : A Logical unit consisting of dialog steps, whose changes are written to the database in a single database LUW is called an SAP LUW. Unlike a database LUW, an SAP LUW can span several dialog steps, and be executed using a series of different work processes.

If an SAP LUW contains database changes, you should either write all of them or none at all to the database. To ensure that this happens, you must include a database commit when your transaction has ended successfully, and a database rollback in case the program detects an error.

However, since database changes from a database LUW cannot be reversed in case of subsequent database LUW, you must make all of the database changes for the SAP LUW in a single database LUW.

To maintain data integrity, you must bundle all of you database changes in the final Database LUW of the SAP LUW. The following diagram illustrates this principle:

The bundling technique for database changes within an SAP LUW ensures that you can still reverse them. It also means that you can distribute a transaction across more than one work process, and even across more than one R/3 System.

 

The possibilities for bundling database changes within an SAP LUW are listed below:

  1. The simplest form of bundling would be to process a whole application within a single dialog step.

Here, the system checks the user’s input and updates the database without a database commit occurring within the dialog step itself. Of course, this is not suitable for complex business processes.

 

Instead, the R/3 Basis system contains the following bundling techniques.

Bundling using Function Modules for Updates

 

  1. If you call a function module using the CALL FUNCTION... IN UPDATE TASK statement, the function module is flagged for execution using a special update work process. You can write the Open SQL statements for the database changes in the function module instead of in your program, and call the function module at the point in the program where you want.

When you call a function module using the IN UPDATE TASK addition, it and its interface parameters are stored as a log entry in a special database table called VBLOG.

The function module is executed using an update work process when the program reaches the COMMIT WORK statement. After the COMMIT WORK statement, the dialog work process is free to receive further user input. The dialog part of the transaction finishes with the COMMIT WORK statement. The update part of the SAP LUW then begins, and this is the responsibility of the update work process. The SAP LUW is complete once the update process has committed or rolled back all of the database changes.

NOTE  :

For further information about how to create function modules for use in update, refer to Creating Function Modules for Database Updates [Page 1282]

During the update, errors only occur in exceptional cases, since the system checks for all logical errors, such as incorrect entries, in the dialog phase of the SAP LUW. If a logical error occurs, the program can terminate the update using the ROLLBACK WORK statement. Then, the function modules are not called, and the log entry is deleted from table VBLOG.

Errors during the update itself are usually technical, for example, memory shortage. If a technical error occurs, the update work process triggers a database rollback, and places the log entry back into VBLOG. It then sends a mail to the user whose dialog originally generated the VBLOG entry with details of the termination. These errors must be corrected by the system administrator. After this, the returned VBLOG entries can be processed again.

For further information about update administration, see Update Administration.

This technique of bundling database changes in the last database LUW of the SAP LUW allows you to update the database asynchronously, reducing the response times in the dialog work process. You can, for example, decouple the update entirely from the dialog work process and use a central update work process on a remote database server.

 

 

Bundling Using Subroutines

 

The statement PERFORM ON COMMIT calls a subroutine in the dialog work process. However, it is not executed until the system reaches the next COMMIT WORK statement. Here, as well, the ABAP statement COMMIT WORK defines the end of the SAP LUW, since all statements in a subroutine called with PERFORM ON COMMIT that make database changes are executed in the database LUW of the corresponding dialog step.

 

Update in Dialog Work Process

PERFORM  X ON COMMIT.

PERFORM  Y ON COMMIT.

COMMIT WORK.

FORM  X ON COMMIT

                INSERT .... <db commit>

                UPDATE ... <db commit>

                DELETE .... <db commit>

  1. ENDFORM.

FORM  Y  ON COMMIT

                INSERT .... <db commit>

                UPDATE ... <db commit>

                DELETE .... <db commit>

  1. ENDFORM.

The advantage of this bundling technique against CALL FUNCTION... IN UPDATE TASK is  better performance, since the update data does not have to be written into an extra table.

The disadvantage, however, is that you cannot pass parameters in a PERFORM... ON COMMIT statement. Data is passed using global variables and ABAP memory. There is a considerable danger of data inconsistency when you use this method to pass data.

 

Bundling Using Function Modules in Other R/3 Systems

 

Function modules that you call using CALL FUNCTION... IN BACKGROUND TASK DESTINATION... are registered for background execution in another R/3 System when the program reaches the next COMMIT WORK statement (using Remote Function Call).

After the COMMIT WORK, the dialog process does not wait for these function modules to be executed (asynchronous update). All of the function modules that you register in this way are executed together in a single database LUW. These updates are useful, for example, when you need to maintain identical data in more than one database.

For further details, refer to the keyword documentation. For more details of RFC processing, refer to the Remote Communications section of the Basis Services documentation.

 

SAP Transactions

 

An SAP LUW is a logical unit consisting of dialog steps, whose changes are written to the database in a single database LUW.

In an application program, you end an SAP LUW with either the COMMIT WORK or ROLLBACK WORK statement. An SAP transaction is an application program that you start using a transaction code. It may contain one or more SAP LUWs.

Whenever the system reaches a COMMIT WORK or ROLLBACK WORK statement that is not at the end of the last dialog step of the SAP transaction, it opens a new SAP LUW. If a particular application requires you to write a complex transaction, it can often be useful to arrange logical processes within the SAP transaction into a sequence of individual SAP LUWs.

You can structure SAP transactions as follows:

  1. With one or more SAP LUWs.

 

Transactions in this form consist entirely of processing blocks (dialog modules, event blocks, function module calls, and subroutines). You should be careful to ensure that external subroutines or function modules do not lead to COMMIT WORK or ROLLBACK WORK statements accidentally being executed.

 

  1. By inserting an SAP LUW.

The ABAP statements CALL TRANSACTION (start a new transaction), SUBMIT (start an executable program), and CALL FUNCTION... DESTINATION (call a function module using RFC) open a new SAP LUW.

When you call a program, it always opens its own SAP LUW. However, it does not end the LUW of the SAP transaction that called it. This means that a COMMIT WORK or ROLLBACK WORK statement only applies to the SAP LUW of the called program. When the new LUW is complete, the system carries on processing the first SAP LUW.

  1. By running two SAP LUWs in parallel.

The CALL FUNCTION... STARTING NEW TASK statement calls a Function Module asynchronously in a new session. Unlike normal function module calls, the calling transaction carries on with its own processing as soon as the function module has started, and does not wait for it to finish processing. The function call is asynchronous. The called function module can now call its own screens and interact with the user.


Viewing all articles
Browse latest Browse all 8332

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>