判断是否有人在操作某张表,并获取…

加锁时,有时候需要判断谁占用了该表
  
    call function 'ENQUEUE_READ'
           exporting
                gclient               = gclient
                gname                 = 'EWUARCHIV'
                garg                  = garg
                guname                = space
           importing
                number                = number
                subrc                 = subrc
           tables
                enq                   = enq
           exceptions
                communication_failure = 1
                system_failure        = 2
                others                = 3.
      if subrc = 0 and number ne 0.
        read table enq index 1.
        if sy-subrc = 0.
          message i510(eu) with enq-guname 'EWUARCHIV'.
        else.
          message i521(eu) with 'EWUARCHIV'.
        endif.
      else.
        message i521(eu) with 'EWUARCHIV'.
      endif.
      aendern = space.
    when others.
      message s010(ad) with 'Nur Anzeige m?glich.'(011).
      aendern = space.

例:
FORM zform_lock_data USING  u_matnr TYPE matnr
                             u_lgpla TYPE lgpla
                      CHANGING lock_name TYPE string.

   CLEAR g_it_lock_name.
   CLEAR g_wa_lock_name.
   CLEAR lock_name.

   CALL FUNCTION 'ENQUEUE_EZ_STOCK_MOVE'
    EXPORTING
      mode_zstock_view       = 'X'
      matnr                  = u_matnr
      lgpla                  = u_lgpla
*      X_MATNR                = ' '
*      X_LGPLA                = ' '
*      _SCOPE                 = '2'
*      _WAIT                  = ' '
*      _COLLECT               = ' '
    EXCEPTIONS
      foreign_lock           = 1
      system_failure         = 2
      OTHERS                 = 3
             .
   IF sy-subrc <> 0.

     CALL FUNCTION 'ENQUEUE_READ'
       EXPORTING
         gclient = sy-mandt
         gname   = 'ZSTOCK_VIEW'
         garg    = ' '
         guname  = ''
       TABLES
         enq     = g_it_lock_name.

     LOOP AT g_it_lock_name INTO g_wa_lock_name.

       IF g_wa_lock_name-garg(18) = u_matnr AND g_wa_lock_name-garg+18 = u_lgpla.
         CONCATENATE lock_name
                     g_wa_lock_name-guname ':' INTO lock_name.
       ENDIF.
     ENDLOOP.

   ENDIF.
 ENDFORM. 

另外SM12是查看表被锁情况的一个tcode,可以进去看看
posted @ 2014-01-22 09:19  胡来  阅读(242)  评论(0编辑  收藏  举报