Read Only

Объект, открытый в режиме Только чтение (Read-only) не может быть изменен пользователем, данные, хранящиеся в объекте, будут доступны только для чтения.

Режим ReadOnly может понадобиться в разных ситуациях, к примеру:

  • Один пользователь открыл объект на редактирование, в это время другой пользователь пытается также открыть этот же объект на редактирование.
  • У пользователя нет прав изменять какое-либо поле объекта, или сам объект, но есть право просматривать данные.

Составляющие режима ReadOnly

Режим можно условно поделить на 3 составляющие:

  1. Блокировка интерфейса пользователя
  2. Блокировка объекта данных в памяти приложения
  3. Блокировка объекта данных в базе данных

Блокировка интерфейса пользователя

Если пользователь не может вносить изменения в объект, он должен это осознавать в момент открытия формы редактирования. Если объект в данный момент недоступен из-за блокировки другим пользователем, рекомендуется вывести предупреждение типа Объект заблокирован другим пользователем. Вы желаете открыть объект только на чтение? Да\Нет.
Если пользователь все же желает открыть объект в режиме ReadOnly, необходимо заблокировать контролы для редактирования полей объекта. Также необходимо скрыть кнопки Сохранить и Сохранить и закрыть (только для случая полной блокировки, а не блокировки отдельных полей объекта).

Для блокировки интерфейса пользователя в Web-приложениях используется класс WebBinder.

WebBinder позволяет либо заблокировать объект полностью, либо заблокировать только некоторые его поля.

Важно: Стоит отметить, что WebBinder блокирует только те поля объекта, которые зарегистрированы в WebBinder’e и содержатся в передаваемом представлении, а также только серверные контролы, которые имеют свойства ReadOnly или Enabled.

  • Полная блокировка объекта через WebBinder осуществляется вызовом метода
  wb.SetReadOnlyForm(this.Controls, this.View, true); 

где wb это экземпляр WebBinder’a на конкретной странице.

  • Еще один вариант полной блокировки: установка свойства ReadOnly у конкретной формы
 this.ReadOnly = true; 
  • Частичная блокировка объекта (блокировка отдельных полей) осуществляется вызовом метода
 wb.SetReadOnlyProperty(this.Controls, "ФИО", true); 

где ФИО это наименование свойства, которое нужно заблокировать для редактирования.

  • Еще один вариант частичной блокировки - блокировка конкретного контрола путем вызова метода
 wb.SetReadonlyToControl(ctrlФИО, true); 

где ctrlФИО - контрол, который необходимо заблокировать для редактирования.

Блокировка объекта данных при открытии страницы редактирования

Чтобы заблокировать объект при открытии страницы достаточно послать в GET-запросе параметр &mode=readonly.

Пример можно посмотреть в статье Добавление кнопки в тулбар или в строки WebObjectListView.

Блокировка объекта данных в памяти приложения

Блокировка объекта в памяти осуществляется вызовом метода объекта DataObject.LockObject(Key), где Key - некий ключ блокировки типа Guid. Разблокировать объект можно только этим ключом при помощи метода DataObject.UnLockObject(Key).

При вызове метода LockObject блокировка в базу не отправляется.

Пример можно посмотреть в статье Как открыть объект только на чтение.

Блокировка объекта данных в базе данных

Для блокировки используется поддерживаемый технологией Сервис блокировок.

Блокировка объекта в базе данных железно защищает объект от изменений объекта другими пользователями. Создается запись в таблице STORMNETLOCKDATA и, пока она там существует, изменить объект может только пользователь, заблокировавший объект.

Пример можно посмотреть в статье Сервис блокировок.

Режим “только чтение” в Windows-приложениях

Режим “только чтение” в Windows-приложениях