Урок 16. Режим блокировки форм (Lock)
Last updated
Last updated
В платформе WT предусмотрен механизм блокировки формы в момент выполнения долгих и критически важных команд. Этот механизм не позволяет пользователю изменять данные или повторно запускать команду. Примером таких команд могут быть команды сохранения данных, команды сложных расчетов или команды взаимодействия со сторонними сервисами.
Если хотите начать практику с этого урока, то вам необходимо развернуть учебный проект по инструкции в статье Разворачивание проекта.
При разворачивании проекта используйте backup базы данных, который можете найти в архиве из раздела Ответы прошлого урока. Скопируйте папки Forms, Workflow и Patterns в папку с развернутым проектом, например, в папку D:\WT\Projects\Template\Projects\1. Template.
Инструкция по подключению шаблонов находится по ссылке.
По умолчанию форма не блокируется в момент выполнения команды, что может привести к непредсказуемым последствиям.
Например, на форме сущности сохранение разбито на несколько команд. Первая команда может выполняться достаточно долго. И так как интерфейс формы не блокируется, то пользователь может вносить какие-либо изменения в данные на форме. Эти изменения могут частично сохраняться в первой команде и частично в последующих командах. Как следствие, теряется целостность данных в таблицах в базе данных.
Вторая неприятная ситуация заключается в том, что при выполнении долгой команды пользователь может повторно инициировать выполнение этой команды. Например, второй раз нажать на кнопку сохранения. Повторное выполнение команды сохранения приведет к дублированию записей в таблице в базе данных.
Чтобы таких ситуаций не возникало, необходимо блокировать графический интерфейс формы. Первый способ: создать переменную Variable для определения тэгов <Enabled>
у объектов формы и менять ее значение в начале последовательности команд и по ее завершению. Второй способ: использовать режим блокировки формы.
Чтобы перевести форму в режим блокировки необходимо использовать один из доступных видов Lock:
Вложенный тэг <Lock>
у команды;
Атрибут Lock
у тэгов <If>
, <Then>
и <Else>
.
Режим блокировки формы заключается в том, что при запуске команды с тэгом <Lock>
или последовательности команд с атрибутом Lock
форма переводится в особый режим. В этом режиме пользователь может просматривать содержимое полей формы, но любой клик по форме вызовет отображение панели блокировки:
<Lock>
у командыЕго следует использовать во всех командах типа SaveCommand.
Например, в карточке заказа (TemplateOrderEdit.xml):
Lock
у тэга <Commands>
На форме карточки счета (TemplateAccountEdit.xml), где сохранение происходит двумя командами (AccountUpdateSaveCommand и AccountInsertSaveCommand), будет удобнее использовать атрибут Lock
у тэга <Commands>
внутри команды SaveSequentialCommand:
Lock
у тэгов <If>
, <Then>
и <Else>
На форме карточки счета (TemplateAccountEdit.xml) в команде SaveSequentialCommand можно использовать и этот вариант, так как основная логика находится в блоке <If>
:
Проставьте на всех формах, где это необходимо, настройку Lock.
В архиве присутствуют xml-файлы форм и серверный xml-файл, а также бэкап базы данных - с помощью файлов можете проверить себя.