Thursday, 5 September 2013

Lock Object ENQUEUE_E_TABLE

http://www.sapdev.co.uk/dictionary/lock_enqueue.htm


Example Program


Material and batch are primaly keys in table ZL009 , just use this two fields to lock a particular record in table.

FUNCTION z_insert_zl009.
*"----------------------------------------------------------------------
*"*"Update function module:
*"
*"*"Local interface:
*"  IMPORTING
*"     VALUE(I_ZL009) LIKE  ZL009 STRUCTURE  ZL009
*"----------------------------------------------------------------------
*  TABLES: *ZL009.
*
*  DATA: OBJECTID                TYPE CDHDR-OBJECTID,
*      TCODE                   TYPE CDHDR-TCODE,
*      PLANNED_CHANGE_NUMBER   TYPE CDHDR-PLANCHNGNR,
*      UTIME                   TYPE CDHDR-UTIME,
*      UDATE                   TYPE CDHDR-UDATE,
*      USERNAME                TYPE CDHDR-USERNAME,
*      CDOC_PLANNED_OR_REAL    TYPE CDHDR-CHANGE_IND,
*      CDOC_UPD_OBJECT         TYPE CDHDR-CHANGE_IND VALUE 'U',
*      CDOC_NO_CHANGE_POINTERS TYPE CDHDR-CHANGE_IND.
************************************************************************
* Change History                                                       *
* Date                   : 23-SEP-2009                                 *
* Modified By            : PARAKKAD                                    *
* Transport #            : D47K9A04G2                                  *
* Marked By              : @001                                        *
* ADT #                  : UNITY00004226                               *
* Description            : 6Fields added after SET command to update   *
*                          table zl009                                 *
************************************************************************
* Change History                                                       *
* Date                   : 2-DEC-2010                                  *
* Modified By            : CARRM5                                      *
* Transport #            : D47K9A0HKP                                  *
* Marked By              : D47K9A0HKP                                  *
* SCR #                  : 162999                                      *
* Description            : Track changes to ZL009-RevLv on ZREC_ZC21   *
*                          table                                       *
************************************************************************
************************************************************************
* Change History                                                       *
* Date                   : 06-Dec-2012                                 *
* Modified By            : GUPTAA8                                     *
* Transport #            : D47K9A0RM6                                  *
* Marked By              : D47K9A0RM6                                  *
* SCR #                  : 458943                                      *
* Description            : Revision Level Update for table ZL009 for   *
*                          all the Movement type for Tcode(MIGO & MB01)*
*                          & Mat.Grp.-010(Capital Equipment–BSC Mfg)   *
************************************************************************

* Begin Insert - D47K9A0HKP
  TABLESZREC_ZC21.
  DATA:   lc_matkl   TYPE   MATKL.
  CONSTANTS:  c_981(3TYPE C        VALUE '981',
              c_011(3TYPE C        VALUE '011',
              c_MIGO   TYPE TCODE    VALUE 'MIGO',
              c_MB01   TYPE TCODE    VALUE 'MB01',
              C_010(3TYPE C        VALUE '010'.    "D47K9A0RM6+
* End Insert - D47K9A0HKP

  DATA :  BEGIN OF lock_arg,
           mandt LIKE zl009-mandt,
           matnr LIKE zl009-matnr,
           charg LIKE zl009-charg,
   END OF lock_arg.
  DATA lock_arg-val  LIKE rstable-varkey.
  CLEAR lock_arg-val.
  CLEAR lock_arg.
  CLEAR zl009.
  MOVE-CORRESPONDING i_zl009 TO zl009.
  lock_arg-mandt sy-mandt.
  lock_arg-matnr zl009-matnr.
  lock_arg-charg zl009-charg.
  lock_arg-val lock_arg.
  CALL FUNCTION 'ENQUEUE_E_TABLE'
       EXPORTING
            mode_rstable   'S'
            tabname        'ZL009'
            varkey         lock_arg-val
**         X_TABNAME      = ' '
**         X_VARKEY       = ' '
            _scope         '2'
**         _WAIT          = ' '
       EXCEPTIONS
            foreign_lock   4
            system_failure 8
            OTHERS         3.

  CASE sy-subrc.
    WHEN 0.
    WHEN 4.
      MESSAGE a041 WITH lock_arg.
    WHEN OTHERS.
      MESSAGE a042 WITH  'ZL009'.
  ENDCASE.
  INSERT zl009.

  IF sy-subrc NE AND sy-subrc NE 4.
    MESSAGE a089 WITH 'ZL009' zl009-matnr zl009-charg.
*   System error : Error when inserting table &, Material no &, Batch no
  ENDIF.
  IF sy-subrc 4.
    UPDATE zl009
        SET
           ebeln =    zl009-ebeln
           mjahr =    zl009-mjahr
           ersda =    zl009-ersda
           ernam =    zl009-ernam
           revlv =    zl009-revlv
           werks =    zl009-werks
           bwart =    zl009-bwart
           vfdat =    zl009-vfdat
           lifnr =    zl009-lifnr
           licha =    zl009-licha
           aufnr =    zl009-aufnr
           zovwrit =  zl009-zovwrit
*********************** Begin Ins @001*****************
           zorigwerks =  zl009-zorigwerks
           zzsterlot  =  zl009-zzsterlot
           zzstldat   =  zl009-zzstldat
           zzstlloc   =  zl009-zzstlloc
           zzstlmthd  =  zl009-zzstlmthd
           zzproduct  =  zl009-zzproduct
********************* End Ins @001***********************
         WHERE
           matnr =    zl009-matnr  AND
           charg =    zl009-charg .

    IF sy-subrc NE 0.
      MESSAGE a089 WITH 'ZL009' zl009-matnr zl009-charg.
*   System error : Error when inserting table &, Material no &, Batch no
    ENDIF.

* Begin Insert - D47K9A0HKP
* The following code was lifted from MZC09F01 in transaction ZC21.
* We are inserting an entry in table ZREC_ZC21 to track RevLv history.
* We can only store the current value of ZL009-RevLv because at this
* point we have no access to previous value. We will store the current
* value in ZREC_ZC21-XVALUE. This table update occurs only when the
* transaction is MIGO or MB01, the movement is 981, and the material
* group is 011.
*    IF ZL009-BWART = c_981                             "D47K9A0RM6-
*    AND ( SY-TCODE = c_MIGO OR SY-TCODE = c_MB01 ).    "D47K9A0RM6-
    IF SY-TCODE c_MIGO OR SY-TCODE c_MB01 ).      "D47K9A0RM6+
      CLEAR lc_matkl.
      SELECT SINGLE MATKL INTO lc_matkl FROM MARA
        WHERE MATNR ZL009-MATNR.
*      IF lc_matkl = c_011.                             "D47K9A0RM6-
      IF lc_matkl c_011 OR LC_MATKL EQ C_010 ).     "D47K9A0RM6+
        CLEAR ZREC_ZC21.
        ZREC_ZC21-MANDT    SY-MANDT    .
        ZREC_ZC21-SYSID    SY-UNAME    .
        ZREC_ZC21-PLANT    ZL009-WERKS.
        ZREC_ZC21-MATNR  ZL009-MATNR.
        ZREC_ZC21-CHARG ZL009-CHARG.
        ZREC_ZC21-RECDATE  SY-DATUM.
        ZREC_ZC21-RECTIME  SY-UZEIT.
        ZREC_ZC21-ACTION   'MOD'.
        ZREC_ZC21-XTABLE   'ZL009'.
        ZREC_ZC21-XFIELD 'Revision'.
        ZREC_ZC21-XVALUE ZL009-REVLV.
        ZREC_ZC21-TCODE SY-TCODE.
        INSERT ZREC_ZC21.
      ENDIF.
    ENDIF.

* End Insert - D47K9A0HKP
  ENDIF.
******

  CALL FUNCTION 'DEQUEUE_E_TABLE'
       EXPORTING
            mode_rstable 'S'
            tabname        'ZL009'
            varkey         lock_arg-val
*         X_TABNAME    = ' '
*         X_VARKEY     = ' '
            _scope       '2'
            _synchron    'X'.
*********************************************************

*  OBJECTID = 'CHARGE'.
*  UDATE = SY-DATUM.
*  UTIME = SY-UZEIT.
*  TCODE = SY-TCODE.
*  USERNAME = SY-UNAME.
*  *ZL009  = ZL009.
*
*  CALL FUNCTION 'CHANGEDOCUMENT_OPEN'
*    EXPORTING
*      OBJECTCLASS      = 'CHARGE         '
*      OBJECTID         = OBJECTID
*    EXCEPTIONS
*      SEQUENCE_INVALID = 1
*      OTHERS           = 2.
*
*  CASE SY-SUBRC.
*    WHEN 1. MESSAGE A004 WITH 'Sequence invalid'.
*    WHEN 2. MESSAGE A004 WITH 'OPEN-Failure'.
*  ENDCASE.
*
*  CALL FUNCTION 'CHANGEDOCUMENT_SINGLE_CASE'
*    EXPORTING
*      TABLENAME              = 'ZL009         '
*      WORKAREA_OLD           = *ZL009
*      WORKAREA_NEW           = ZL009
*      CHANGE_INDICATOR       = 'U'
*      DOCU_DELETE            = ' '
*    EXCEPTIONS
*      NAMETAB_ERROR          = 1
*      OPEN_MISSING           = 2
*      POSITION_INSERT_FAILED = 3
*      OTHERS                 = 4.
*
*  CASE SY-SUBRC.
*    WHEN 1. MESSAGE A004 WITH 'Name table failure'.
*    WHEN 2. MESSAGE A004 WITH 'Open missing'.
*    WHEN 3. MESSAGE A004 WITH 'INSERT failure'.
*    WHEN 4. MESSAGE A004 WITH 'SINGLE Failure'.
*  ENDCASE.
*
*  CALL FUNCTION 'CHANGEDOCUMENT_CLOSE'
*    EXPORTING
*      OBJECTCLASS          = 'CHARGE         '
*      OBJECTID             = OBJECTID
*      DATE_OF_CHANGE       = UDATE
*      TIME_OF_CHANGE       = UTIME
*      TCODE                = TCODE
*      USERNAME             = USERNAME
*    EXCEPTIONS
*      HEADER_INSERT_FAILED = 1
*      OBJECT_INVALID       = 2
*      OPEN_MISSING         = 3
*      NO_POSITION_INSERTED = 4
*      OTHERS               = 5.
*
*  CASE SY-SUBRC.
*    WHEN 1. MESSAGE A004 WITH 'Insert Header failed'.
*    WHEN 2. MESSAGE A004 WITH 'Object invalid'.
*    WHEN 3. MESSAGE A004 WITH 'Open missing'.
*    WHEN 5. MESSAGE A004 WITH 'CLOSE Failure'.
*  ENDCASE.


ENDFUNCTION.

No comments:

Post a Comment