SAP ABAP 实现数据库表行项目和程序加解锁功能

1.SAP ABAP 实现数据库表行项目加解锁功能

实现效果:
当一个数据库表以某字段为关键字段的数据被锁定时,同一时间其他程序无法修改改表内被锁定的数据,除非被解锁或退出程序。
SAP ABAP 实现数据库表行项目和程序加解锁功能_第1张图片

1.事务代码:SE11 创建锁对象。PS:命名要以 “EZ” 开头。
SAP ABAP 实现数据库表行项目和程序加解锁功能_第2张图片
2.添加描述,属性选择允许RFC。
SAP ABAP 实现数据库表行项目和程序加解锁功能_第3张图片
3.添加需要加锁的表名
锁模式选择 E写入锁 模式

模式有三种具体属性如下:
● E:专用、积累,被锁定的数据只能被一个用户来读取,不允许其他用户进行锁操作。一般主数据的锁定都会使用该类型。
● S:共享。本身不需要修改,但是在读取数据时不允许该数据被其他用户以E或者X的模式来进行修改,允许被锁定数据被多个用户以S模式来读取。
● X:专用,不累计。与E模式类似,在某用户对该数据加入了X类型的锁定后,本用户可以继续为该数据添加E或者S模式的锁。

SAP ABAP 实现数据库表行项目和程序加解锁功能_第4张图片
4.选择表的关键字段作为锁定参数。
SAP ABAP 实现数据库表行项目和程序加解锁功能_第5张图片
5.SE37 通过锁对象名字前后加 * 搜索方法名:EZLOCK_TEST
会出现加锁和解锁两个函数方法
SAP ABAP 实现数据库表行项目和程序加解锁功能_第6张图片
SAP ABAP 实现数据库表行项目和程序加解锁功能_第7张图片
加锁代码:

   "加锁
        CALL FUNCTION 'ENQUEUE_EZLOCK_TEST'
          EXPORTING
            mode_vbak      = 'E'
            mandt          = sy-mandt                                                                                                                                                                                             
            id          = it_main-id
            name		= it_main-name
          EXCEPTIONS
            foreign_lock   = 1
            system_failure = 2
            OTHERS         = 3.
        IF sy-subrc <> 0.
              CONCATENATE '订单锁定失败!用户' sy-msgv1 '正在编辑!' INTO
              it_main-message.
        ELSE.

        ENDIF.

解锁有两种方式:1.退出程序时系统会自动解除锁定状态。2.调用解锁方法

解锁
 CALL FUNCTION 'DEQUEUE_EZLOCK_TEST'
      EXPORTING
        mode_zdbgz = 'E'
        id          = it_main-id
        name		= it_main-name
        _scope     = '3'
        _synchron  = ' '
        _collect   = ' '.
    COMMIT WORK.

2.通用表加解锁

锁定整个表数据

CALL FUNCTION 'ENQUEUE_E_TABLE'
  EXPORTING
*   MODE_RSTABLE         = 'E'
    tabname              = 'ZMMTEST'
*   VARKEY               =
*   X_TABNAME            = ' '"标示参数tabname是否是十六进制的
*   X_VARKEY             = ' '"标示参数VARKEy是否是十六进制的
*   _SCOPE               = '2'
*   _WAIT                = ' '
*   _COLLECT             = ' '
  EXCEPTIONS
    foreign_lock         = 1
    system_failure       = 2
    OTHERS               = 3.

CALL FUNCTION 'DEQUEUE_E_TABLE'
  EXPORTING
*   MODE_RSTABLE       = 'E'
    tabname            = 'ZMMTEST'
*   VARKEY             =
*   X_TABNAME          = ' '
*   X_VARKEY           = ' '
*   _SCOPE             = '3'
*   _SYNCHRON          = ' '
*   _COLLECT           = ' '.

3.程序锁

对于一些重要的程序,可能会要求处理并发的情况,在有用户操作的情况下不允许其他用户进行操作,以此来保证数据及程序的安全。

CALL FUNCTION 'ENQUEUE_ES_PROG'
      EXPORTING
        MODE_TRDIR     = 'E'  "锁条目模式:默认是E锁又叫独占锁,可选‘S’锁又叫共享锁,‘X’锁又叫专用锁
        NAME           = 'Z_PROGLOCK'    "需要锁定的程序名
        X_NAME         = ' '  "默认为空,可选
        _SCOPE         = '2'  "表示锁定范围值,默认为‘2’,表示在update module内有效;其它参数有‘1’,表示程序内有效;‘3’表示全部
        _WAIT          = ' '  "表示如果对象已经被锁定,是否等待后再尝试加锁,最大的等待时间有系统参                                                                                       数 ENQUE/DELAY_MAX控制
        _COLLECT       = ' '    

你可能感兴趣的:(ABAP,数据库,SAP,ABAP)