[ELMA3] ELMA-SQL
Описание
Для создания запросов в источниках данных отчетов можно использовать язык генерации текста. Он позволяет включать синтаксические конструкции, упрощающие работу с параметрами и объектами системы.
Перечисления
Для получения константы значения перечисления в SQL запросе, независимо от языка БД используется синтаксическая конструкция {#EnumSQL.%ИмяПеречисления%.%ИмяЗначенияПеречисления%}
Для получения константы значения перечисления в HQL запросе используется синтаксическая конструкция {#Enum.%ИмяПеречисления%.%ИмяЗначенияПеречисления%}.
Например, для выбора всех заблокированных пользователей можно выполнить следующий запрос:
1 2 3 | SELECT * FROM [ User ] WHERE [ User ].Status = {#EnumSQL.UserStatus.Blocked} |
В случае, если значение перечисления является Uid, генератор текста автоматически преобразует его к виду соответствующему языку текущей БД.
Типы сущностей
Для указания в запросе Uid’ов типов сущностей можно использовать синтаксическую конструкцию {#Type.%ИмяТипаСущности%}.
При выполнении запроса она будет заменена на Uid сущности, преобразованного в соответствии с языком текущей БД.
Например, для выбора истории для поручений можно выполнить следующий запрос:
1 2 3 | SELECT * FROM [EntityActionHistory] WHERE [EntityActionHistory].ActionObjectUid = {#Type.Task} |
Действия сущностей
Для указания в запросе Uid’ов действий сущностей можно использовать синтаксическую конструкцию {#Action.%ИмяТипаСущности%.%ИмяСобытия%}.
При выполнении запроса она будет заменена на Uid действия сущности, преобразованного в соответствии с языком текущей БД.
Например, для выбора истории выполнения задач для поручений можно выполнить следующий запрос:
1 2 3 | 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}
будут возвращать одно значение.
Параметры
Для обращения к простым параметрам отчета из запросов можно использовать синтаксическую конструкцию{$%ИмяПараметра%
}.
Для обращения к свойствам параметров отчета из запросов можно использовать синтаксическую конструкцию{$%ИмяПараметра%.%ИмяСвойства%}.
Например, для формирования скрипта в зависимости от выбранного метода скрипта и пользователя можно выполнить следующий запрос:
1 2 3 | 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}.
Например, для выбора полного имени пользователя или его логина, в зависимости от указанного параметра, можно выполнить следующий запрос:
1 2 3 4 5 6 7 | {if {$ Check } = True } SELECT "User" .FullName ShowName FROM "User" { else } SELECT "User" .UserName ShowName FROM "User" { end if} |