Creatio development guide
Это документация Creatio версии 7.10.0. Мы рекомендуем использовать новую версию документации.

Работа с фильтрами EntitySchemaQuery

Glossary Item Box

Фильтр - это набор условий, применяемых при отображении данных запроса. В терминах SQL фильтр представляет собой отдельный предикат (условие) оператора WHERE.  

Создание и применение фильтров в EntitySchemaQuery

Для создания простого фильтра в EntitySchemaQuery используется метод CreateFilter(), который возвращает созданный объект фильтра Terrasoft.CompareFilter. Наряду с простыми фильтрами, в EntitySchemaQuery реализованы методы создания фильтров специального вида (табл. 1).

Табл. 1. — Методы EntitySchemaQuery для создания фильтров

Метод создания фильтра Описание
createFilter(comparisonType, leftColumnPath, rightColumnPath)

Создает экземпляр фильтра класса Terrasoft.CompareFilter для сравнения значений двух колонок.

comparisonType Terrasoft.ComparisonType Тип операции сравнения.
leftColumnPath String Путь к проверяемой колонке относительно корневой схемы rootSchema.
rightColumnPath String Путь к колонке-фильтру относительно корневой схемы rootSchema.
createInFilter(leftExpression, rightExpressions)

Создает экземпляр In-фильтра.

leftExpression Terrasoft.BaseExpression Выражение, проверяемое в фильтре.
rightExpressions Terrasoft.BaseExpression[] Массив выражений, которые будут сравниваться с leftExpression.
createBetweenFilter(leftExpression, rightLessExpression, rightGreaterExpression)

Создает экземпляр Between-фильтра.

leftExpression Terrasoft.BaseExpression Выражение, проверяемое в фильтре.
rightLessExpression Terrasoft.BaseExpression Начальное выражение диапазона фильтрации.
rightGreaterExpression Terrasoft.BaseExpression Конечное выражение диапазона фильтрации.
createCompareFilter(comparisonType, leftExpression, rightExpression)

Создает экземпляр Compare-фильтра.

comparisonType Terrasoft.ComparisonType Тип операции сравнения.
leftExpression Terrasoft.BaseExpression Выражение, проверяемое в фильтре.
rightExpression Terrasoft.BaseExpression Выражение фильтрации.
createExistsFilter(columnPath)

Создает экземпляр Exists-фильтра для сравнения типа [Существует по заданному условию] и устанавливает в качестве проверяемого значения выражение колонки, расположенной по заданному пути.

columnPath String Путь к колонке, для выражения которой строится фильтр.
createIsNotNullFilter(leftExpression)

Создает экземпляр IsNull-фильтра.

leftExpression Terrasoft.BaseExpression Выражение, которое проверяется по условию IS NOT NULL.
createIsNullFilter(leftExpression)

Создает экземпляр IsNull-фильтра.

leftExpression Terrasoft.BaseExpression Выражение, которое проверяется по условию IS NULL.
createNotExistsFilter(columnPath)

Создает экземпляр Exists-фильтра для сравнения типа [Не существует по заданному условию] и устанавливает в качестве проверяемого значения выражение колонки, расположенной по заданному пути.

columnPath String Путь к колонке, для выражения которой строится фильтр.
createColumnFilterWithParameter(comparisonType, columnPath, paramValue)

Создает экземпляр Compare-фильтра для сравнения колонки с заданным значением.

comparisonType Terrasoft.ComparisonType Тип операции сравнения.
columnPath String Путь к проверяемой колонке относительно корневой схемы rootSchema.
paramValue Mixed Значение параметра.
createColumnInFilterWithParameters(columnPath, paramValues)

Создает экземпляр In-фильтра для проверки совпадения значения заданной колонки со значением одного из параметров.

columnPath String Путь к проверяемой колонке относительно корневой схемы rootSchema.
paramValues Array Массив значений параметров.
createColumnBetweenFilterWithParameters(columnPath, lessParamValue, greaterParamValue)

Создает экземпляр Between-фильтра для проверки попадания колонки в заданный диапазон.

columnPath String Путь к проверяемой колонке относительно корневой схемы rootSchema.
lessParamValue Mixed Начальное значение фильтра.
greaterParamValue Mixed Конечное значение фильтра.
createColumnIsNotNullFilter(columnPath)

Создает экземпляр IsNull-фильтра для проверки заданной колонки.

columnPath String Путь к проверяемой колонке относительно корневой схемы rootSchema.
createColumnIsNullFilter(columnPath)

Создает экземпляр IsNull-фильтра для проверки заданной колонки.

columnPath String Путь к проверяемой колонке относительно корневой схемы rootSchema.
createPrimaryDisplayColumnFilterWithParameter(comparisonType, paramValue)

Создает объект фильтра для сравнения первичной колонки для отоборажения со значением параметра.

comparisonType Terrasoft.ComparisonType Тип сравнения.
paramValue Mixed Значение параметра.

Экземпляр EntitySchemaQuery имеет свойство filters, которое представляет собой коллекцию фильтров данного запроса (экземпляр класса Terrasoft.FilterGroup, который, в свою очередь, представляет собой  коллекцию элементов Terrasoft.BaseFilter). Для того, чтобы добавить фильтр в запрос, необходимо:

  • создать экземпляр фильтра для данного запроса (метод createFilter(), методы создания фильтров специального вида);
  • добавить созданный экземпляр фильтра в коллекцию фильтров запроса (метод add() коллекции).

По умолчанию все фильтры, добавляемые в коллекцию filters, объединяются между собой логической операцией AND. Свойство logicalOperation коллекции filters позволяет пользователю указать логическую операцию, которой необходимо объединять фильтры. Свойство принимает значения из перечисления Terrasoft.core.enums.LogicalOperatorType:

  • AND — И
  • OR — Или

В запросах EntitySchemaQuery реализована возможность управления фильтрами, участвующими в построении результирующего набора данных. Каждый элемент коллекции filters имеет свойство isEnabled, которое определяет, участвует ли данный элемент в построении результирующего запроса (true — участвует, false — не участвует). Аналогичное свойство isEnabled также определено для всей коллекции filters. Установив это свойство в false, можно полностью отключить фильтрацию для запроса, при этом коллекция фильтров запроса останется неизменной. Таким образом, изначально сформировав коллекцию фильтров запроса, в дальнейшем можно использовать различные комбинации для фильтрации этого запроса, не внося изменений в саму коллекцию.

Пример управления фильтрами в запросе приведен ниже (пример 1).

Пример 1

// Создание экземпляра запроса с корневой схемой "Contact". 
var esqContact = Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "Contact"
});
esqContact.addColumn("Name");
esqContact.addColumn("Country.Name", "CountryName");

// Создание экземпляра первого фильтра.
var esqFirstFilter = esqContact.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Country.Name", "Украина");

// Создание экземпляра второго фильтра.
var esqSecondFilter = esqContact.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Country.Name", "Россия");

// Фильтры в коллекции фильтров запроса будут объединяться логическим оператором OR. 
esqContact.filters.logicalOperation = Terrasoft.LogicalOperatorType.OR;

// Добавление созданных фильтров в коллекцию запроса. 
esqContact.filters.add("esqFirstFilter", esqFirstFilter);
esqContact.filters.add("esqSecondFilter", esqSecondFilter);

// В данную коллекцию попадут объекты - результаты запроса, отфильтрованные по двум фильтрам.
esq.getEntityCollection(function (result) {
    if (result.success) {
        result.collection.each(function (item) {
            // Обработка элементов коллекции.
        });
    }
}, this);

// Для второго фильтра указывается, что он не будет участвовать в построении результирующего запроса.
// При этом данный фильтр не удаляется из коллекции фильтров запроса.
esqSecondFilter.isEnabled = false;

// В данную коллекцию попадут объекты - результаты запроса, отфильтрованные только по первому фильтру.
esq.getEntityCollection(function (result) {
    if (result.success) {
        result.collection.each(function (item) {
            // Обработка элементов коллекции.
        });
    }
}, this);

Формирование путей колонок в фильтрах EntitySchemaQuery осуществляется в соответствии с общими правилами построения путей к колонкам относительно корневой схемы (описано в статье "Построение путей к колонкам относительно корневой схемы").

Ниже приведен пример, демонстрирующий использование других методов создания фильтров.

Пример 2

// Создание экземпляра запроса с корневой схемой "Contact". 
var esqContact = Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "Contact"
});
esqContact.addColumn("Name");
esqContact.addColumn("Country.Name", "CountryName");

// Выбираем все контакты, в которых не указана страна.
var esqFirstFilter = esqContact.createColumnIsNullFilter("Country");

// Выбираем все контакты, даты рождения которых находятся в промежутке между 1.01.1970 и 1.01.1980
var dateFrom = new Date(1970, 0, 1, 0, 0, 0, 0);
var dateTo = new Date(1980, 0, 1, 0, 0, 0, 0);
var esqSecondFilter = esqContact.createColumnBetweenFilterWithParameters("BirthDate", dateFrom, dateTo);

// Добавление созданных фильтров в коллекцию запроса. 
esqContact.filters.add("esqFirstFilter", esqFirstFilter);
esqContact.filters.add("esqSecondFilter", esqSecondFilter);

// В данную коллекцию попадут объекты - результаты запроса, отфильтрованные по двум фильтрам.
esq.getEntityCollection(function (result) {
    if (result.success) {
        result.collection.each(function (item) {
            // Обработка элементов коллекции.
        });
    }
}, this);

Смотрите также

© Terrasoft 2002-2017.

Был ли данный материал полезен?

Как можно улучшить эту статью?