Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

ENQUEUE_READ & ENQUE_DELETE is it safer?

former_member317781
Active Participant
0 Likes
4,899

Hi Good day,

i have record where i lock to update.

once i update i unlock it but if i look at SM12 it has more than once record for that particular record.

so i have read all the records against my name and of that perticular TCODE and delete.

this is my logic, please let me know if it safter to delete like this.

data: it_enq type STANDARD TABLE OF SEQG3,

          wa_enq like line of it_enq,

          ld_gname type SEQG3-GNAME,

          ld_garg type SEQG3-GARG.

CALL FUNCTION 'ENQUEUE_READ'

   EXPORTING

     GCLIENT               = SY-MANDT

*   GNAME                 = ld_gname "Lock opject name

     GUNAME                = sy-uname

   TABLES

     ENQ                   = it_enq

   EXCEPTIONS

     COMMUNICATION_FAILURE = 1

     SYSTEM_FAILURE        = 2

     OTHERS                = 3.

loop at it_enq into wa_enq.

   IF wa_enq-gtcode ne 'CBIH82'.

     DELETE IT_ENQ INDEX SY-TABIX.

   ENDIF.

endloop.

CALL FUNCTION 'ENQUE_DELETE'

   TABLES

     ENQ = IT_ENQ.


thank you,

jacob.kata.

1 ACCEPTED SOLUTION
Read only

former_member317781
Active Participant
0 Likes
2,492

thank you all for the input.

the solution to the above requirment is : if i take the perticuler incident number and get the recnroot of it

and unlock only those will solve the issue.

this is the logic if anyone needs.

CALL FUNCTION 'ENQUEUE_READ'

   EXPORTING

     GCLIENT               = SY-MANDT

*   GNAME                 = ld_gname "Lock opject name

     GUNAME                = sy-uname

   TABLES

     ENQ                   = it_enq

   EXCEPTIONS

     COMMUNICATION_FAILURE = 1

     SYSTEM_FAILURE        = 2

     OTHERS                = 3.

SELECT SINGLE * FROM CCIhT_IAL WHERE IALID = IALID.

IF SY-SUBRC = 0.

loop at it_enq into wa_enq ."where GMODE = 'E' .

   CLEAR: GARG1, GARG2, LEN,LAST_21.

   SPLIT wa_enq-GARG AT 'ÿ' INTO GARG1 GARG2.

   len = strlen( GARG1 ) - 21.

IF len < 0.

else.

last_21 = GARG1+len(21).

IF CCIHT_IAL-RECNROOT = LAST_21.

   else.

*  IF wa_enq-gtcode ne 'CBIH82' .

     if wa_enq-GMODE = 'E'.

     DELETE IT_ENQ INDEX SY-TABIX.

     endif.

*  ENDIF.

ENDIF.

endif.

endloop.

*exit.

CALL FUNCTION 'ENQUE_DELETE'

   TABLES

     ENQ = IT_ENQ.

ENDIF.

Hi Good day,

i have record where i lock to update.

once i update i unlock it but if i look at SM12 it has more than once record for that particular record.

so i have read all the records against my name and of that perticular TCODE and delete.

this is my logic, please let me know if it safter to delete like this.

data: it_enq type STANDARD TABLE OF SEQG3,

          wa_enq like line of it_enq,

          ld_gname type SEQG3-GNAME,

          ld_garg type SEQG3-GARG.

CALL FUNCTION 'ENQUEUE_READ'

   EXPORTING

     GCLIENT               = SY-MANDT

*   GNAME                 = ld_gname "Lock opject name

     GUNAME                = sy-uname

   TABLES

     ENQ                   = it_enq

   EXCEPTIONS

     COMMUNICATION_FAILURE = 1

     SYSTEM_FAILURE        = 2

     OTHERS                = 3.

loop at it_enq into wa_enq.

   IF wa_enq-gtcode ne 'CBIH82'.

     DELETE IT_ENQ INDEX SY-TABIX.

   ENDIF.

endloop.

CALL FUNCTION 'ENQUE_DELETE'

   TABLES

     ENQ = IT_ENQ.


thank you,

jacob.kata.

3 REPLIES 3
Read only

Former Member
0 Likes
2,492

Looks okay to me, but you can do a check whiel looping on it_enq.

loop at it_enq into wa_enq WHERE GUNAME = sy-uname.

   IF wa_enq-gtcode ne 'CBIH82'.

     DELETE IT_ENQ INDEX SY-TABIX.

   ENDIF.

endloop.

Read only

0 Likes
2,492

thank you for the reply, but GUNAME = sy-uname is been sorted at below fm

CALL FUNCTION 'ENQUEUE_READ' .


issue is :


what if, the user edits 2 records in the same tcode = cbih82 in two sessions,

CALL FUNCTION 'ENQUE_DELETE'

   TABLES

     ENQ = IT_ENQ.


will delete two sessions  where by i want only one and not two.


hope am clear.

Read only

former_member317781
Active Participant
0 Likes
2,493

thank you all for the input.

the solution to the above requirment is : if i take the perticuler incident number and get the recnroot of it

and unlock only those will solve the issue.

this is the logic if anyone needs.

CALL FUNCTION 'ENQUEUE_READ'

   EXPORTING

     GCLIENT               = SY-MANDT

*   GNAME                 = ld_gname "Lock opject name

     GUNAME                = sy-uname

   TABLES

     ENQ                   = it_enq

   EXCEPTIONS

     COMMUNICATION_FAILURE = 1

     SYSTEM_FAILURE        = 2

     OTHERS                = 3.

SELECT SINGLE * FROM CCIhT_IAL WHERE IALID = IALID.

IF SY-SUBRC = 0.

loop at it_enq into wa_enq ."where GMODE = 'E' .

   CLEAR: GARG1, GARG2, LEN,LAST_21.

   SPLIT wa_enq-GARG AT 'ÿ' INTO GARG1 GARG2.

   len = strlen( GARG1 ) - 21.

IF len < 0.

else.

last_21 = GARG1+len(21).

IF CCIHT_IAL-RECNROOT = LAST_21.

   else.

*  IF wa_enq-gtcode ne 'CBIH82' .

     if wa_enq-GMODE = 'E'.

     DELETE IT_ENQ INDEX SY-TABIX.

     endif.

*  ENDIF.

ENDIF.

endif.

endloop.

*exit.

CALL FUNCTION 'ENQUE_DELETE'

   TABLES

     ENQ = IT_ENQ.

ENDIF.