SAP ABAP 加锁和解锁实例

转载自:http://blog.csdn.net/heng0757/article/details/8028868

 

具体操作步骤:


1. 使用TCODE:SE11,选择最后一项[加锁对象],输入对象名称(注意一定要以字母‘E’开头,这是SAP内部规定的,如EZ_FI_CSTM_001)


2. 输入名称后,按新增,进入界面后输入要加锁的Table名,及加锁类型(E:专用,累计;S:共享;X:专用,不累计)。


保存后,系统会自动产生两个函数: ENQUEUE_EZ_FI_CSTM_001(加锁)和 DEQUEUE_EZ_FI_CSTM_001(解锁)。


3.然后在更改记录前调用加锁函数对记录进行锁定,在修改完成或退出修改后一定要对记录进行解锁。


输入锁定表:


输入锁定表的字段:




然后在程序里调用:


PERFORM frm_unlock_0100 USING p_inv p_cntr p_doc_ty.

*&---------------------------------------------------------------------*
*&      Form  FRM_UNLOCK_0100
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_INV  text
*      -->P_P_CNTR  text
*      -->P_P_DOC_TY  text
*----------------------------------------------------------------------*
FORM frm_unlock_0100  USING    p_inv
                               p_cntr
                               p_doc_ty.
  CALL FUNCTION 'DEQUEUE_EZ_FI_CSTM_001'
    EXPORTING
*     MODE_ZTBL_FI_CSTM_001 = 'E'
*     MANDT                 = SY-MANDT
      invoice               = p_inv
      contract              = p_cntr
      doc_type              = p_doc_ty
*     X_INVOICE             = ' '
*     X_CONTRACT            = ' '
*     X_DOC_TYPE            = ' '
*     _SCOPE                = '3'
*     _SYNCHRON             = ' '
*     _COLLECT              = ' '
    .
ENDFORM.                    " FRM_UNLOCK_0100


参考自动生成的函数:

FUNCTION DEQUEUE_EZ_FI_CSTM_001.
*"--------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(MODE_ZTBL_FI_CSTM_001) TYPE  ENQMODE DEFAULT 'E'
*"     VALUE(MANDT) TYPE  ZTBL_FI_CSTM_001-MANDT DEFAULT SY-MANDT
*"     VALUE(INVOICE) TYPE  ZTBL_FI_CSTM_001-INVOICE OPTIONAL
*"     VALUE(CONTRACT) TYPE  ZTBL_FI_CSTM_001-CONTRACT OPTIONAL
*"     VALUE(DOC_TYPE) TYPE  ZTBL_FI_CSTM_001-DOC_TYPE OPTIONAL
*"     VALUE(X_INVOICE) DEFAULT SPACE
*"     VALUE(X_CONTRACT) DEFAULT SPACE
*"     VALUE(X_DOC_TYPE) DEFAULT SPACE
*"     VALUE(_SCOPE) DEFAULT '3'
*"     VALUE(_SYNCHRON) DEFAULT SPACE
*"     VALUE(_COLLECT) TYPE  DDENQCOLL DEFAULT ' '
*"--------------------------------------------------------------------
* 为锁定对象 EZ_FI_CSTM_001 生成功能模块
* 请不要修改或复制该功能模块
* 参阅 ABAP 帮助中有关 SAP 锁定的内容
* 对关键字“ENQUEUE”


DATA: __seqta_tab TYPE SEQTA OCCURS 01 WITH HEADER LINE,
      __scope TYPE DDENQSCOPE,
      __synchron TYPE DDENQSYNC.
__synchron = _synchron.
__scope = _scope.


DATA: BEGIN OF %a_ZTBL_FI_CSTM_001,
*       锁定表格 ZTBL_FI_CSTM_001 的函数
            MANDT TYPE ZTBL_FI_CSTM_001-MANDT,
            INVOICE TYPE ZTBL_FI_CSTM_001-INVOICE,
            CONTRACT TYPE ZTBL_FI_CSTM_001-CONTRACT,
            DOC_TYPE TYPE ZTBL_FI_CSTM_001-DOC_TYPE,
      END OF %a_ZTBL_FI_CSTM_001.
* 锁定函数初始化:
CALL 'C_ENQ_WILDCARD' ID 'HEX0' FIELD %a_ZTBL_FI_CSTM_001.




* 锁定字段锁定参数的分配                     :


IF NOT MANDT IS INITIAL.
   MOVE MANDT TO:
        %a_ZTBL_FI_CSTM_001-MANDT.
ENDIF.


IF NOT INVOICE IS INITIAL OR
   NOT x_INVOICE IS INITIAL.
   MOVE INVOICE TO:
        %a_ZTBL_FI_CSTM_001-INVOICE.
ENDIF.


IF NOT CONTRACT IS INITIAL OR
   NOT x_CONTRACT IS INITIAL.
   MOVE CONTRACT TO:
        %a_ZTBL_FI_CSTM_001-CONTRACT.
ENDIF.


IF NOT DOC_TYPE IS INITIAL OR
   NOT x_DOC_TYPE IS INITIAL.
   MOVE DOC_TYPE TO:
        %a_ZTBL_FI_CSTM_001-DOC_TYPE.
ENDIF.




* 填写锁定表:


__seqta_tab-gname = 'ZTBL_FI_CSTM_001'.
__seqta_tab-gmode = MODE_ZTBL_FI_CSTM_001.
__seqta_tab-garg = %a_ZTBL_FI_CSTM_001.
APPEND __seqta_tab.




* 指定的锁定:
PERFORM send_enqueue(saplsena)
        TABLES __seqta_tab
        USING '2' __scope ' ' __synchron 'EZ_FI_CSTM_001' _collect.


ENDFUNCTION.

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值