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

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

Аналитическая форма предназначена для построения отчётов на основе выборки данных из одной или нескольких таблиц или представлений БД. Если для обыкновенной экранной формы источником данных является модель (см. Создание_документа_на_основе_модели), то для аналитической формы источником данных является запрос или Lexema_Language. Для создания аналитической формы на основе запроса необходимо выполнить следующие действия:

  • написать и отладить SQL-запрос на выборку
  • создать источник данных - запрос и настроить его параметры
  • создать экранную форму, не указывая источник данных
  • в экранной форме:
    • создать элементы управления для ввода значений параметров запроса
    • создать таблицу и настроить параметры её колонок для отображения данных - результатов запроса
    • создать кнопку и соответствующий обработчик события для выполнения запроса и отображения его результатов в таблице
  • предоставить права на созданную экранную форму
  • создать пункт меню для открытия ЭФ
  • проверить работоспособность документа


Написание и отладка SQL-запроса на выборку

Источником данных для аналитической формы, как правило, является SQL-запрос на выборку данных, написанный с помощью SQL-оператора SELECT. Подобный запрос может быть сколь угодно сложным и включать операторы соединения (JOIN) различных типов, операторы объединения (UNION) и вложенные запросы SELECT. В большинстве случаев запросы, лежащие в основе аналитической формы, содержат условия в предложении WHERE и включают параметры (переменные языка T-SQL). Впоследствии значения параметров запроса вводятся с помощью элементов управления аналитической экранной формы.

Перед сохранением запроса в виде объекта системы Lexema.ru рекомендуется отладить его текст с помощью стандартных инструментов СУБД MS SQL Server - SQL Management Studio. Например, текст запроса для выборки данных из тестовой таблицы может быть следующим:

-- объявление переменных-параметров и присвоение им значений (для отладки запроса в SQL Studio)
declare @costFrom money = 500, @costTo money = 1300
declare @isActual bit = 1
-- примечание: при переносе текста SQL-скрипта в запрос Lexema необходимо удалить или закомментировать объявление параметров
select VCode, Name, [Description], Cost, [Weight], ProduceDate, IsActual, Classifier
from ModelTest 
where (@costFrom is null or Cost >= @costFrom)
and (@costTo is null or Cost <= @costTo)
and (@isActual is null or ISNULL(IsActual, 0) = @isActual)

Результат выполнения запроса в SQL Management Studio показан на рисунке:

QueryInSqlStudio.png

Создание запроса (источника данных) в Lexema.ru

В дереве навигации в разделе Модели выберите пункт "Запросы". Создайте новый запрос с помощью кнопки «Создать документ» на панели инструментов или кнопки «Insert» на клавиатуре. Поле "Имя" является обязательным для заполнения. Выберите соответствующее пространство имён из списка.

Настройка параметров запроса

Как правило, большинство запросов содержит входные параметры - это позволяет сделать отчёт более гибким и настраивать отображение его результатов в зависимости от потребностей пользователя. В интерфейсе редактирования запросов Lexema.ru содержится таблица для указания параметров запросов, которая включает следующие поля:

  • Name - имя переменной-параметра
  • Parameter Type (Код, Наименование) - тип данных параметра
  • Select (флажок) - возможность использовать параметр в запросе на выборку
  • Update (флажок) - возможность использовать параметр в запросе на обновление
  • Insert (флажок) - возможность использовать параметр в запросе на вставку
  • Delete (флажок) - возможность использовать параметр в запросе на удаление

Пример настройки параметров запроса из предыдущего раздела показан на рисунке:

QueryParams.png

Ввод текста запроса

Интерфейс редактирования запросов Lexema.ru содержит четыре вкладки (Select, Update, Insert, Delete) для редактирования текста запросов для выполнения операций (выборки, изменения, вставки и удаления). Пример текста запроса на выборку показан на рисунке:

QueryText.png

Примечание: для обращения к параметру в тексте запроса необходимо указать его имя, начинающееся с символа @ (как к обычной переменной в T-SQL), например @name.

Предоставление прав на запрос

Для предоставления пользователям возможности работы с формой на основе запроса необходимо настроить права доступа к созданному источнику данных для одной или нескольких ролей. Для работы с этим механизмом необходимо в дереве навигации открыть раздел «Администрирование прав доступа», пункт «Роли». В списке ролей выбрать необходимую роль (например, роль Super). Откройте роль на редактирование с помощью кнопки «Открыть документ на изменение» или двойным щелчком мышки на строке.

RolesList.png

Перейдите на вкладку "Запросы", затем необходимо перейти в конец списка, в колонке "Query - Наименование" ввести название созданного ранее запроса. Поля VCode, Namespace и GlobalId заполнятся автоматически. Для предоставления текущей роли прав на создание, чтение, изменение и удаление записей необходимо соответствующим образом установить или снять галочки в столбцах Create, Read, Update и Delete. В настоящее время запросы используются исключительно для выборки данных (Read), остальные операции не реализованы. Если запрос отсутствует в списке, по умолчанию роль не обладает никакими правами доступа к результатам работы запроса.

PermissionsOnQuery.png

См. также раздел статьи

Создание экранной формы

Экранная форма может быть создана не только на основе модели, но и на основе запроса. В этом случае она может решать два комплекса взаимосвязанных задач:

  • Отображение элементов управления для установки параметров запроса
  • Отображение записей в табличной части, удовлетворяющих параметрам запроса

Для создания формы на основе запроса в дереве навигации в разделе «Представления» выберите пункт «Экранные формы». Создайте новую форму с помощью кнопки «Создать документ» на панели инструментов или с помощью клавиши «Insert» на клавиатуре. В диалоговом окне укажите платформу JsControls, снимите флажок "", выберите пункт «Источник данных», из выпадающего списка выберите запрос, созданный на предыдущем шаге.

CreateAnalyticalForm.png

После нажатия кнопки "OK" будет создана форма на основе запроса. При этом, в отличие от форм, построенных на основе модели, не будет автоматически сгенерировано имя формы, поле "Модель" также будет пустым. В дереве структуры формы автоматически создаются элементы управления для ввода значений параметров, а также таблица для отображения результатов запроса. Однако, ряд действий необходимо произвести вручную:

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

Также желательно установить заголовок окна с помощью свойства Title элемента RootItem. Структура новой аналитической формы, созданной на основе запроса, показана на рисунке:

NewAnalyticalForm.png

Создание элементов управления для ввода значений параметров запроса

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

  • Caption - подпись элемента управления

Также можно разместить элементы управления для ввода значений параметров и таблицу с результатами в разных группах:

GroupsInAnalyticalForm.png

Путём установки значения свойства Caption (заголовок) можно задать подпись группы. Например, 1-ю группу можно назвать "Параметры запроса", а 2-ю - "Результаты запроса".

Создание таблицы и настройка параметры её колонок

Корневой элемент таблицы для отображения результатов создаётся автоматически. Необходимо вручную создать и настроить её поля. Для этого необходимо нажать правой кнопкой мыши на таблицу в дереве элементов. Группа "Добавить компонент" в контекстном меню содержит несколько пунктов:

GridComponentsType.png

  • GridTextBoxColumn - столбец для отображения данных в текстовом формате
  • GridColumnGroup - группа полей. Как правило, содержит вложенные столбцы
  • GridCheckBoxColumn - столбец для отображения флажков для задания значений логических полей (типа boolean)
  • GridNumberInputColumn - столбец для отображения числовых данных
  • GridDateTimeColumn - столбец для отображения даты и времени в различном формате
  • GridLinkColumn - столбец для отображения ссылок (например, для открытия форм редактирования записи)
  • GridLookupColumn - столбец, содержащий выпадающий список, позволяющий выбирать подходящее значение
  • GridPagableLookupColumn - то же, что и GridLookupColumn, но с возможностью постраничного вывода списка значений для уменьшения времени загрузки данных

Основными свойствами столбцов таблицы являются:

  • data-lx-data-field - имя поля в модели или результатах запроса (например, VCode, Name и т.п.)
  • data-lx-text - заголовок столбца
  • data-lx-width - ширина поля в пикселях

Примечание: для выяснения имён полей в результатах запроса, а также для его проверки и отладки целесообразно воспользоваться программой MS SQL Server Managment Studion, входящей в стандартный пакет установки сервера БД MS SQL Server:

QueryInSqlStudio.png

Пример структуры элементов аналитической формы на основе приведённого выше запроса показана на рисунке:

FinalStructureOfAnalyticalForm.png

Создание скрипта для отображения данных

Для обеспечения выполнения запроса необходимо создать обработчик, привязанный к определённому событию, чаще всего к нажатию кнопки на панели инструментов или на форме. В текст обработчика необходимо внести программный код для обновления таблицы результатов запроса. Для этого в дереве элементов создайте элемент типа Button (кнопка) и установите следующие параметры:

  • data-lx-value - надпись на кнопке (например, "Выполнить запрос")
  • data-lx-width - ширина кнопки в пикселях

ButtonProperties.png

Затем перейдите на вкладку "События" справа, создайте обработчик события "onclick" (нажатие), перейдите к редактированию кода обработчика, нажав на кнопку в колонке "Редактор".

AddHandler.PNG

В открывшемся окне для редактирования кода введите следующий текст:

var qs = new L8.Data.QuerySource('test.TestModelAnalysis'),
    costFromParam = L8.View.NumberInput1.value,
    costToParam = L8.View.NumberInput2.value,
    isActualParam = L8.View.CheckBox1.value;
    
qs.load({costFrom: costFromParam, costTo: costToParam, isActual: isActualParam}).done(function (data) { 
    L8.View.Grid1.dataSource = data;
});

Предоставление прав на доступ к аналитической форме

Механизм предоставления прав на доступ к экранной форме описан в соответствующем разделе инструкции.

Создание пункта меню для доступа к форме запроса

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

Проверка работоспособности аналитической формы

Для проверки работоспособности созданного документа необходимо открыть в браузере страницу системы и авторизоваться (ввести логин и пароль). В главном меню в области "Мои документы" следует раскрыть соответствующую категорию и нажать на пункт меню.

В открывшейся форме ввести значения параметров запроса и нажать на кнопку выполнения - в таблице отобразятся результаты запроса. Пример работы аналитической формы показан на рисунке:

AnalyticalFormTest.png