lockRow( ) example
The following checks to see if the current row has been changed before the user navigates to another row. If changes have been made, an explicit row lock is attempted. If the lock is successful, the date and time of update is recorded in the row, the row is saved and unlocked, and navigation is permitted. If unsuccessful, the user is given a choice as to what to do.
function rowset_canNavigate
if not this.modified
return true // No changes, row navigation okay
endif
local lReturn, nButton
lReturn = false
do
if not this.lockRow( ) // Try the lock
nButton = msgBox( "Row is locked by another, keep trying? " + ;
'("Cancel" discards changes)', ;
"Cannot Save Changes", 3 + 32 )
if nButton = 6
loop // User clicked "Yes" (try again)
endif
lReturn := nButton = 2
if lReturn // User clicked "Cancel"
this.abandon( )
endif
exit // Give up
endif
lReturn := true
this.fields[ "UPDATED" ].value := date( ) + " at " + time( )
this.save( )
this.unlock( )
until lReturn
return lReturn