SAP锁对象(lock object)

ABAP里为了控制并发,保持数据一致性,用了锁对象(lock object)对于abaper来说使用起来非常方便,没有什么难度,很好的处理了并发的状况。下面先介绍如何使用.这里的锁对象是逻辑意义上的锁,可能你锁定的条目在表里根本不存在。

1.如何创建锁对象

创建锁对象很容易,TCODE:se11.选择最下面的lock object。如图:

[img]http://dl.iteye.com/upload/attachment/452086/30054dfe-471d-3ea6-ad17-6bd23bfe0862.png[/img]
自建的锁对象以EZ或者EY开头,新建完之后可以看到三个标签页。Attributes,Tables,Lock Parameter.

如果是接口对表进行操作,注意需要选上allow RFC.如图:

[img]http://dl.iteye.com/upload/attachment/452088/78b12347-bd85-349b-b56f-f5abbedebd07.png[/img]
Tables标签下Primary Tables下两个输入项,name是表的名字,lock mode有三种模式,分别是S,E,X.含义如下:

S (Shared lock, read lock)
E (Exclusive lock, write lock)
X (eXclusive lock, extended write lock, cannot be cumulated)
模式E:当更改数据的时候设置为此模式。
模式S:本身不需要更改数据,但是希望显示的数据不被别人更改。
模式X:和E类似,但是不允许累加,完全独占。


如果我们使用一般情况下,E就可以了。


如果你在一个程序里成功对一个锁对象加锁之后,如果模式为E,其他用户不能再对这个锁对象加E、X、S模式的任意一种锁;
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为X,其他用户不能再对这个锁对象加E、X、S模式的任意一种锁;
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,其他用户不能再对这个锁对象加E、X模式的锁,但是可以加S模式的锁;
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为E,在这个程序,你还可以再对这个锁对象加E、S模式的锁,X模式的不可以。
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为X,在这个程序,你不可以再对这个锁对象加E、X、S模式的锁。
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,在这个程序,你还可以再对这个锁对象加S模式的锁,如果没有别的用户对其加S模式的锁,那么你还可以对其加E模式的锁。X模式的不可以。

[img]http://dl.iteye.com/upload/attachment/452090/4bb90bb4-686c-34c6-9340-8305aca21531.png[/img]
LOCK parameters里面默认的参数时表的主键,这样因为可以唯一的确定表的一行,通常情况下不用修改。

在激活之后,会产生两个function module,一个用来对对象进行锁定,另一个是释放对象。二者的名字都很有规律。

DEQUEUE_<lock object的名字> 释放对象 EZ9MISTP 的锁定
ENQUEUE_<lock object的名字> 对象 EZ9MISTP 要求的锁定

到时要使用的时候直接call function module即可。

上文地址:http://blog.csdn.net/donkey2004112103/archive/2009/04/28/4131496.aspx


另外附上两个对表Lock的FM:
* testing the locking of tables...
data:
varkey like rstable-varkey.

varkey = sy-mandt.

* locking the tables............................
call function 'ENQUEUE_E_TABLE'
exporting
* MODE_RSTABLE = 'E'
tabname = 'MARA'
varkey = varkey
* X_TABNAME = ' '
* X_VARKEY = ' '
* _SCOPE = '2'
* _WAIT = ' '
* _COLLECT = 'X'
exceptions
foreign_lock = 1
system_failure = 2
others = 3
.
case sy-subrc.
when 1.
message i184(bctrain) with 'Foreignlock'.
when 2.
message i184(bctrain) with 'system failure'.
when 0.
message i184(bctrain) with 'success'.
when others.
message i184(bctrain) with 'others'.
endcase.


* unlocking the table...............

call function 'DEQUEUE_E_TABLE'
exporting
* MODE_RSTABLE = 'E'
tabname = 'MARA'
varkey = varkey
* X_TABNAME = ' '
* X_VARKEY = ' '
* _SCOPE = '3'
* _SYNCHRON = ' '
* _COLLECT = ' '
.

锁定和解锁
当用逻辑锁来锁定表条目的时候,系统会自动向LOCK TABLE中写入记录。
当调用设置锁的FM时,LOCK PARAMETERS如果没有指明,系统会锁定整个表。当然,LOCK PARAMETER:CLIENT有点特殊,如果不指定,默认是SY-MANDT;如果指定相应的CLIENT,会锁定对应CLIENT上的相应的表记录;如果设置为SPACE,则锁定涉及所有的CLIENT。
当逻辑锁设置失败后,一般会有两种例外。一个是EXCEPTION:FOREIGN_LOCK,意思是已经被锁定了;另一个是EXCEPTION:SYSTEM_FAILURE。
有些情况下,程序中设置成功的逻辑锁会隐式的自己解锁。比如说程序结束发生的时候(MESSAGE TYPE为A或者X的时候),使用语句LEAVE PROGRAM,LEAVE TO TRANSACTION,或者在命令行输入/n回车以后。
在程序的结束可以用DEQUEUE FUNCTION MODULE来解锁(当然如果你不写这个,程序结束的时候也会自动的解锁),这个时候,系统会自动从LOCK TABLE把相应的记录删除。使用DEQUEUE FUNCTION MODULE来解锁的时候,不会产生EXCEPTION。要解开你在程序中创建的所有的逻辑锁,可以用FM:DEQUEUE_ALL.

上锁的一般步骤
先上锁,上锁成功之后,从数据库取数据,然后更改数据,接着更新到数据库,最后解锁。按照这个步骤,才能保证更改完全运行在锁的保护机制下。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SAP ABAP Object是一种面向对象的开发方式,用于开发和扩展SAP系统中的应用程序。它基于SAP的ABAP语言,并使用面向对象的概念和原则来实现应用程序的开发。 ABAP是一种专门用于开发SAP系统的编程语言,它支持面向对象的开发风格。使用ABAP Object,开发人员可以创建可重用的对象,这些对象可以封装数据和行为,提供更好的模块化和可维护性。 在SAP ABAP Object中,开发人员可以定义类和对象,类是一个模板,用于创建对象对象是类的实例,它包含了类定义的属性和方法。开发人员可以通过继承和多态性来重用代码,提高开发效率。 ABAP Object还提供了封装、继承和多态性等面向对象的特性。封装可以隐藏内部实现细节,使代码更加模块化和可维护。继承允许创建新类,通过继承基类的属性和方法来扩展功能。多态性允许使用一个基类引用来访问派生类的对象,提供更大的灵活性。 通过使用SAP ABAP Object,开发人员可以更容易地创建和维护高质量的应用程序。它提供了更强大的模块化和复用性,使开发人员能够更好地组织和管理代码。此外,ABAP Object还提供了更好的性能和可靠性,能够满足SAP系统的高要求和复杂性。 总之,SAP ABAP Object是一种面向对象的开发方式,用于开发和扩展SAP系统中的应用程序。它提供了强大的功能和特性,能够帮助开发人员更好地组织和管理代码,同时提高开发效率和应用程序的质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值