We have a system that handles several users where users can spend up to 10~ minutes processing an item. An important business rule is that each item can only be processed by one user. We ensure this by having a version property (we use NHibernate). If some one processes an item and their version number doesn’t match the one in the database then some one else has processed it and we reject their work. Obviously, this can get quite frustrating for our users as they no idea if some one else is processing the same item as them. Also, having the ability to merge data is not an option because this is a one person process.
The least obtrusive idea I can think of is keeping track of which users have each item open. Say I had item 123 opened and some one else were to open it then they could see who has it opened. The one problem I have with this approach is what happens if the application crashes or the user simply shuts down their computer unexpectedly? Since the user wouldn’t have gone through the regular steps for leaving an item (e.g. the back button) then we’d have an entry for user 123abc viewing an item when they could be at home.
We’ve also looked at the idea of users having the ability to lock an item they plan on working on, however with much discussion we’re afraid people will begin locking items and either getting distracted by other tasks, lunch or perhaps gone home for the day. This could be especially problematic if some one has an item locked and it must be completed ASAP (e.g. emergency items).
What alternatives are there to implementing something like this?
I would provide 2 features to manage orphaned locks
once a lock is released the user cannot submit the changes they submitted without checking out the object again.