2014 Aug 05 8:35 AM
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.
2014 Aug 06 9:17 AM
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.
2014 Aug 05 9:04 AM
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.
2014 Aug 05 9:14 AM
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.
2014 Aug 06 9:17 AM
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.