Locking objects across RFC calls
Hi All,
I am developing a business application using SAP UI5 and the NetWeaver Service Gateway in an embedded scenario. I have RFCs build for the backend interaction. As per my knowledge, each RFC is considered as a separate transaction and the user is logged on and off as the RFC is processed. This removes the lock on the object that I need to be sustained till the next RFC call. Unlocking the object exposes it to possible editing by other users which is not desirable.
From what I have studied from this community, there are, by and large, two solutions
1. Custom Lock Table
2. Checking if the status of the object is the same during the second RFC call, and going ahead only if it was unchanged.
However, I am looking for more credible solution to this problem and would like to know how someone who experienced this issue have handled it.
Thanks in advance,
Neelesh
Hi Jacob
S_RFC and S_SERVICE This two authorization is nedded while calling RFC module from R3.
first of all test the module in R3. create a role using PFCG assign the tcode. su53 (authorization check) and also assign the S_RFC and S_SERVICE to role.
now test the RFC function module with this role in R3.
if u give any warning/error due to authorization. imediate run tcode su53 in same session or new session
i.e /nsu53 or /osu53.
look which authorization is missing for a object.
assign the relevant object and authorization to role.
any query revert back.
regards,
kaushal
Similar Messages
-
How to handle lock object in BDC call transcation method?
Hi,
how to handle lock object in BDC call transcation method?
Thanks In advances.If you are updating Z-fields then you need to create a lock entry, before you use call transaction.
After creating lock object, please use FM Enqueue_<lockname> before CALL transaction and FM Dequeue_<lockname> after you have commited your data.
Thanks,
Kartavya -
Hi,
in standard transaction I lock an object in an other system using RFC lock(enqueue function) but when I exit from transaction the object in other system is automatically unlocked without using the dequeue function.
Is It the correct behaviour?
Thanks,
Max BoscoloHi
Lock objects are use in SAP to avoid the inconsistancy at the time of data is being insert/change into database.
SAP Provide three type of Lock objects.
- Read Lock(Shared Locked)
protects read access to an object. The read lock allows other transactions read access but not write access to
the locked area of the table
- Write Lock(exclusive lock)
protects write access to an object. The write lock allows other transactions neither read nor write access to
the locked area of the table.
- Enhanced write lock (exclusive lock without cumulating)
works like a write lock except that the enhanced write lock also protects from further accesses from the
same transaction.
You can create a lock on a object of SAP thorugh transaction SE11 and enter any meaningful name start with EZ Example EZTEST_LOCK.
Use: you can see in almost all transaction when you are open an object in Change mode SAP could not allow to any other user to open the same object in change mode.
Example: in HR when we are enter a personal number in master data maintainance screen SAP can't allow to any other user to use same personal number for changes.
Technicaly:
When you create a lock object System automatically creat two function module.
1. ENQUEUE_<Lockobject name>. to insert the object in a queue.
2. DEQUEUE_<Lockobject name>. To remove the object is being queued through above FM.
You have to use these function module in your program.
check this link for example.
http://help.sap.com/saphelp_nw04s/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
tables:vbak.
call function 'ENQUEUE_EZLOCK3'
exporting
mode_vbak = 'E'
mandt = sy-mandt
vbeln = vbak-vbeln
X_VBELN = ' '
_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.
Normally ABAPers will create the Lock objects, because we know when to lock and how to lock and where to lock the Object then after completing our updations we unlock the Objects in the Tables
http://help.sap.com/saphelp_nw04s/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
purpose: If multiple user try to access a database object, inconsistency may occer. To avoid that inconsistency and to let multiple user give the accessibility of the database objects the locking mechanism is used.
Steps: first we create a loc object in se11 . Suppose for a table mara. It will create two functional module.:
1. enque_lockobject
1. deque_lockobject
before updating any table first we lock the table by calling enque_lockobject fm and then after updating we release the lock by deque_lockobject.
http://help.sap.com/saphelp_nw04/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
GO TO SE11
Select the radio button "Lock object"..
Give the name starts with EZ or EY..
Example: EYTEST
Press Create button..
Give the short description..
Example: Lock object for table ZTABLE..
In the tables tab..Give the table name..
Example: ZTABLE
Save and generate..
Your lock object is now created..You can see the LOCK MODULES..
In the menu ..GOTO -> LOCK MODULES..There you can see the ENQUEUE and DEQUEUE function
Lock objects:
http://www.sap-img.com/abap/type-and-uses-of-lock-objects-in-sap.htm
http://help.sap.com/saphelp_nw04s/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
Match Code Objects:
http://help.sap.com/saphelp_nw2004s/helpdata/en/41/f6b237fec48c67e10000009b38f8cf/content.htm
http://searchsap.techtarget.com/tip/0,289483,sid21_gci553386,00.html
See this link:
http://www.sap-img.com/abap/type-and-uses-of-lock-objects-in-sap.htm
Check these links -
lock objects
Lock Objects
Lock Objects
Regards
Anji -
SAP BW User getting locked by BO RFC calls
Hi,
we are encountering a problem with BO RFC calls locking SAP BW users that recently changed their password in BW.
Description of the problem in the ticket we raised at the SAP support:
SAP BO 4.1 SP2 Patch 4, linux installation
Backend: SAP BW 7.01 EHP8
BICS interface with SAP authentication
One of our users gets locked again and again in SAP BW (P19). The cause is a RFC connection that the BusinessObjects server (P59) tries to establish. The user used SAP BO last Friday for the last time and had to change his password in P19 this Tuesday. We think that there is some
process within SAP BO still trying to connect to SAP BW from time to time, using the old password. There is no open session visible for that user in the CMC. User is even getting locked when not in the office and during night time. RFC calls are established almost regualary every hour.
We already had this behaviour in our test-system. Restarting the BO-Server solved it. However, this is not the solution we want to use
in the productive environment. There has to be some way to kill the process that uses the old password on the BO server without restarting
the whole server. We do not understand why BO would still try to connect to BW with the old password - this has to be some kind of a bug.
Meanwhile the error disappeared for the first user (some days after it started, maybe the BO process ran into a timeout). However, other users started having the same behaviour after changing their password.
Our basis team tried to check the log files for advanced information on the conversations between BO and BW, but did not find any hints on which BO process might try to establish the connections.
The SAP support seems to be a little helpless at the moment...
Has anyone had similar problems?
Regards,
RobertHi again,
additional information: after approximately one week after the error appeared for the first time BO stops trying to establish the rfc connection for this specific user. Almost as if the "old-password-BO-process" ran into a 1 week timeout or something like that.
The problem is really strange. The SAP support is still not able to tell us how the gather the information they require.
Regards,
Robert -
RFC calls with SAP table insert - lock tables
Hi,
I have an external server program, which is calling a rfc function many times the same time with different transaction types. There are transaction types, which are downloading information from SAP (only send data back to the caller), and there are transaction types which are uploading data to SAP (inserting/updating data on SAP).
The function calls are synchronous as the server needs to get feedback directly. The parallel work processes for RFC calls are limited, so a system overload can´t happen.
The problem now is, if the server is down for while and going to be restarted, it´s opening parallel threads and calls the function in SAP at nearly the same time. That means, it will call the function with upload requests (table must be locked), and download requests the same time.
In the upload requests, the table has to be locked, that it can´t occur that we get wrong entries...
I can only enqueue the table with just two fields... I know, that is almost like locking the whole table, but it´s not possible to lock it in a different way.
I tried to use the enqueue function with the parameter WAIT, but it didn´t help, as there where too many parallel calls and after some seconds, they were ending up with an error (Because the table has been locked by another call).
It seems that it´s trying to lock the table again for all parallel calls at exactly the same time....
The calls has to be synchronous, as the server needs to get the feedback directly. Any ideas how top solve this, that it handles all incoming calls parallel and waits for the table is unlocked again?
Thank you for your help!Hi,
thank you for your answer!
I have investigated something new yesterday:
I thought at the beginning, that the problem just occurs, when the system work processes are reached. The system has for example set up 15 dialog processes and the external server is calling the function 20 times in parallel. Then we normally need 5 dialog processes more. The system is taking then all 15 dialog processes and the locks got stucked.
That means, that I´ll maybe only get 4 or 5 uploads, which have really been updated the tables. All the others couldn´t get the table locked for their process.
But if I now let the server call the function just about 13 times in parallel, nearly all uploads have been updated the table!
From my point of view, the lock from SAP gets stucked, when the limit of dialog processes is reached. It´s not working in the right way anymore...
The same is happening, when you set up in the system, that only 10 work proecesses can be used by RFC. If I have more than 10, it´s going to be critical with the locks....
WEIRD!
Can anybody help me out of trouble?
Thank you! -
Locking tables using a RFC Call
Hello,
I am trying to lock a Table in R/3 from BW by calling a Enqueue Function Module which is remote enabled in R/3. The BW Call to R/3 is successful but the table is not getting locked. I wanted to know if this is something that can be done.
I have an assumption once the locking is done in R/3 the connection in R/3 is closed and its getting unlocked automatically.
Please Post your answers if you guys have faced a similar situation.
RajeevI have an assumption once the locking is done in R/3 the connection in R/3 is closed and its getting unlocked automatically.
Your probably right, when making an RFC call, the locking done within, would only last during the execution of that call.
Regards,
Rich Heilman -
Any way to lock objects in stateless app?
Hi Guys
Firstly: I know... I know... Once the stateless request has completed, the "session" is destroyed along with any locks etc. But how do you handle situations where you need to keep a more persistent lock on an object across stateless invocations?
For example: Our stateless app allows you to update a customer record. I want to prevent someone from going into XD02 (or use our BSP app) to update the same record...
Any thoughts greatly appreciated!I had a little bit of time so I tried my shared memory idea and unfortunetely it didn't work. I can lock from within my shared memory class, however the locks are released as soon as the detatch_commit() of the area is called. When I look in the debugger I see something even more interesting. If I look at references to my object while my write program is running I see that the object is of my class type: ZCL_SDN_SHARED_ROOT and that it is referenced by the running program and also referenced as the following: KERNEL=
Now if I follow the debugger out of the execution of my program into the calling stack, I can see that my object reference still exists. If I look at the references, I still have two of them. One is the Kernel still, but the program's reference is gone. Now I have the following reference as well:
. This must be the reference to my Root instance in my shared memory area.
This is the really interesting part. If I drill into the object display of my root class instance it no longer displays as type CLASS=ZCL_SDN_SHARED_ROOT. It is now as follows: . It is as though the root instance isn't actually stored in Shared memory, just some meta model description of the object instance. This could very well explain why you can't persist locks or other ABAP Object References inside a shared memory class. -
Lock Object: Enqueue and Dequeue
Hi
Im using VB.Net, SAP .Net to do data entry, updates to
SAP R/3.
Now, I need to lock the data during user changes on
particular documents.
What I done is I created a lock object in SE11. Then
it produce 2 functions which are the ENQUEUE and
DEQUEUE.
Since the data reading from Non-SAP, I check for Allow
RFC and my lock mode is Exclusive and Cumulative.
After that, I also created a remote-enabled RFCs to be
call from VB.Net. These RFCs is calling the ENQUEUE
and DEQUEUE.
When I tested in SAP itself, the locking data is
working perfectly. I checked in SM12, it does shows
the locking entry.
But when I try in VB.Net and call the function
modules, it does not shows any entry in SM12. It is
like nothing happen at all.
After that, I do little test. Firstly I lock the data
from SAP then I run VB.Net, and it does shows the
message who is currently locking the data.
Anybody could help me on this?
Thank you.
Regards.See the following extract from documentation. Check if your lock object definition is satisfying all of them.
<i>Reference Fields for RFC-Enabled Lock Objects
The type of an RFC-enabled function module must be completely defined. The parameters of the generated function module therefore have the following reference fields for RFC-enabled lock objects:
Parameters Reference fields
X_<field name> DDENQ_LIKE-XPARFLAG
_WAIT DDENQ_LIKE-WAITFLAG
_SCOPE DDENQ_LIKE-SCOPE
_SYNCHRON DDENQ_LIKE-SYNCHRON
</i>
Here is the link to the documentation
http://help.sap.com/saphelp_46c/helpdata/en/4f/991f82446d11d189700000e8322d00/frameset.htm
Srinivas -
Hi experts,
My requirement is to create lock for parent table and its child tables.Each and every child tables is having relation with the parent table.
When iam creating the lock for parent table, in this process iam adding the child tables in the list.But here one child table is missing in the log eventhough its having the relation with parent table.
Valuable replies will be awarded with points.........
Regards,
Swetha.Hi,
it may help u
1) 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.
2) 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.
3) 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.
4) 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.
5) 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.
6) Save your entries.
A dialog box appears in which you have to assign the lock
object a development class.
7) 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.
8) Choose Activate
Regards -
How to create a lock object in se11
hi all,
Can anyone tell me the step by step procedure to lock as well as unlock a particular object in se11 trns code. with an real time example.
thanxs in advance
hariHi,
Lock objects are use in SAP to avoid the inconsistancy at the time of data is being insert/change into database.
SAP Provide three type of Lock objects.
- Read Lock(Shared Locked)
protects read access to an object. The read lock allows other transactions read access but not write access to
the locked area of the table
- Write Lock(exclusive lock)
protects write access to an object. The write lock allows other transactions neither read nor write access to
the locked area of the table.
- Enhanced write lock (exclusive lock without cumulating)
works like a write lock except that the enhanced write lock also protects from further accesses from the
same transaction.
You can create a lock on a object of SAP thorugh transaction SE11 and enter any meaningful name start with EZ Example EZTEST_LOCK.
Use: you can see in almost all transaction when you are open an object in Change mode SAP could not allow to any other user to open the same object in change mode.
Example: in HR when we are enter a personal number in master data maintainance screen SAP can't allow to any other user to use same personal number for changes.
Technicaly:
When you create a lock object System automatically creat two function module.
1. ENQUEUE_<Lockobject name>. to insert the object in a queue.
2. DEQUEUE_<Lockobject name>. To remove the object is being queued through above FM.
You have to use these function module in your program.
Creating Lock Objects
Procedure
1.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.
2.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.
3.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.
4.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.
5.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.
6.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.
7.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.
8.Save your entries.
A dialog box appears in which you have to assign the lock object a development class.
9.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.
9.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.
10.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.
11.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.
12 .Choose Activate .
Result
When you activate the lock object, the two function modules ENQUEUE_<lockobjectname> and DEQUEUE_<lockobjectname> 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.
Pls reward points.
Regards,
Ameet
Message was edited by:
Ameet Jassani -
Where we use lock objects in our coding like report
what is the purpose of lock objects s? how we use them in real time? like in devoloping reports?
Hi,,.
Lock objects are use in SAP to avoid the inconsistancy at the time of data is being insert/change into database.
SAP Provide three type of Lock objects.
- Read Lock(Shared Locked)
protects read access to an object. The read lock allows other transactions read access but not write access to
the locked area of the table
- Write Lock(exclusive lock)
protects write access to an object. The write lock allows other transactions neither read nor write access to
the locked area of the table.
- Enhanced write lock (exclusive lock without cumulating)
works like a write lock except that the enhanced write lock also protects from further accesses from the
same transaction.
You can create a lock on a object of SAP thorugh transaction SE11 and enter any meaningful name start with EZ Example EZTEST_LOCK.
Use: you can see in almost all transaction when you are open an object in Change mode SAP could not allow to any other user to open the same object in change mode.
Example: in HR when we are enter a personal number in master data maintainance screen SAP can't allow to any other user to use same personal number for changes.
Technicaly:
When you create a lock object System automatically creat two function module.
1. ENQUEUE_<Lockobject name>. to insert the object in a queue.
2. DEQUEUE_<Lockobject name>. To remove the object is being queued through above FM.
Check these links
Re: Lock Objects
http://help.sap.com/saphelp_47x200/helpdata/en/ce/931bb5c79911d5993e00508b6b8b11/frameset.htm
http://help.sap.com/saphelp_47x200/helpdata/en/e1/8e51341a06084de10000009b38f83b/frameset.htm
http://www.sapdevelopment.co.uk/dictionary/lock_enqueue.htm
http://help.sap.com/saphelp_nw04/helpdata/en/a2/3547360f2ea61fe10000009b38f839/frameset.htm
http://help.sap.com/saphelp_nw04s/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
http://www.sap-img.com/abap/type-and-uses-of-lock-objects-in-sap.htm
http://help.sap.com/saphelp_nw04s/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
Lock objects are use in SAP to avoid the inconsistancy at the time of data is being insert/change into database.
SAP Provide three type of Lock objects.
- Read Lock(Shared Locked)
protects read access to an object. The read lock allows other transactions read access but not write access to
the locked area of the table
- Write Lock(exclusive lock)
protects write access to an object. The write lock allows other transactions neither read nor write access to
the locked area of the table.
- Enhanced write lock (exclusive lock without cumulating)
works like a write lock except that the enhanced write lock also protects from further accesses from the
same transaction.
You can create a lock on a object of SAP thorugh transaction SE11 and enter any meaningful name start with EZ Example EZTEST_LOCK.
Use: you can see in almost all transaction when you are open an object in Change mode SAP could not allow to any other user to open the same object in change mode.
Example: in HR when we are enter a personal number in master data maintainance screen SAP can't allow to any other user to use same personal number for changes.
Technicaly:
When you create a lock object System automatically creat two function module.
1. ENQUEUE_<Lockobject name>. to insert the object in a queue.
2. DEQUEUE_<Lockobject name>. To remove the object is being queued through above FM.
Lock objects are use in SAP to avoid the inconsistancy at the time of data is being insert/change into database.
SAP Provide three type of Lock objects.
- Read Lock(Shared Locked)
protects read access to an object. The read lock allows other transactions read access but not write access to
the locked area of the table
- Write Lock(exclusive lock)
protects write access to an object. The write lock allows other transactions neither read nor write access to
the locked area of the table.
- Enhanced write lock (exclusive lock without cumulating)
works like a write lock except that the enhanced write lock also protects from further accesses from the
same transaction.
You can create a lock on a object of SAP thorugh transaction SE11 and enter any meaningful name start with EZ Example EZTEST_LOCK.
Use: you can see in almost all transaction when you are open an object in Change mode SAP could not allow to any other user to open the same object in change mode.
Example: in HR when we are enter a personal number in master data maintainance screen SAP can't allow to any other user to use same personal number for changes.
Technicaly:
When you create a lock object System automatically creat two function module.
1. ENQUEUE_<Lockobject name>. to insert the object in a queue.
2. DEQUEUE_<Lockobject name>. To remove the object is being queued through above FM.
http://help.sap.com/saphelp_nw04/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
GO TO SE11
Select the radio button "Lock object"..
Give the name starts with EZ or EY..
Example: EYTEST
Press Create button..
Give the short description..
Example: Lock object for table ZTABLE..
In the tables tab..Give the table name..
Example: ZTABLE
Save and generate..
Your lock object is now created..You can see the LOCK MODULES..
In the menu ..GOTO -> LOCK MODULES..There you can see the ENQUEUE and DEQUEUE function
Lock objects:
http://www.sap-img.com/abap/type-and-uses-of-lock-objects-in-sap.htm
http://help.sap.com/saphelp_nw04s/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
Match Code Objects:
http://help.sap.com/saphelp_nw2004s/helpdata/en/41/f6b237fec48c67e10000009b38f8cf/content.htm
http://searchsap.techtarget.com/tip/0,289483,sid21_gci553386,00.html
See this link:
http://www.sap-img.com/abap/type-and-uses-of-lock-objects-in-sap.htm
Lock objects are used to synchronize access to the same data by more than one program.
General information about the lock mechanism.
You can synchronize access by several programs to the same data with a logical lock mechanism. This lock mechanism fulfills two main functions:
A program can tell other programs which data records it is just reading or changing.
A program can prevent itself from reading data that is just being changed by another program.
When accessing data records, the records just being edited by other programs can be identified by the entry in the lock table. Such an entry for the lock must define a number of fully specified key fields, that is either a value is passed for the key field or this field is locked generically.
To set locks, a lock object must be defined in the ABAP Dictionary. When this lock object is activated, two function modules (see Function Modules for Lock Requests) are generated with the names ENQUEUE_<lockobjectname> and DEQUEUE_<lockobjectname>.
If data records are to be locked, you must call function module ENQUEUE_<lockobjectname>. The values of the key fields that specify the records to be locked are passed for all the tables contained in the lock object when the function module is called. There is a generic lock if a value is not passed for all the key fields. The function module writes the appropriate lock entry (see Example for Lock Objects). If another program also requests a lock, it will be accepted or rejected depending on the lock mode (see Lock Collisions). The program can then react to this situation.
Locked data records can be unlocked by calling function module DEQUEUE_<lockobjectname>. The key values and the lock mode used to set the lock must be passed to the function module.
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_<lockobjectname> and DEQUEUE_<lockobjectname> are generated from its definition to set and release locks.
Regards
Vasu -
Finding caller program in a RFC call
Hi experts,
We are having lots of CALL_FUNCTION_NOT_FOUND short dumps in one of our systems. The errors are caused because other systems call a function that does not exist, so the dumps are created.
What we would like to know is what program is doing these calls, since all we can see in the short dump is the caller system and the function it is trying to access, but not the exact program where the call is performed so we can fix the code.
Thanks in advance for your support.Sorry if this is too much of a wall of text, I can't find an "attach file" type feature.
ABAP runtime errors CALL_FUNCTION_NOT_FOUND
Occurred on 11.12.2006 at 10:04:34
Function module "Y_EF_DETERMINE_PICTURE" not found.
What happened?
The function module "Y_EF_DETERMINE_PICTURE" was called, but cannot be
found in the Function Library.
The current ABAP/4 program "SAPMSSY1 " had to be terminated because
one of the statements could not be executed.
This is probably due to an error in the ABAP/4 program.
What can you do?
Note the actions and input that caused the error.
Inform your SAP system administrator.
You can print out this message by choosing "Print". Transaction ST22
allows you to display and manage termination messages, including keeping
them beyond their normal deletion date.
Error analysis
The program "SAPMSSY1 " contains a CALL FUNCTION statement. The name
of the function module to be called is "Y_EF_DETERMINE_PICTURE".
No function module exists with the name "Y_EF_DETERMINE_PICTURE".
All function modules are stored in the Function Builder (SE37).
Possible reasons:
a) Wrong name specified. Particular attention should be paid
to upper/lower case and underscores ("_").
or
b) Transport error
c) In the case of an enqueue/dequeue module, the lock object
may not have been activated (ABAP Dictionary).
How to correct the error
Check the last transports to the R/3 System.
Is the program "SAPMSSY1 " currently being changed?
If an enqueue/dequeue module is involved, is the activation
of the lock object missing in the ABAP/4 Dictionary?
If the error occurred in a non-modified SAP program, you may be
able to find a solution in the SAP note system.
If you have access to the note system yourself, use the following
search criteria:
"CALL_FUNCTION_NOT_FOUND"
"SAPMSSY1 " or "SAPMSSY1 "
"REMOTE_FUNCTION_CALL"
Function modules with names similar to "Y_EF_DETERMINE_PICTURE":
Y_EF_USEX_DETERMINE_TAX
Y_GF1_DETERMINE_RECTYPE
Y_GK_DETERMINE_PRCTR
Y_EF_USEX_PICTURE_SUBMIT
Y_EF_USEX_SHOW_PICTURE
Y_EF_RFC_PICTURE_POST
Y_GF1_DETERMINE_SBU
Y_GF_DETERMINE_VERSION
Y_GF_DETERMINE_DATE_PREVMON
Y_GF1_DETERMINE_CURRENT_PERIOD
If you cannot solve the problem yourself, please send the
following documents to SAP:
1. A hard copy print describing the problem.
To obtain this, select the "Print" function on the current screen.
2. A suitable hardcopy prinout of the system log.
To obtain this, call the system log with Transaction SM21
and select the "Print" function to print out the relevant
part.
3. If the programs are your own programs or modified SAP programs,
supply the source code.
To do this, you can either use the "PRINT" command in the editor or
print the programs using the report RSINCL00.
4. Details regarding the conditions under which the error occurred
or which actions and input led to the error.
System environment
SAP Release.............. "46C"
Application server....... "sapgp1s"
Network address.......... "52.99.71.21"
Operating system......... "AIX"
Release.................. "5.3"
Hardware type............ "00C4449E4C00"
Database server.......... "sapgp1s"
Database type............ "DB6"
Database name............ "GP1"
Database owner........... "SAPR3"
Character set............ "en_US.ISO8859-1"
SAP kernel............... "46D"
Created on............... "Aug 26 2005 22:40:31"
Created in............... "AIX 1 5 0056AA8A4C00"
Database version......... "DB6_71 "
Patch level.............. "2113"
Patch text............... " "
Supported environment....
Database................. "DB6 06., DB6 07., DB6 08.*"
SAP database version..... "46D"
Operating system......... "AIX 1 4, AIX 2 4, AIX 3 4, AIX 1 5, AIX 2 5, AIX 3
5, , System build information:, -
, LCHN :
User, transaction...
Client.............. 000
User................ "SAPSYS"
Language............ "E"
Transaction......... " "
Program. ........... "SAPMSSY1 "
Screen. ............ "SAPMSSY1 3004"
Line of screen...... 2
Information about Remote Function Call (RFC) Caller:
System.............. "WP1 "
Database release.... "46C "
Kernel release. .... "46D "
Connection type. ... "3 " (2 = R/2, 3 = R/3, E = Extern, R = Reg.
Call type........... "S-" (S = synch., a/A = asynch., T = transactional
Client.............. 510
User................ "PC1706 "
Transaction......... "/COCKPIT/1 "
Function module..... "Y_EF_DETERMINE_PICTURE"
Call destination.... "GP1590"
Source server....... "wsdux44_WP1_10"
Source IP address... "52.99.71.124"
Additional information about RFC logon:
Trusted relationship " "
Logon return code... " "
Trusted return code. " "
Note: In Releases earlier than 4.0, some of the above information about
RFC calls may not be available.
Information on where termination occurred
The termination occurred in the ABAP/4 program "SAPMSSY1 " in
"REMOTE_FUNCTION_CALL".
The main program was "SAPMSSY1 ".
The termination occurred in line 67
of the source code of program "SAPMSSY1 " (when calling the editor 670).
Source code extract
000370 ENDMODULE.
000380
000390 MODULE %_RFCDIA_CALL OUTPUT.
000400 "Do not display screen !
000410 CALL 'DY_INVISIBLE_SCREEN'.
000420 PERFORM REMOTE_FUNCTION_DIACALL.
000430 ENDMODULE.
000440
000450 MODULE %_CPIC_START.
000460 IF SY-XPROG(4) = '%RFC'.
000470 PERFORM REMOTE_FUNCTION_CALL USING RFCTYPE_EXTERNAL_CPIC.
000480 ELSE.
000490 CALL 'APPC_HD' ID 'HEADER' FIELD HEADER ID 'CONVID' FIELD CONVID.
000500 PERFORM CPIC_CALL USING CONVID.
000510 ENDIF.
000520 ENDMODULE.
000530
000540
000550 FORM CPIC_CALL USING CONVID.
000560 COMMUNICATION SEND ID CONVID BUFFER HEADER.
000570 IF SY-SUBRC EQ 0.
000580 PERFORM (SY-XFORM) IN PROGRAM (SY-XPROG).
000590 ELSE.
000600 MESSAGE A800.
000610 ENDIF.
000620 ENDFORM.
000630
000640
000650 FORM REMOTE_FUNCTION_CALL USING VALUE(TYPE).
000660 DO.
CALL 'RfcImport' ID 'Type' FIELD TYPE.
000680 PERFORM (SY-XFORM) IN PROGRAM (SY-XPROG).
000690 RSYN >SCONT SYSC 00011111 0.
000700 ENDDO.
000710 ENDFORM.
000720
000730 FORM REMOTE_FUNCTION_DIASTART.
000740 DO.
000750 CALL 'RfcImport' ID 'Type' FIELD RFCTYPE_RFCDIA.
000760 PERFORM (SY-XFORM) IN PROGRAM (SY-XPROG).
000770 "Parking position for next request
000780 RSYN >SCONT SYSC 00011111 10.
000790 "ALternativ : Free mode
000800 "COMMIT WORK.
000810 "SYSTEM-CALL FREE MODE 0.
000820 ENDDO.
000830 ENDFORM.
000840
000850 FORM REMOTE_FUNCTION_DIACALL.
000860 SY-XCODE = '%_@no@'.
Contents of system fields
SY field contents..................... SY field contents.....................
SY-SUBRC 0 SY-INDEX 1
SY-TABIX 0 SY-DBCNT 0
SY-FDPOS 0 SY-LSIND 0
SY-PAGNO 0 SY-LINNO 1
SY-COLNO 1
Chosen variables
Name.......................... Contents.1........2........3....+....4
SY-XPROG
2222222222222222222222222222222222222222
0000000000000000000000000000000000000000
SY-XFORM Y_EF_DETERMINE_PICTURE
554454454544445544555422222222
9F56F45452D9E5F093452500000000
%_SPACE
0
0
SY-MSGID
22222222222222222222
00000000000000000000
EBC_TO_ASC-X05 P&QéRêSëTèUíVîWïXìY~ZÜ[$*])^;_^
525E5E5E5E5E5E5E5E575D5252525355
06192A3B485D6E7F8C9EACB4CAD9EBFE
RFCTYPE_QUEUE 6
0000
0006
%_PRINT 000
2222333222222222222222222222222222222222
0000000000000000000000000000000000000000
... + 40
2222222222222222222222222222222222222222
0000000000000000000000000000000000000000
... + 80 0 ########
2222222222320000000022222222222222222222
0000000000000000000000000000000000000000
... + 120
22222222
0000000
SY-MSGNO 000
333
000
EBC_TO_ASC-X04 @ A BâC{DàEáFãGåHçIñJÄK.L<M(N+O!
424A4E474E4E4E4E4E4F4C4243424242
0010223B405163758791A4BECCD8EBF1
SY-MSGV1
2222222222222222222222222222222222222222
0000000000000000000000000000000000000000
... + 40
2222222222
0000000000
SY-MSGV2
2222222222222222222222222222222222222222
0000000000000000000000000000000000000000
... + 40
2222222222
0000000000
SY-MSGV3
2222222222222222222222222222222222222222
0000000000000000000000000000000000000000
... + 40
2222222222
0000000000
SY-MSGV4
2222222222222222222222222222222222222222
0000000000000000000000000000000000000000
... + 40
2222222222
0000000000
%_?NOT_ASSIGNED?
2222
0000
SPACE
2
0
SY-REPID SAPMSSY1
5454555322222222222222222222222222222222
310D339100000000000000000000000000000000
TYPE 3
0000
0003
SYST ########################################
0000000000000000000000000000000000000000
0001000000000000000000000000000000000000
... + 40 ########################################
0000000000000000000000000000000000000000
0000000000010000000100000000000000000000
... + 80 ########################################
0000000000000000000000000000000000000000
0000000000000000000000000000000000000000
... + 120 #######################################T
00000000
0000000
Active calls / events
No.... Type........ Name..........................
Programm
Include Line
1 FORM REMOTE_FUNCTION_CALL
SAPMSSY1
SAPMSSY1 67
2 MODULE (PBO) %_RFC_START
SAPMSSY1
SAPMSSY1 31
Internal notes
The termination occurred in the function "link_rfdir" of the SAP
Basis System, specifically in line 165 of the module
"//bas/46D/src/krn/runt/ablink.c#3".
The internal operation just processed is "CALY".
The internal session was started at 20061211100434.
Active calls in SAP kernel
=> 64 bit R/3 Kernel
=> 64 bit AIX Kernel
=> Heap limit = unlimited
=> Stack limit = unlimited
=> Core limit = 51200000
=> File size limit = unlimited
=> Heap address = 0x118dba360
=> Stack address = 0xfffffffffff5d50
=> Stack low = 0xfffffffffff5d50
=> Stack high = 0xffffffffffff600
=> Stack Trace:
AixStack() at 0x100059364
CTrcStack2() at 0x10005945c
rabax_CStackSave() at 0x10003959c
ab_rabax() at 0x1000425b4
link_rfdir() at 0x100540418
ab_link() at 0x100540a18
ab_rfcimport() at 0x1005f49f0
ab_jcaly() at 0x100024560
ab_extri() at 0x100487474
ab_xevent() at 0x10059c804
ab_dstep() at 0x10043bd98
dynpmcal() at 0x100942f94
dynppbo0() at 0x100941320
dynprctl() at 0x100948f40
dynpen00() at 0x1008f7818
Thdynpen00() at 0x1001429f4
TskhLoop() at 0x100146368
tskhstart() at 0x1001576ac
DpMain() at 0x100e06e38
main() at 0x100de72f4
List of ABAP programs affected
Type
Program
Gen. date time
LoadSize
Prg
SAPMSSY1
04.01.2000 19:06:59
20480
List of internal tables
No dump information available
Directory of application tables (contents)
Program
Name.......... Contents.1........2........3....+....
Directory of data areas (administration information)
Program
No.. Name.......... Lgth Ofsg Type Next Gen date Gen time
SYST
L not assigned -15 0 IN
M /%_LISTTABLE -14 1 CO 0
T global stack -13 1 2 GL 0
SAPMSSY1
A global data 0 3 DA
L constant dat 1 4 LI .0 .0216
L constant dat 2 5 LI SSY .0 .018B
L not assigned 3 6 IN
L SYST 4 7 TA 0
L SY 5 8 TA
L RSJOBINFO 6 9 TA
M /%_SYS%% 7 0 CO
M field symbol 8 1 FS
L TCPIC 9 2 TA
M field symbol 10 3 FS
L text pool 11 4 TP
Directory of data areas (contents)
Program
No.. Name.......... Contents..1........2........3....+....
SYST
L not assigned 0
L text pool 102 |SAPMSSY1
ABAP control blocks CONT
Include Line source code
Index Name F1 Co Par01 Par2. Par3. Par4. Tabl
SAPMSSY1 60 MESSAGE A800.
215 CLEA 00 84
216 CLEA 00 85
217 MESS 00 27
SAPMSSY1 62 ENDFORM.
218 ENDF 00
219 -
223 -
SAPMSSY1 65 FORM REMOTE_FUNCTION_CALL USIN
227 PERP 00 1
228 PERP 02
SAPMSSY1 66 DO.
229 WHIL 00 2
233 WHIL 00 3
237 BRAN 05 Branch to 251
SAPMSSY1 67 CALL 'RfcImport' ID 'Type' FIE
238 CALY 00 3 86 70 71 71
>>>>> CALY 02 87 P0
SAPMSSY1 68 PERFORM (SY-XFORM) IN PROGRAM
246 xper 02 12 13
248 PERP 80
SAPMSSY1 69 RSYN >SCONT SYSC 00011111 0.
249 SYSC 1F
SAPMSSY1 70 ENDDO.
250 BRAX 00 Branch to 233
251 WHIL 00 4
SAPMSSY1 71 ENDFORM.
255 ENDF 00
256 -
End of runtime analysis -
RFC calls are taking too many work process -- system knock out
Hi,
I have an interface remote function, which is going to be called by a java program.
Data is going to be sent to the system, processed and sent back syncronous to the caller.
The calls are working on SAP tables, so I needed to lock and unlock the tables. The java program
is opening many parallell threads and starts them the same time.
That means, that the sap system is getting attacked by many rfc calls on the same function, with the
same user at the same time.
The system has in development 15 dialog work processes set up. If I run that with up to 15 parallell rfc calls, all is working ok!
Let me now explain the problem:
I have programmed the table lock, that it´s trying to lock the table at the beginning of the function.
If it´s not possible it tries it again. At first I have just inserted a one second wait and let that run maximum 3 times. If the table is still locked, it breaks down with an error.
But because the calls come nearly to exactly the same time to the system, the first call locks all others out, and the rest ran out of the 3 seconds and ended up with an error.
So I tried to build an endless loop, which is just ending, when the table could be locked again, or when the runtime of 5 seconds has reached. That means, it´s not waiting for a second, if the table is locked, but it´s trying again and again up to 5 seconds.
That is all ok, because sometime the table is free again and all calls are then processed alright.
BUT if I now run that with MORE than 15 rfc calls from the java program (15 dialog processes are set up), the system got knocked out! It is using all free work processes for the RFC calls and get stucked. I think, the first call is locking the table, and the got stopped by the system. And then all the others are running in the endless loop....
So, shouldn´t be there a limit for dialog processes taken by RFC calls? For example here for this user? In this case it should f.e. be set to 10 free processes with 5, which are reserved for other users...
Any advices?
The second is, how can I change the lock mechanism, that I don´t use an endless loop? Waiting for one second and doing that 3 times, is not good enough... Because all the rfc calls wait then for one second, up to 3 times, and end with an error....
Is it possible to wait for half seconds, or defined milli seconds?
Thank you for all advices!Hi,
What I have understood is you are trying to lock the table in a loop and just checking the duration by explicitly putting wait statement.
Hope you are NOT locking the entire table rather a particular record in each lock.
No need to use explicit wait statement rather its better to let SAP thinks when to lock the table T1 when its already locked by another work process. So just set the wait parameter for the Enqueue function module as 'X' and check how it behaves. Until the table is not unlocked the process will wait.
If you see the wait parameter for the Enqueue function module is not available then create your own lock object for the table and use that. Make sure its getting dequeued else you can understand better
Cheers
Somnath -
Let me know creation of lock object
let me know creation of lock object
Hi
<b>Lock Objects</b>
Lock object concept
Lock modes
Creating a lock object (example)
Lock object sample code
SAP data dictionary provides you with a locking mechanism to synchronize simultaneous data access by different users.
Lock objects are created in SE11.
Customer lock objects must begin with EY or EZ .
Three possible lock modes exist for lock objects.
<b>Lock Mode</b>
Lock mode E: This sets a lock for changing data for single user. This lock can be accumulated.
Lock mode X: This mode is used like mode E for changing data. The only technical difference from mode E is that the respective lock does not allow accumulation.
Lock mode S: This mode ensures that data displayed in your program cannot be changed by other users during the entire display time. Here you do not want to change the data yourself (allows read only access for data).
<b>Creating Lock object</b>
SE11
1)Enter lock object name beginning with EY or EZ
and hit create.
2)Enter table names containing data records that should be locked and the lock mode.
Enter short text /tbale/lockmode.
3) The primary keys of the specified tables are automatically selected as lock parameters.
It automatically selects the primary key for the selected table.
To set a lock in the application program
call a function module ENQUEUE_<LOCK_OBJECT>.
For our example, it would be ENQUEUE_EZMARA.
To release the lock in the application program
call a function module DEQUEUE_<LOCK_OBJECT>.
For our example, it would be DEQUEUE_EZMARA.
Refer the code executed by user (say abap1) for
matnr = 000000000000000012.
Lock Objects are used to synchronize access to the same data by more than one user. Function modules that can be used in application programs are generated from the definition of a lock object in the ABAP Dictionary.
The R/3 System synchronizes simultaneous access of several users to the same data records with a lock mechanism. When interactive transactions are programmed, locks are set and released by calling function modules .These function modules are automatically generated from the definition of lock objects in the ABAP Dictionary.
Structure of a Lock Object
The tables in which data records should be locked with a lock request are defined in a lock object together with their key fields.
When tables are selected, one table (the primary table) is first selected. Further tables (secondary tables) can also be added using foreign key relationships.
Lock Arguments
The lock argument of a table in the lock object consists of the key fields of the table.
The lock argument fields of a lock object are used as input parameters in the function modules for setting and removing locks generated from the lock object definition. When these function modules are called, the table rows to be locked or
unlocked are specified by defining certain values in these fields.These values can also be generic. The lock argument fields therefore define which subset of the table rows should be locked
Data Dictionary/ Lock Objects
The simplest case of a lock object consists of exactly one table and the lock argument of the table is the primary key of this table. Several tables can also be included in a lock object. A lock request therefore can lock an entire logical
object, and not only a record of a table. Such a logical object can be for example a document comprising an entry in a header table and N entries in a positiontable.
Lock Mode
The lock mode controls whether several users can access data records at the same time. The lock mode can be assigned separately for each table in the lock object. When the lock is set, the corresponding lock entry is stored in the
lock table of the system for each table. Access by more than one user can be synchronized in the
following ways:
Exclusive lock: The locked data can only be displayed or
edited by a single user. A request for another exclusive lock
or for a
shared lock is rejected.
Shared lock: More than one user can access the locked data
at the same time in display mode. A request for another
shared lock is accepted, even if it comes from another user. An exclusive lock
is rejected. Exclusive but not cumulative: Exclusive locks can be requested
several times from the same transaction and are processed
successively. In contrast, exclusive but not cumulative locks
can be called only once from the same transaction. All other
lock requests are rejected.
1) 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.
2) 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.
3) 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.
4) 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.
5) 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.
6) Save your entries.
A dialog box appears in which you have to assign the lock
object a development class.
7) 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.
8) Choose Activate
<b>Reward if u sefull</b> -
I've a TCode to modify a report. That TCode picks a doc no. from a table & opens up an editable ALV based on that doc. no .That doc. no. is the only primary key.
I want that if someone is already opened that report, & if someoen else is trying to open that report, it shouldn't open & should show that -"its locked by User XXX". I've made a lock object for that table. Please advise what to do next. How to populate the User name who has locked the report.used ENQUEUE function and DEQUEUE function
Function Modules for Lock Requests
Activating a lock object in the ABAP Dictionary automatically creates function modules for setting (ENQUEUE_<lock object name>) and releasing (DEQUEUE_<lock object name>) locks.
The generated function modules are automatically assigned to function groups. You should not change these function modules and their assignment to function groups since the function modules are generated again each time the lock object is activated.
Never transport the function groups, which contain the automatically generated function modules. The generated function modules of a lock object could reside in a different function group in the target system. Always transport the lock objects. When a lock object is activated in the target system, the function modules are generated again and correctly assigned to function groups.
Parameters of the Function Modules
Field Names of the Lock Object
The keys to be locked must be passed here.
A further parameter X_<field> that defines the lock behavior when the initial value is passed exists for every lock field <field>. If the initial value is assigned to <field> and X_<field>, then a generic lock is initialized with respect to <field>. If <field> is assigned the initial value and X_<field> is defined as X, the lock is set with exactly the initial value of <field>.
Parameters for Passing Locks to the Update Program
A lock is generally removed at the end of the transaction or when the corresponding DEQUEUE function module is called. However, this is not the case if the transaction has called update routines. In this case, a parameter must check that the lock has been removed.
Parameter _SCOPE controls how the lock or lock release is passed to the update program (see The Owner Concept for Locks). You have the following options:
キ _SCOPE = 1: Locks or lock releases are not passed to the update program. The lock is removed when the transaction is ended.
キ _SCOPE = 2: The lock or lock release is passed to the update program. The update program is responsible for removing the lock. The interactive program with which the lock was requested no longer has an influence on the lock behavior. This is the standard setting for the ENQUEUE function module.
キ _SCOPE = 3: The lock or lock release is also passed to the update program. The lock must be removed in both the interactive program and in the update program. This is the standard setting for the DEQUEUE function module.
Parameters for Lock Mode
A parameter MODE_<TAB> exists for each base table TAB of the lock object. The lock mode for this base table can be set dynamically with this parameter. The values allowed for this parameter are S (read lock), E (write lock), X (extended write lock), and O (optimistic lock).
The lock mode specified when the lock object for the table is created is the default value for this parameter. This default value can, however, be overridden as required when the function module is called.
If a lock set with a lock mode is to be removed by calling the DEQUEUE function module, this call must have the same value for the parameter MODE_<TAB>.
Controlling Lock Transmission
Parameter _COLLECT controls whether the lock request or lock release should be performed directly or whether it should first be written to the local lock container. This parameter can have the following values:
キ Initial Value: The lock request or lock release is sent directly to the lock server.
キ X: The lock request or lock release is placed in the local lock container. The lock requests and lock releases collected in this lock container can then be sent to the lock server at a later time as a group by calling the function module FLUSH_ENQUEUE.
Whenever you have lock mode X (extended write lock), locks should not be written to the local lock container if very many locks refer to the same lock table. In this case, there will be a considerable loss in performance in comparison with direct transmission of locks.
Behavior for Lock Conflicts (ENQUEUE only)
The ENQUEUE function module also has the parameter _WAIT. This parameter determines the lock behavior when there is a lock conflict.
You have the following options:
キ Initial Value: If a lock attempt fails because there is a competing lock, the exception FOREIGN_LOCK is triggered.
キ X: If a lock attempt fails because there is a competing lock, the lock attempt is repeated after waiting for a certain time. The exception FOREIGN_LOCK is triggered only if a certain time limit has elapsed since the first lock attempt. The waiting time and the time limit are defined by profile parameters.
Controlling Deletion of the Lock Entry (DEQUEUE only)
The DEQUEUE function module also has the parameter _SYNCHRON.
If X is passed, the DEQUEUE function waits until the entry has been removed from the lock table. Otherwise it is deleted asynchronously, that is, if the lock table of the system is read directly after the lock is removed, the entry in the lock table may still exist.
Exceptions of the ENQUEUE Function Module
キ FOREIGN_LOCK: A competing lock already exists. You can find out the name of the user holding the lock by looking at system variable SY-MSGV1.
キ SYSTEM_FAILURE: This exception is triggered when the lock server reports that a problem occurred while setting the lock. In this case, the lock could not be set.
If the exceptions are not processed by the calling program itself, appropriate messages are issued for all exceptions.
Reference Fields for RFC-Enabled Lock Objects
The type of an RFC-enabled function module must be completely defined. The parameters of the generated function module therefore have the following reference fields for RFC-enabled lock objects:
Parameters
Reference fields
X_<field name>
DDENQ_LIKE-XPARFLAG
_WAIT
DDENQ_LIKE-WAITFLAG
_SCOPE
DDENQ_LIKE-SCOPE
_SYNCHRON
DDENQ_LIKE-SYNCHRON
See also:
Example for Lock Objects
http://help.sap.com/saphelp_nw04/helpdata/en/cf/21eebf446011d189700000e8322d00/content.htm
Maybe you are looking for
-
Is this a problem? Or is it normal?
Just a quick question, does your iPhone 4/4S make a rattling sound near the camera? and if you tap it near the bottom right hand corner (see picture) does it make a faint humming sound (much like the vibrating sound).
-
Black and white with a touch of colour
Hey Folks, I need your help again please. I need to amend a shot in my film so that most of it is in black and white and only a part of it is in colour. This is the shot: Five guys walk into a room. The shot so far is in full colour. What I need to d
-
I have successfully created a combo box, however, none of the tutorials I have found discuss the inclusion of a scroll bar within a combo box. I want the data list to revert back to the original start state when the user clicks on an item in the lis
-
Importing RAW images from Canon 450D SLR
I run iPhoto 6 and I have recently updated my digital SLR from a Canon 300D to a 450D. I was able to import CRW Raw files from the 300D but iPhoto will not import Raw images from the 450D (jpegs are ok), which are now coded CR2 instead of CRW. I note
-
Where can I find the app iCal ?