JPQL-запрос в источнике данных может содержать параметры нескольких видов. Вид параметра определяется по префиксу имени параметра. Префиксом является часть имени до знака "$". Интерпретация имени после "$" рассматривается ниже.
-
Значением параметра являются данные другого источника данных, зарегистрированного в этом же
DsContext
. Например:<collectionDatasource id="customersDs" class="com.sample.sales.entity.Customer" view="_local"> <query> select c from sales$Customer c </query> </collectionDatasource> <collectionDatasource id="ordersDs" class="com.sample.sales.entity.Order" view="_local"> <query> select o from sales$Order o where o.customer.id = :ds$customersDs </query> </collectionDatasource>
В данном случае параметром запроса источника данных
ordersDs
будет текущий экземпляр сущности, находящийся в источнике данныхcustomersDs
.При использовании параметров с префиксом
ds
между источниками данных автоматически создаются зависимости, приводящие к обновлению источника если меняется значение его параметра. В приведенном примере если изменяется выбранный Покупатель, автоматически обновляется список его Заказов.Обратите внимание, что в примере запроса с параметром левой частью оператора сравнения является значение идентификатора
o.customer.id
, а правой - экземплярCustomer
, содержащийся в источникеcustomersDs
. Такое сравнение допустимо, так как при выполнении запроса на Middleware реализация интерфейсаQuery
, присваивая значения параметрам запроса, автоматически подставляет ID сущности вместо переданного экземпляра сущности.В имени параметра после префикса и имени источника может быть также указан путь по графу сущностей к атрибуту, из которого нужно взять значение, например:
<query> select o from sales$Order o where o.customer.id = :ds$customersDs.id </query>
или
<query> select o from sales$Order o where o.tagName = :ds$customersDs.group.tagName </query>
-
Префикс
custom
.Значение параметра будет взято из объекта
Map<String, Object>
, переданного в методrefresh()
источника данных. Например:<collectionDatasource id="ordersDs" class="com.sample.sales.entity.Order" view="_local"> <query> select o from sales$Order o where o.number = :custom$number </query> </collectionDatasource>
Map<String, Object> params = new HashMap<>(); params.put("number", "1"); ordersDs.refresh(params);
Приведение экземпляра при необходимости к его идентификатору осуществляется аналогично параметрам с префиксом
ds
. Путь по графу сущностей в имени параметра в данном случае не поддерживается. -
Префикс
param
.Значение параметра будет взято из объекта
Map<String, Object>
, переданного при открытии экрана в методinit()
контроллера.Приведение экземпляра при необходимости к его идентификатору осуществляется аналогично параметрам с префиксом
ds
. Поддерживается путь к атрибуту по графу сущностей в имени параметра. -
Префикс
component
.Значением параметра будет текущее значение визуального компонента, путь к которому указан в имени параметра. Например:
<query> select o from sales$Order o where o.number = :component$filter.orderNumberField </query>
Путь к компоненту должен включать все вложенные фреймы.
Приведение экземпляра при необходимости к его идентификатору аналогично параметрам
ds
. Поддерживается путь к атрибуту по графу сущностей в имени параметра как продолжение пути к компоненту. -
Префикс
session
.Значением параметра будет значение атрибута пользовательской сессии, указанного в имени параметра.
Значение извлекается методом
UserSession.getAttribute()
, поэтому поддерживаются также предопределенные имена атрибутов сессии:-
userId
- ID текущего зарегистрированного или замещенного пользователя; -
userLogin
- логин текущего зарегистрированного или замещенного пользователя в нижнем регистре.
Пример:
<query> select o from sales$Order o where o.createdBy = :session$userLogin </query>
Приведение экземпляра при необходимости к его идентификатору аналогично параметрам
ds
. Путь по графу сущностей в имени параметра в данном случае не поддерживается. -
Если значение параметра не найдено по правилам, задаваемым префиксом, для данного параметра устанавливается значение null
. То есть если, например, в запросе указан параметр с именем param$some_name
, а в мэп параметров экрана нет ключа some_name
, то для параметра param$some_name
устанавливается значение null
.