ICSSoft.STORMNET.Web.Tools.WebLockHelper
- класс для работы с web-блокировками объектов данных в веб-приложениях. Использует дату и время жизни блокировки для определения ее актуальности, блокировки хранит в БД.
Интерфейс
Класс реализует интерфейс ILockHelper
:
public interface ILockHelper
{
bool LockDataObject(string dataObjectKey, string userName, out string lockUserName);
bool ClearWebLock(string dataObjectKey, string userName);
string GetLock(string dataObjectKey);
TimeSpan LockTimeout { get; set; }
}
LockDataObject
- попытаться установить блокировку на объект по переданному ключу и имени пользователя. В случае удачной блокировки возвращаетtrue
, если объект уже заблокирован -false
. При этом в параметрlockUserName
записывается имя пользователя, установившего блокировку.ClearWebLock
- удалить блокировку, если она была установлена текущим пользователем. В случае удачной очистки вернетtrue
, иначеfalse
.GetLock
- возвращает имя пользователя, заблокировавшего объект, по ключу. Если объект не заблокирован, возвращается пустая строка.LockTimeout
- время жизни блокировки. Необходимо для того, чтобы удалять старые блокировки. Если страница редактирования открыта, то она периодически посылает ajax-запросы на продление блокировки. При закрытии страницы запросы прекращаются, и блокировка стареет. Периодичность запросов соответствует времени жизни блокировки.
Использвание
Если нужен прикладной сервис блокировок, можно реализовать интерфейс ILockHelper
и использовать собственный класс, где нужно, например, задать его для блокировок в WebObjectListView.
Пример использования WebLockHelper
в WOLV:
// Свойство, хранящее LockHelper
public static ILockHelper LockHelper
{
get
{
if (_lockHelper == null)
{
_lockHelper = new WebLockHelper();
}
return _lockHelper;
}
set { _lockHelper = value; }
}
Установка блокировки:
if (lockHelper.LockDataObject(PK, Context.User.Identity.Name, out lockUserName))
{
MessageBox.Show("Объект успешно заблокирован");
}
else
{
MessageBox.Show("Объект уже заблокирован пользователем " + lockUserName);
}