Работа с вычислениями в экранной форме

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

Вычислениями в системе Lexema.ru называются программные сценарии (скрипты) на языке JavaScript, хранимые в БД бизнес-логики системы. Как правило, программные сценарии выполняются автоматически при возникновении событий (events), например, в ответ на действия пользователя. Одни фрагменты кода (функции) могут быть вызваны из других фрагментов. Таким образом, могут быть созданы библиотеки прикладного программного кода.

События, при которых могут быть выполнены программные сценарии:

  • на уровне модели - при изменении значений полей
  • на уровне экранной формы (ЭФ) и её элементов:
    • открытие ЭФ (Created)
    • получение сообщения экранной формой (GetMessage)
    • попытка закрытия ЭФ (Closing)
    • кнопка на панели инструментов (ToolbarItem) - событие при нажатии (ItemClick)
    • текстовое поле:
      • изменение значения (onchange)
      • получение фокуса (onfocus) - перевод курсора в поле с помощью мыши или клавиатуры
      • потеря фокуса (onblur)
      • нажатие клавиши на клавиатуре при редактировании поля (onkeydown)
      • отпускание клавиши на клавиатуре при редактировании поля (onkeyup)
      • onkeypress - обработчик события срабатывает, когда при редактировании поля клавиша на клавиатуре была нажата и отпущена, что эквивалентно совместному действию onkeydown и onkeyup
    • флажок (checkbox) - изменение состояния (onchange)
    • кнопка (button) - нажатие (onclick)

Процесс использования обработчиков изменения полей модели описан в соответствующей статье.

Создание обработчика открытия ЭФ (Created)

Обработчик Created автоматически запускается каждый раз при открытии экранной формы. Примеры использования данного обработчика приведены в списке ниже:

  • инициализация значений полей формы (присвоения им начальных значений)
  • блокировка некоторых элементов ЭФ (для запрета редактирования) в зависимости от каких-либо условий
  • загрузка дополнительных данных из БД, которые не загружаются автоматически в полях модели (например, для выполнения запросов с помощью QuerySource)
  • генерация реквизитов документа (например, номера договора и т.п.) при его создании или регистрации
  • подписка на изменение значений полей модели или изменение состава дочерней коллекции
  • и т.п.

Для создания обработчика открытия ЭФ необходимо открыть её для редактирования, перейти на вкладку события, в поле "Тип события" выбрать Created, нажать кнопку в колонке Редактор.

ViewCreateEvent.png

В результате будет открыто окно для редактирования исходного кода сценария. Пример скрипта, выполняемого при открытии формы приведён ниже:

ViewCreateScript.png

Исходный код в текстовом виде:

// если документ новый, то генерируем его номер
if (L8.ActionFlags.isNew) {
    // создание объекта QuerySource для работы с запросами
    var qs = new L8.Data.QuerySource('Base.GenCode');
    // выполнение запроса
    return qs.load({keyName: 'RequestTestDocNumber'}).done(function (data) {
        // если запрос вернул данные 
        if (data && data[0]) {
            // записываем номер в поле
            L8.Data.root.Number(data[0].Code);
            // открываем поле для редактирования
            L8.View.tbNumber.enabled = true;
        }
    });
} else {
    // запрещаем редактирование поля
    L8.View.tbNumber.enabled = false;
}

Внимание! После добавления обработчиков событий ЭФ необходимо сохранить как сами скрипты, так и всю экранную форму.

Подробнее событие Created описано в разделе статьи События экранной формы.

Создание обработчика получения экранной формой сообщения (GetMessage)

Обработчик события получения экранной формой сообщения от системы сообщений создаётся способом, аналогичным созданию обработчика Created, за исключением того, что в поле "Тип события" необходимо выбрать значение GetMessage.

Событие GetMessage подробнее описано в разделе статьи События экранной формы.

Создание обработчика закрытия ЭФ (Closing)

Обработчик Closing автоматически вызывается каждый раз перед закрытием экранной формы. Примеры использования данного обработчика приведены в списке ниже:

  • валидация полей формы (проверка корректности введённых значений)

Обработчик события закрытия ЭФ создаётся способом, аналогичным созданию обработчика Created, за исключением того, что в поле "Тип события" необходимо выбрать значение Closing.

Пример скрипта, выполняемого при закрытии формы приведён ниже:

var isClosingCanceled  = false,
    errorMsg = '';

if (!L8.Data.root.Sum()) {
    errorMsg += 'Не заполнена сумма\n';
    isClosingCanceled = true;
}

if (!L8.Data.root.Count()) {
    errorMsg += 'Не заполнено количество\n';
    isClosingCanceled = true;
}

if (errorMsg) {
    alert('При редактировании документа допущены ошибки: \n' + errorMsg);
}

return isClosingCanceled;

Подробнее событие Closing описано в разделе статьи События экранной формы.

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

Обращение к свойствам элементов формы в скриптах

Для обращения к свойствам элементов управления экранной формы из программных сценариев необходимо использовать объект L8.View и указать имя контрола, которое задаётся в дизайнере приложения с помощью свойства id. При установке данного свойства следует придерживаться правил именования объектов. Например, если текстовому полю для ввода номера документа назначен идентификатор tbNumber, то для обращения к данному контролу необходимо использовать конструкцию L8.View.tbNumber, а для доступа к его свойству требуется указать его название. Например, для считывания и изменения доступности поля для редактирования необходимо указать:

// считывание значения свойства поля
if (L8.View.tbNumber.readOnly) { ... }

// установка значения свойства поля
L8.View.tbNumber.readOnly = true;

Полный перечень свойств элементов управления перечислен в статьях, посвящённых соответствующим контролам (см. категорию Контролы).

Обращение к свойствам модели данных в скриптах