[ELMA3] ELMA-SQL
Описание
Для создания запросов в источниках данных отчетов можно использовать язык генерации текста. Он позволяет включать синтаксические конструкции, упрощающие работу с параметрами и объектами системы.
Перечисления
Для получения константы значения перечисления в SQL запросе, независимо от языка БД используется синтаксическая конструкция {#EnumSQL.%ИмяПеречисления%.%ИмяЗначенияПеречисления%}
Для получения константы значения перечисления в HQL запросе используется синтаксическая конструкция {#Enum.%ИмяПеречисления%.%ИмяЗначенияПеречисления%}.
Например, для выбора всех заблокированных пользователей можно выполнить следующий запрос:
SELECT * FROM [User] WHERE [User].Status = {#EnumSQL.UserStatus.Blocked}
В случае, если значение перечисления является Uid, генератор текста автоматически преобразует его к виду соответствующему языку текущей БД.
Типы сущностей
Для указания в запросе Uid’ов типов сущностей можно использовать синтаксическую конструкцию {#Type.%ИмяТипаСущности%}.
При выполнении запроса она будет заменена на Uid сущности, преобразованного в соответствии с языком текущей БД.
Например, для выбора истории для поручений можно выполнить следующий запрос:
SELECT * FROM [EntityActionHistory] WHERE [EntityActionHistory].ActionObjectUid = {#Type.Task}
Действия сущностей
Для указания в запросе Uid’ов действий сущностей можно использовать синтаксическую конструкцию {#Action.%ИмяТипаСущности%.%ИмяСобытия%}.
При выполнении запроса она будет заменена на Uid действия сущности, преобразованного в соответствии с языком текущей БД.
Например, для выбора истории выполнения задач для поручений можно выполнить следующий запрос:
SELECT * FROM [EntityActionHistory] WHERE [EntityActionHistory].ActionObjectUid = {#Type.Task} AND [EntityActionHistory].ActionTypeUid = {#Action.Task.Complete}
При использовании конструкции #Action следует учитывать, что Uid действия для сущности и ее наследников один и тот же. Например {#Action.TaskBase.Complete}
, {#Action.Task.Complete}
и {#Action.ProjectTask.Complete}
будут возвращать одно значение.
Параметры
Для обращения к простым параметрам отчета из запросов можно использовать синтаксическую конструкцию{$%ИмяПараметра%
}.
Для обращения к свойствам параметров отчета из запросов можно использовать синтаксическую конструкцию{$%ИмяПараметра%.%ИмяСвойства%}.
Например, для формирования скрипта в зависимости от выбранного метода скрипта и пользователя можно выполнить следующий запрос:
SELECT CAST(’javascript: {$Stroka}({$Poljzovatelj.Id})’ as varchar(100)) UsersLinks FROM "User" WHERE "User".ID = {$Poljzovatelj.Id}
Инструкции выбора IF-ELSE
Для формирования кода запроса можно использовать инструкции выбора if-else:{if %Условие%} %ДействияПриВыполненииУсловия% {end if}
или{if %Условие%} %ДействияПриВыполненииУсловия% {else} %ДействияПриНеВыполненииУсловия% {end if}.
Например, для выбора полного имени пользователя или его логина, в зависимости от указанного параметра, можно выполнить следующий запрос:
{if {$Check} = True} SELECT "User".FullName ShowName FROM "User" {else} SELECT "User".UserName ShowName FROM "User" {end if}