Публикация

Как сделать фильтрацию поля по Exists фильтру с параметром (значение другого поля)

Вопрос

Как сделать фильтрацию поля по Exists фильтру с параметром (значение другого поля)?

Ответ

Пример реализации exists-фильтра с фильтрацией:

var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
    "rootSchemaName": "Account"
});
// добавляем колонки запроса
esq.addColumn("Id");
...
// условие фильтрации для использования внутри exists
// searchValue - значение для сравнения с колонкой SearchNumber
var subFilters = Terrasoft.createFilterGroup();
subFilters.addItem(Terrasoft.createColumnFilterWithParameter(
    Terrasoft.ComparisonType.EQUAL, "SearchNumber", searchValue));
// добавляем exists-фильтр с условием в коллекцию фильтров esq
var filters = esq.filters;
filters.add(Terrasoft.createExistsFilter("[AccountCommunication:Account:Id].Id", subFilters));
//получаем значение запроса
esq.getEntityCollection(function(result) {
...
}, this);

В результате на сервер будет отправлен примерно такой запрос:

SELECT Id, ... FROM Account
WHERE EXISTS 
(SELECT
[SubAccountCommunication].[Id] [Id]
FROM
[dbo].[AccountCommunication] [SubAccountCommunication] WITH(NOLOCK)
WHERE
[SubAccountCommunication].[AccountId] = [Account].[Id]
AND [SubAccountCommunication].[SearchNumber] = @P1
)

Параметр @P1 будет хранить значение searchValue, которое мы передавали в условие фильтрации.

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать