Вопрос

Блокировка окна

2 пользователя открывают окно одного и того же элемента раздела для редактирования. Как заблокировать окно для того пользователя, который открыл позже?
Да, есть механизм блокировки полей страницы записи, вопрос когда ставить блокировку а когда снимать. Допустим, при открытии окна мы "запомнили" объект что он уже редактируется (и для всех следующих проверяем при открытии окна нет ли блокировки по данному объекту), но как отслеживать конец редактирования если пользователь не нажал кнопку "Сохранить" или кнопку "Отменить"? То есть, пользователь закрыл вкладку броузера\закрыл броузер\выключил компьютер а блокировка осталась?

Нравится

3 комментария

Никто с таким не сталкивался?
 В 1С есть аналог - пессимистическая блокировка

В тот момент, когда пользователь начинает модификацию объекта в форме, расширение формы устанавливает пессимистическую блокировку. Если после этого другой пользователь, например, попытается выполнить редактирование того же объекта, ему будет выдано сообщение о том, что не удалось заблокировать объект. Когда пользователь, редактировавший объект, закроет форму объекта, расширение формы снимет пессимистическую блокировку.

Добрый день, Александр.

Вы можете проверять открыта ли страница у пользователя через сообщения веб-сокета. С сервера можно отправлять какое-нибудь сообщение, на клиенте в методе-обработчике отправлять ответ. Соответственно если пользователь закрыл страницу, то сервер ответа не получит и сможет отправить уже другому пользователю(тоже по веб-сокету), что страницу можно разблокировать. 
Информацию по веб-сокета и обработке сообщений можно найти на отрытых ресурсах, а также в академии.

А насколько такой метод проверки будет уязвим к закрытию окна\броузера\отключения компъютера?
Мне кажеться, что можно проще сделать проверку, пытался через валидацию поля и сравнить текущее значение из поля со записанным значением из базы.
Но валидация очень интересно отрабатывает, при изменении значения запускается 4 раза и каждый раз не видит 2 значения одновременно.
Кто-нибудь такое делал?

Показать все комментарии