The following code example will display how long a user with an open transaction has been holding a record lock:
- _lock-transid was added in OpenEdge 11.4
- further examples are provided in the Notes below
DEFINE TEMP-TABLE lockduration NO-UNDO
FIELD usrnum AS INT
FIELD transid AS INT64
FIELD lock-recid AS INT64
FIELD tablenum AS INT
FIELD lockduration AS DATETIME
FIELD timediff AS DECIMAL FORMAT ">>>>>>>>>>9"
INDEX iLockDur AS PRIMARY usrnum lock-recid tablenum .
PAUSE 0 BEFORE-HIDE.
REPEAT:
FOR EACH _lock.
FIND FIRST lockduration WHERE _lock-usr = lockduration.usrnum
AND _lock-recid = lockduration.lock-recid
AND _lock-table = lockduration.tablenum NO-ERROR.
IF AVAILABLE (lockduration) THEN
timediff = NOW - lockduration.
ELSE
DO:
CREATE lockduration.
ASSIGN
lockduration.usrnum = _lock._lock-usr
lockduration.transid = _lock._lock-transid
lockduration.lock-recid = _lock._lock-recid
lockduration.tablenum = _lock._lock-table
lockduration.lockduration = NOW.
END.
END.
FOR EACH lockduration.
FIND FIRST _lock WHERE _lock-recid = lockduration.lock-recid
AND _lock-usr = lockduration.usrnum
AND _lock-transid = lockduration.transid
AND _lock-table = lockduration.tablenum NO-ERROR.
IF NOT AVAILABLE _lock THEN
DELETE lockduration.
END.
PAUSE 20 BEFORE-HIDE.
PAUSE 4 BEFORE-HIDE.
FOR EACH lockduration.
DISP lockduration.
END.
END.