Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Row level locking of a table

Former Member
0 Likes
6,303

Hello All,

Can I lock the table at row level if I would use the Insert command to update the table?

Thanks.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
2,634

Hello,

To lock the table at row level while inserting,

1. Create a lock object using SE11 for that perticular table.

2. Include field names in Lock parameters.

It will generate two FMs one for locking and another for unlocking.

3. Call the lock FM before updating the table and pass that row key value(For fields which taken in lock parameters for creating lock objects) to the exporting parameters.

4. Perform updation.

Regards,

P Bansal

5 REPLIES 5
Read only

sivasatyaprasad_yerra
Product and Topic Expert
Product and Topic Expert
0 Likes
2,634

Yes. You can lock. Use generated Enqueue functioon module by passing all key field values.

Read only

Former Member
0 Likes
2,635

Hello,

To lock the table at row level while inserting,

1. Create a lock object using SE11 for that perticular table.

2. Include field names in Lock parameters.

It will generate two FMs one for locking and another for unlocking.

3. Call the lock FM before updating the table and pass that row key value(For fields which taken in lock parameters for creating lock objects) to the exporting parameters.

4. Perform updation.

Regards,

P Bansal

Read only

Former Member
0 Likes
2,634

HI,

[]

[]

Read only

Former Member
0 Likes
2,634

create a lock object in se11 and give the table in the lock object.

write a program using the function modules enqueue for locking and dqueue parameters to unlock based on the logic you want by passing the key fields of the table to the function modules.

**********************************************************************************************

Creating Lock Objects

Procedure

Select object type Lock object in the initial screen of the ABAP Dictionary, enter an object name and choose Create. The name of a lock object should begin with an E (Enqueue).

The maintenance screen for lock objects is displayed.

Enter an explanatory short text in the field Short text.

You can then use the short text to find the lock object at a later time, for example with the R/3 Repository Information System.

Enter the name of the primary table of the lock object.

All other tables in the lock object must be linked with the primary table using foreign keys. There are also some restrictions on the valid foreign key relationships.

Select the lock mode of the primary table in the field below it.

The lock mode is used as the default value for the corresponding parameters of the function modules generated from the lock object.

Choose Add if you want to lock records in more than one table with the lock object.

A list of all the tables linked with the primary table using valid foreign keys is displayed. Select the appropriate table. The lock mode of the primary table is copied as lock mode. You can change this setting as required, for example you can assign the lock mode separately for each table.

Similarly, you can add a table linked with the secondary table just added with foreign keys. To do this, place the cursor on the name of the secondary table and choose Add.

If no lock mode is assigned to a table, no lock is set for the entries in this table when the generated function modules are called. You should not assign a lock mode if a secondary table was only used to define a path between the primary table and another secondary table with foreign keys.

Save your entries.

A dialog box appears in which you have to assign the lock object a development class.

You can (optionally) exclude lock parameters (see lock objects) from the function module generation on the Lock parameter tab page. This makes sense for example if you always want to lock a parameter generically.

To do this, simply deselect the Weight flag for the parameter. The parameter is not taken into consideration in the generated function modules. This parameter is then always locked generically.

The name of a lock parameter is usually the name of the corresponding table field. If two fields with the same name are used as lock parameters in the lock object from different tables, you must choose a new name for one of the fields in field Lock parameter.

You can define whether the function modules generated from the lock object should be RFC-enabled on the Attributes tab page.

If you set the Allow RFC flag, the generated function modules can be called from within another system with Remote Function Call.

If you permit Remote Function Calls for an existing lock object, you must ensure that the generated function modules are called from within an ABAP program with parameters appropriate for the type. You should therefore check all programs that use the associated function modules before activating the lock object with the new option.

Choose .

Result

When you activate the lock object, the two function modules ENQUEUE_ are generated from its definition to set and release locks.

You can find information about the activation flow in the activation log, which you can display with Utilities ® Activation log. If errors occurred during activation, the activation log is displayed immediately.

Read only

Former Member
2,634

Hi,

i have a table zy222 with key fields EBELN, EBELP AND XBLNR and i have created a lock in SE11.

when i need to lock a particular record alone means, i need to give the above mentioned keyfields.

CALL FUNCTION 'ENQUEUE_EZY222'
 EXPORTING
   MODE_ZY222           = 'E'
   MANDT                = SY-MANDT
   EBELN                = '10402402002'
   EBELP                = '10'
   XBLNR                = '123456'
*   X_EBELN              = ' '
*   X_EBELP              = ' '
*   X_XBLNR              = ' '
*   _SCOPE               = '2'
*   _WAIT                = ' '
*   _COLLECT             = ' '
 EXCEPTIONS
   FOREIGN_LOCK         = 1
   SYSTEM_FAILURE       = 2
   OTHERS               = 3          .
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

when i need my whole zy222 table to be locked means

CALL FUNCTION 'ENQUEUE_EZY222'
 EXPORTING
   MODE_ZY222           = 'E'
   MANDT                = SY-MANDT
 EXCEPTIONS
   FOREIGN_LOCK         = 1
   SYSTEM_FAILURE       = 2
   OTHERS               = 3          .

IF sy-subrc =1.
* give error message
ENDIF.

similarly for removing the lock

CALL FUNCTION 'DEQUEUE_EZY222'
 EXPORTING
   MODE_ZY222       = 'E'
   MANDT            = SY-MANDT
   EBELN            = '10402402002'
   EBELP            = '10'
   XBLNR            = '123456'
*   X_EBELN          = ' '
*   X_EBELP          = ' '
*   X_XBLNR          = ' '
*   _SCOPE           = '3'
*   _SYNCHRON        = ' '
*   _COLLECT         = ' '
          .

for all records

CALL FUNCTION 'DEQUEUE_EZY222'
 EXPORTING
   MODE_ZY222       = 'E'
   MANDT            = SY-MANDT          .

hope this helps you.

Regards,

Sakthi.