在程序中会有这样的情况,自己建的一个存储数据的外部表,需要在某个用户访问并修改的时候,锁上,不允许其它用户修改。系统提供了一个公共函数来实现锁表功能。再加上一个对Radiobuttion的判断就可实现上述功能。一般把锁表FORM放在START-OF-SELECTION事件下.解锁FORM放在修改界面的屏幕命令里。
以下是部分代码。
* 锁定数据表,不允许多人同时修改
IF R_MODIFY = CNS_X.
PERFORM FRM_LOCK_DATATABLE.
ENDIF.
CASE WI_UCOMM.
*-----用户点击返回时退回第一画面
WHEN 'BACK'.
* 解锁数据表
PERFORM FRM_UNLOCK_DATATABLE.
LEAVE TO SCREEN 0.
ENDCASE.
*&---------------------------------------------------------------------*
*& Form FRM_LOCK_DATATABLE
*&---------------------------------------------------------------------*
* 锁定数据表,不允许多人同时修改
*----------------------------------------------------------------------*
FORM FRM_LOCK_DATATABLE .
CALL FUNCTION 'ENQUEUE_E_TABLE'
EXPORTING
MODE_RSTABLE = 'E'
TABNAME = 'ZTABLENAME' "自己建的外部表表名
VARKEY = 'BUKRSFKDATVBELNPS_PSP_PNR' " 要锁列的字段名的连接字符
X_TABNAME = ' '
X_VARKEY = ' '
_SCOPE = '2'
_WAIT = ' '
_COLLECT = ' '
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " FRM_LOCK_DATATABLE
*&---------------------------------------------------------------------*
*& Form FRM_UNLOCK_DATATABLE
*&---------------------------------------------------------------------*
* 解锁数据表
*----------------------------------------------------------------------*
FORM FRM_UNLOCK_DATATABLE .
CALL FUNCTION 'DEQUEUE_E_TABLE'
EXPORTING
MODE_RSTABLE = 'E'
TABNAME = 'ZTABLENAME'
VARKEY = 'BUKRSFKDATVBELNPS_PSP_PNR'
X_TABNAME = ' '
X_VARKEY = ' '
_SCOPE = '3'
_SYNCHRON = ' '
_COLLECT = ' ' .
ENDFORM. " FRM_UNLOCK_DATATABLE