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}