I use this code to generate a custom auto sequence value, which the user can set the starting value for:
function ggentransid(pctransid_type)
{
var ofsctl = databaseManager.getFoundSet(currentcontroller.getServerName(),'c6ctl')
ofsctl.loadAllRecords()
ofsctl.setSelectedIndex(1)
while(!databaseManager.acquireLock(ofsctl,1,'transid_lock'))
{
application.sleep(1000)
}
databaseManager.refreshRecordFromDatabase(ofsctl,1)
var loctlrec = ofsctl.getRecord(1)
if (pctransid_type == 'P')
{
loctlrec.c6paytransid += 1;
globals.gsave_record(loctlrec)
var lctransid = loctlrec.c6paytransid
databaseManager.releaseAllLocks('transid_lock');
}
else
{
loctlrec.c6chgtransid += 1;
globals.gsave_record(loctlrec)
var lctransid = loctlrec.c6chgtransid
databaseManager.releaseAllLocks('transid_lock');
}
return lctransid+'' // convert ot string
}
It seems to me the aquireLock loop should repeat infinitely if the lock cannot be acquired. But instead, a Servoy exception occurs, the user gets a message, and a new ID is not generated. Any ideas?