Использование событий модели

Материал из Lexema.ru
Перейти к: навигация, поиск

Средства прикладной разработки системы Lexema.ru предоставляют возможность для каждой модели создавать SQL-скрипты, выполняемые автоматически при выполнении запросов к записям модели. Существует 4 типа запросов, на которые могут быть назначены обработчики:

  • Insert - вставка новых записей
  • Update - изменение существующих записей
  • Delete - удаление записей
  • Select - выборка записей

Скрипты-обработчики событий модели могут применяться для решения задач разного рода:

  • проверка корректности значений полей записи (валидация)
  • генерация номера документа при создании новой записи (на Insert)
  • журналирование (логгирование)
  • профилирование производительности
  • разделение прав доступа
  • и т.п.

Создание обработчиков событий модели

В дереве навигации слева раскройте группу Модели, выберите пункт Модели. В списке найдите нужную модель, откройте её для редактирования двойным щелчком левой кнопки мыши по строке или с помощью кнопки "Открыть на изменение" на панели инструментов на вкладке "Документ" слева вверху.

В форме редактирования модели перейдите на вкладку "События":

ModelEventsTab.png

В списке в поле QueryType выберите необходимый тип запроса. Для редактирования текста SQL-скрипта нажмите на кнопку в поле "Редактировать". В открывшемся окне введите код обработчика события. Например:

EditModelEventHandlerCode.png

Размер окна для редактирования кода может быть увеличен путём перетаскивания правого нижнего угла окна за специальный маркер - это даст возможность видеть большее кол-во строк без прокрутки, что актуально при редактировании больших скриптов.

Логика работы обработчиков

Обработчики событий модели выполняются автоматически при выполнении соответствующих запросов. Если требуется запретить выполнение текущей операции, необходимо сгенерировать сообщение об ошибке с помощью системной инструкции Raiserror. Без её вызова текущая операция будет выполнена.

Обращение к значениям полей

При выполнении обработчика события модели для всех её полей автоматически создаются локальные переменные, содержащие значения полей текущей записи. Название переменных совпадают с именами полей. Перед именем ставится знак "@". Например, если поле называется DocumentNumber, то имя соответствующей локальной переменной будет @DocumentNumber.

Например, для запрета сохранения документа, в котором не заполнено обязательное поле Name, можно использовать SQL-конструкцию вида:

if ISNULL(LTrim(RTRim(@Name)), '') = '' 
raiserror('Наименование документа не может быть пустым!', 16, 1)

Примечание: для проверки значения на пустоту следует использовать функцию ISNULL.

Вывод сообщения об ошибке

Для вывода сообщения об ошибке и прерывания текущей операции необходимо вызвать системную инструкцию СУБД MS SQL Server - Raiserror со следующими параметрами:

Raiserror('<ТЕКСТ СООБЩЕНИЯ>', 16, 1)

В этом случае текст сообщения отобразится на странице приложения в специальном блоке "Инфо" в правом верхнем углу:

ErrorMessageOnPanel.png

Данный механизм является стандартным и предпочтительным способом информирования пользователя об ошибке. Примечание: подобное сообщение может быть также выведено путём вызова системного метода JavaScript.

Проверка работоспособности обработчиков

Откройте экранную форму на модели, для которой был создан обработчик события. Выполните действие, приводящее к выполнению запроса, на который назначен обработчик. Например, для модели данного документа на запрос INSERT назначен обработчик, проверяющий заполненность поле Наименование (Name). При попытке сохранить документ с пустым полем Name выводится сообщение об ошибке и операция прерывается:

TestingModelHandler.png