SE11锁对象是什么以及如何使用它?

问题描述 投票:0回答:2

一旦我们从

SE11
为 SAP ABAP 中的特定表创建了锁定对象,是否可以在表中创建条目?如果是,那么锁对象有什么特别之处?

我尝试在

SE11
中创建一个锁定对象,然后在
SE37
中我执行了一个锁定对象。我的问题是,一旦创建了锁定对象,我们就不应该能够添加条目,但在这里我可以在表中添加条目。锁对象有什么特别之处?

object locking abap sap-data-dictionary
2个回答
2
投票

锁定对象用于在程序中提供逻辑锁定功能。比如说,如果两个用户不应同时编辑同一个文档,那么我们可以实现锁定对象来限制一个用户打开该文档,以防另一用户已打开该文档进行编辑。

在ABAP字典中定义锁对象时,会创建两个功能模块

ENQUEUE_obj_name
DEQUEUE_obj_name
。之后可以在ABAP程序中调用它们来分别锁定和解锁对象。

Tables
选项卡中的锁定对象本身中,我们定义要锁定的主表。在
Lock parameters
选项卡中,我们定义在请求设置或释放锁定期间传递给功能模块的参数,这些参数对应于充当锁定标准条件的表字段。

假设我们为计费文档头表 VBRK 创建一个锁 EZDOC_BILLING。默认情况下,作为锁定参数,表 MANDT 和 VBELN 的关键字段会自动填充。

锁定对象激活后,生成功能模块

ENQUEUE_EZDOC_BILLING
DEQUEUE_EZDOC_BILLING

为了在代码中实现它,我们使用应设置锁定的文档编号来调用排队 FM。一旦成功完成,我们就可以继续进行更改文档等操作,并且锁定可确保此时没有其他用户可以编辑同一文档。完成后,我们应该通过调用出队 FM 来释放锁。 一般来说,它在编码中看起来像这样:

...
PERFORM set_lock USING l_vbeln CHANGING l_retcode.

IF l_retcode = 0.
  PERFORM change_doc_billing ...
ENDIF.

PERFORM release_lock USING l_vbeln.
...

FORM set_lock USING i_vbeln CHANGING c_retcode.
  CALL FUNCTION 'ENQUEUE_EZDOC_BILLING'
    EXPORTING
      mode_vbrk = 'E'
      mandt     = sy-mandt
      vbeln     = i_vbeln
      _scope    = '2'
      _wait     = ' '
      _collect  = ' '
    EXCEPTIONS
      foreign_lock    = 1
      system_failure  = 2
      OTHERS          = 3.

  c_retcode = sy-subrc.
ENDFORM.


FORM release_lock USING i_vbeln.
  CALL FUNCTION 'DEQUEUE_EZDOC_BILLING'
    EXPORTING
      mode_vbrk = 'E'
      mandt     = sy-mandt
      vbeln     = i_vbeln
      x_vbeln   = ' '
      _scope    = '3'
      _synchron = ' '
      _collect  = ' '.
ENDFORM.

0
投票

锁机制在数据库/内核级别不起作用。因此,您需要手动检查报告/函数/类中的锁定状态。 SE16/SE16N 不检查锁定状态。您还可以创建报告来修改表而无需进行锁定检查。

© www.soinside.com 2019 - 2024. All rights reserved.