Meant to write a quick post about this for a while and having been bitten by it again i finally remembered
if you are using externally updated tables that are not system tables this is an important thing to keep in mind.
Externally Updated Tables
These are tables that are not part of your DD structure via relationships but are updated manually by code in the Data Dictionary.
These tables have to be listed as externally updated tables so the DD properly locks them and doesn’t mark them read only
A problem exists though. Because the DD isn’t actually doing anything to that table by itself it will not do anything besides the locks. Also it isn’t just doing a lock but rather a reread of course.
That is where the problem is. these tables generally get found and updated/deleted inside an Update / Backout method or similar. The record in the buffer when for example a Request_Save is sent are irrelevant.
If the record in the buffer before the Request_Save is a record that was deleted by another user this will cause a record not found error on the reread and stop the save operation
In order to prevent this from happening make sure to clear the buffers of externally updated tables before sending a Request_Save or Request_Delete to the DataDictionary