2 пользователя открывают окно одного и того же элемента раздела для редактирования. Как заблокировать окно для того пользователя, который открыл позже?
Да, есть механизм блокировки полей страницы записи, вопрос когда ставить блокировку а когда снимать. Допустим, при открытии окна мы "запомнили" объект что он уже редактируется (и для всех следующих проверяем при открытии окна нет ли блокировки по данному объекту), но как отслеживать конец редактирования если пользователь не нажал кнопку "Сохранить" или кнопку "Отменить"? То есть, пользователь закрыл вкладку броузера\закрыл броузер\выключил компьютер а блокировка осталась?
Нравится
Никто с таким не сталкивался?
В 1С есть аналог - пессимистическая блокировка
В тот момент, когда пользователь начинает модификацию объекта в форме, расширение формы устанавливает пессимистическую блокировку. Если после этого другой пользователь, например, попытается выполнить редактирование того же объекта, ему будет выдано сообщение о том, что не удалось заблокировать объект. Когда пользователь, редактировавший объект, закроет форму объекта, расширение формы снимет пессимистическую блокировку.
Добрый день, Александр.
Вы можете проверять открыта ли страница у пользователя через сообщения веб-сокета. С сервера можно отправлять какое-нибудь сообщение, на клиенте в методе-обработчике отправлять ответ. Соответственно если пользователь закрыл страницу, то сервер ответа не получит и сможет отправить уже другому пользователю(тоже по веб-сокету), что страницу можно разблокировать.
Информацию по веб-сокета и обработке сообщений можно найти на отрытых ресурсах, а также в академии.
А насколько такой метод проверки будет уязвим к закрытию окна\броузера\отключения компъютера?
Мне кажеться, что можно проще сделать проверку, пытался через валидацию поля и сравнить текущее значение из поля со записанным значением из базы.
Но валидация очень интересно отрабатывает, при изменении значения запускается 4 раза и каждый раз не видит 2 значения одновременно.
Кто-нибудь такое делал?
Олександр Басалик,
При использовании подхода с проверкой по
веб-сокету можно основываться на ответ от сервер, если ответ получен - страницу блокировать, а если браузер закрыт он не отправить ответ.
Нам известен немного иной подход реализации описанной задачи.
Приблизительная логика реализации:
Необходимо создать дополнительную таблицу, в которую в момент открытия карточки будут вносится данные:
- id записи, что редактируется;
- время открытия;
- пользователь, который редактирует запись.
После завершения редактирования записи или по таймеру данные должны с таблицы удалятся. При открытии карточки необходимо добавить метод проверки наличия записи в дополнительной таблице.
Но хочу обратить внимание, что данная логика решения бизнес-задачи имеет много минусов так как не учитывает следующие события:
вкладка со страницей редактирования была закрыта или открыта в фоновом режиме, браузер был закрыт.