原著作者:SAP道長
具體操作步驟:
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
參考自動生成的函數:
*"--------------------------------------------------------------------
*"*"本地接口:
*" 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.