Вы можете добавить поиск к systemuser
(«В настоящее время открыт») к сущности, и когда форма открыта, проверьте, имеет ли она значение. Если это так, отобразите сообщение и закройте форму или перейдите к форме только для чтения. Если нет, задайте поиск для текущего пользователя с помощью вызова веб-службы (чтобы он в тот же момент находился в базе данных), чтобы все остальные получали уведомление при открытии формы. При сохранении или закрытии формы (событие onbeforeunload
) выполните другой вызов веб-службы (или, при сохранении, просто установите для свойства ForceSubmit
пустого поиска значение true
), чтобы очистить поиск.
Обратите внимание, что это не поймает некоторые вещи, такие как сбойный клиент (который оставил бы запись "заблокированной"), поэтому вам понадобится какой-нибудь отказоустойчивый, такой как рабочий процесс, который очищает поиск после того, как он был установлен и запись не изменялась снова в течение определенного времени.
Кроме того, любая другая логика, которая может изменить запись (например, плагины, импорт, любая пользовательская разработка), должна выполняться таким образом, чтобы избежать коллизий с этой функциональностью «блокировки».