二维码

[lock] ABAP锁定程序ENQUEUE_ES_PROG

Twilight发表于 2016-04-29 16:02Twilight 最后回复于 2016-04-29 16:02 [复制链接] 740 0

F:ENQUEUE_ES_PROG,该加锁函数会在程序里创建一把锁阻止同一时间只有一个运行
程序代码:
  1. REPORT yleon_032.

  2. CALL FUNCTION 'ENQUEUE_ES_PROG'
  3.   EXPORTING
  4.     mode_trdir     = 'E'
  5.     name           = 'YLEON_032'
  6.     x_name         = ' '
  7.     _scope         = '2'
  8.     _wait          = ' '
  9.     _collect       = ' '
  10.   EXCEPTIONS
  11.     foreign_lock   = 1
  12.     system_failure = 2
  13.     OTHERS         = 3.
  14. IF sy-subrc <> 0.
  15.   MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  16. ENDIF.

  17. CALL FUNCTION 'DEQUEUE_ES_PROG'
  18.   EXPORTING
  19.     mode_trdir = 'E'
  20.     name       = 'YLEON_032'
  21.     x_name     = ' '
  22.     _scope     = '3'
  23.     _synchron  = ' '
  24.     _collect   = ' '.
复制代码

编辑状态下执行代码,会提示:Object requested is currently locked by user XXX.
  • 因为程序处于编辑状态获取的锁与在程序里使用代码获取的锁是同一个锁,所以上面代码在获取锁时出错。
  • 如果处于只读状态时,则可以正常运行,但也只能一个窗口运行,不能有两个或多个只读状态下的该程序运行。
  • 程序的锁定只对前台程序有用,如果运行的是后台服务,则需要其他的解决方案。可以考虑使用如下方法:
    一种方式是将应用服务器配置为同一程序只允许同时运行一个JOB
    另一种方式是通过判断表TBTCO的JOB状态字段来解决
    扩展学习:程序中检查限制后台JOB数量
  • 程序在锁定后,解锁的动作不是必须的,程序退出或者完成后会自动解锁

参数说明:
NAME:Program name to lock
_SCOPE:Controls how the lock is passed to the update program
Value Meaning
  • 1 The lock is not passed to the update program. The lock is removed when the transaction ends.
  • 2 (default) The lock is passed to the update program. The update program is responsible for removing the lock.
  • 3 The lock is passed to the update program. The lock must be removed in both the interactive(交互) program and in the update program.
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表