Введение#
Для выполнения произвольного sql-запроса в Лексеме существует такой инструмент как «Запрос». Как и модель, запрос может быть источником данных для выпадающего списка (lookup).
Запросы позволяют более гибко (по сравнению с моделями) работать с данными, но следует учитывать, что в таком случае от прикладного программиста может потребоваться более детальный и внимательный подход к проектированию и реализации функционала.
Запрос состоит из файла с описанием (.query.json) и файла(-ов) c sql-запросом (.sql), которые располагаются в каталоге проекта queries.
Свойства#
Файл query.json содержит описание объекта, которое может иметь следующие свойства:
| Наименование | Тип | Описание | Обязательное |
|---|---|---|---|
| rights | Объект | Права доступа для данного объекта. | Да |
| parameters | Объект | Параметры запроса. | nan |
| select, insert, update, delete | Объект | Описывают для каждого типа действия текст запроса и доступные параметры. Запрос должен содержать как минимум одно из этих свойств. | Да |
Rights#
Описывает права для данного объекта. Представляет собой объект. Для каждого действия (create, read, update, delete) задается массив ролей, для которых это действие будет доступно.
Пример:
В примере чтение данных доступно только для ролей super и manager, остальные действия не доступны ни для одной роли.
Parameters#
Описывает параметры запроса. Представляет собой объект. Каждый параметр представляется в виде «имя параметра: имя типа». Имя типа берется из словаря примитивов и является регистрозависимым значением. В примере у запроса два параметра: параметр с именем VCode и типом bigint и параметр с именем test и типом string.
Пример
Примитивы:
select, insert, update, delete#
Описывают для каждого типа действия текст запроса и доступные параметры. Представляют собой объекты. Запрос должен содержать как минимум одно из этих свойств.
Содержит свойства:
- text – ссылка на файл с текстом sql-запроса
- parameters – массив передаваемых в запрос параметров из объекта parameters.
В качестве значения свойства text указывается относительный путь к файлу с sql-скриптом, а в качестве значения свойства parameters в виде массива указываются имена параметров из объекта parameters запроса.
Пример
Файл getStorage.query.json
Файл getStorage.sql
В данном примере запрос выполнит sql-скрипт из файла getStorage.sql, передав туда параметр vcode. В sql-скрипте он будет инициализирован как переменная @vcode типа bigint. Поэтому в sql-скрипте не должно быть инициализации переменной с таким именем, иначе это может привести к ошибке.
Выполнение#
В Лексеме выполнение запроса реализовано с помощью класса QuerySource. При создании экземпляра этого класса в конструктор надо передать запрос. После применить одну из следующих функций:
- load
- insert
- delete
- update
Функция принимает в качестве параметра объект со свойствами, описанными в parameters.
Функции асинхронные, поэтому возвращают объект типа deferred (см. документацию к библиотеке jQuery https://api.jquery.com ).
Пример
Примеры#
- Запрос возвращает код и имя всех контрагентов.
Файл allContractors.query.json:
Файл allContractors_select.sql:
- Запрос возвращает код и имя контрагента по заданному в качестве параметра коду.
Файл getContractor.query.json:
Файл getContractor_select.sql: