通過對SAP鎖機制的瞭解,相信大家都比較關心這鎖機制是如何運用的,下面是週末研究的過程,現在記錄下來方便大家,也方便自己了!
1) SE11 創建鎖,鎖對象名必須以EZ或者EY開始:
2)點擊創建進入鎖對象維護,並設置相關信息如下:
以上就基本設置完,下面通過編寫程序測試,代碼如下:
*&---------------------------------------------------------------------*
*& Report ZTEST_LOCK
*&
*&---------------------------------------------------------------------*
*& CREATE BY : FLYING
*& CREATE DATE : 2009-11-14
*& DECRIPTIONS : 測試SAP的鎖機制
*&---------------------------------------------------------------------*
REPORT ztest_lock.
TABLES: sscrfields.
*----------------------------------------------------------------------*
* define internal table
* 定義內表
*
*----------------------------------------------------------------------*
DATA: t_eban TYPE zteban OCCURS 0 WITH HEADER LINE,
w_eban LIKE t_eban.
*----------------------------------------------------------------------*
* defin avirable
* 定義變量
*
*----------------------------------------------------------------------*
DATA: ok_code TYPE sy-ucomm, "獲得按鈕功能碼
save_ok TYPE sy-ucomm. "臨時存儲功能碼
DATA: flag TYPE i. "用於標記處理模式是修改還是顯示
*----------------------------------------------------------------------*
* selection-screen
* 選擇屏幕
*
*---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE text-001.
PARAMETERS: p_banfn LIKE eban-banfn.
SELECTION-SCREEN END OF BLOCK blk.
SELECTION-SCREEN FUNCTION KEY 1. "添加屏幕按鈕
SELECTION-SCREEN FUNCTION KEY 2. "添加屏幕按鈕
*---------------------------------------------------------------------*
* initialization
* 初始化選擇屏幕
*
*---------------------------------------------------------------------*
INITIALIZATION.
sscrfields-functxt_01 = '修改'. "設置屏幕顯示文本
sscrfields-functxt_02 = '顯示'.
CLEAR flag.
*---------------------------------------------------------------------*
* at selection-screen
* 處理選擇屏幕的按鈕
*
*---------------------------------------------------------------------*
AT SELECTION-SCREEN.
CASE sy-ucomm. "選擇屏幕按鈕
WHEN 'FC01'.
flag = 1.
PERFORM frm_get_data.
WHEN 'FC02'.
flag = 0.
PERFORM frm_get_data.
ENDCASE.
*---------------------------------------------------------------------*
* frm_get_data
* 根據選擇條件取數據
*
*---------------------------------------------------------------------*
FORM frm_get_data.
SELECT banfn
bnfpo
matnr
ekgrp
INTO CORRESPONDING FIELDS OF TABLE t_eban
FROM eban
WHERE banfn = p_banfn.
IF t_eban[] IS INITIAL.
MESSAGE '沒有可查詢的數據' TYPE 'I'.
STOP.
ELSE.
IF flag = 1.
PERFORM frm_set_lock.
ENDIF.
CALL SCREEN 1001.
ENDIF.
ENDFORM. "frm_get_data
*---------------------------------------------------------------------*
* frm_set_lock
* 設置鎖
*
*--------------------------------------------------------------------*
FORM frm_set_lock.
CALL FUNCTION 'ENQUEUE_EZEBAN'
EXPORTING
mode_zteban = 'E'
mandt = sy-mandt
banfn = p_banfn.
IF sy-subrc <> 0.
STOP.
ENDIF.
ENDFORM. "frm_set_lock
*----------------------------------------------------------*
* frm_delete_lock
* 刪除鎖
*
*----------------------------------------------------------*
FORM frm_delete_lock.
CALL FUNCTION 'DEQUEUE_EZEBAN'
EXPORTING
mode_zteban = 'E'
mandt = sy-mandt
banfn = p_banfn
x_banfn = ' '
.
ENDFORM. "frm_delete_lock
*&SPWIZARD: DECLARATION OF TABLECONTROL 'TAB1' ITSELF
CONTROLS: tab1 TYPE TABLEVIEW USING SCREEN 1001.
*&SPWIZARD: OUTPUT MODULE FOR TC 'TAB1'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE tab1_change_tc_attr OUTPUT.
DESCRIBE TABLE t_eban LINES tab1-lines.
ENDMODULE. "TAB1_CHANGE_TC_ATTR OUTPUT
*&SPWIZARD: INPUT MODULE FOR TC 'TAB1'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MODIFY TABLE
MODULE tab1_modify INPUT.
MODIFY t_eban
INDEX tab1-current_line.
ENDMODULE. "TAB1_MODIFY INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_1001 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_1001 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
SET PF-STATUS 'STAT_1001'.
ENDMODULE. " STATUS_1001 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_1001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_1001 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'BACK'.
perform frm_delete_lock.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
PERFORM frm_delete_lock.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_COMMAND_1001 INPUT
*&---------------------------------------------------------------------*
*& Module SET_READ_LINE OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE set_read_line OUTPUT. "設置表格的行項目不可編輯
IF flag = 0.
LOOP AT SCREEN.
IF screen-name = 'T_EBAN-BANFN'.
screen-input = '0'.
ENDIF.
IF screen-name = 'T_EBAN-BNFPO'.
screen-input = '0'.
ENDIF.
IF screen-name = 'T_EBAN-MATNR'.
screen-input = '0'.
ENDIF.
IF screen-name = 'T_EBAN-EKGRP'.
screen-input = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
ENDMODULE. " SET_READ_LINE OUTPUT
測試效果如下所示:
sap 鎖機制實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.