Locks – блокировки
<< Click to Display Table of Contents >> Объектная модель > Основные механизмы Locks – блокировки |
Блокировка представляет собой запрет на редактирование объекта системы для всех пользователей. При этом внесение изменений в объект возможно пользователем или клиентским приложением, которое изначально установило блокировку. Например, блокировка устанавливается при открытии пользователем версии документа на редактирование и снимается после закрытия. Блокировка также снимается, если клиентское приложение долго не подтверждает активность своей сессии.
Если объект уже заблокирован, остальные пользователи могут просматривать (читать) его. Например, если карточка сущности уже кем-то заблокирована, пользователи могут просматривать ее, но не могут менять поля. В карточке сущности будет отображаться подсказка с указанием имени пользователя, заблокировавшего объект, а также даты и времени блокировки.
Основное назначение блокировки – защита объекта от потери изменений. Без блокировки пользователи, одновременно редактирующие объект, могут случайно затереть изменения друг друга. В случае работы блокировки первый пользователь блокирует объект на время редактирования и сохранения своих изменений. Второй пользователь сможет внести свои правки только тогда, когда блокировка будет снята первым пользователем.
Блокировку можно установить:
•на сущности. Например, открыть на редактирование карточку сущности;
•на бинарные данные, с которыми пользователь работает в системе. Например, открыть на редактирование содержимое документа.
Точка входа для программной работы с блокировками – класс Locks.
ВАЖНО. Перед началом программной работы с сущностью рекомендуется устанавливать на нее блокировку. Если это не сделать, то сущность одновременно могут изменять разные сервисы. В этом случае изменения не применяются.
Методы
Имя |
Описание |
---|---|
GetLockInfo() |
Получить информацию о текущем состоянии блокировки сущности |
Lock(IEntity entity) |
Заблокировать сущность |
TryLock() |
Попытаться заблокировать сущность |
Unlock(IEntity entity) |
Разблокировать сущность |
Пример 1. Блокировка документа/блокировка содержимого документа
/// Установить блокировку на документ.
Locks.Lock(document);
/// Установить блокировку на содержимое документа.
Locks.Lock(document.LastVersion.Body);
Пример 2. Попытка заблокировать документ
var isForcedLocked = false;
try
{
isForcedLocked = Locks.TryLock(document);
// Если получилось установить блокировку, то создать версию документа.
if (isForcedLocked)
{
document.CreateVersion();
}
// Если не получилось заблокировать документ, то показать сообщение пользователю.
else
{
Dialogs.ShowMessage("Не удалось заблокировать документ",
"Ошибка при выполнении действия 'Установить блокировку'",
MessageType.Error, "Ошибка");
}
}
finally
// Если документ был заблокирован, снять блокировку.
{
if (isForcedLocked)
{
Locks.Unlock(document);
}
}
© Компания Directum, 2024 |