propertyFilter

propertyFilter фильтрует данные по атрибуту сущность.

XML-элемент

propertyFilter

Java-класс

PropertyFilter

Основы

В простейшем виде propertyFilter состоит из поля ввода, перед которым указаны имя фильтруемого атрибута и используемая операция.

<data>
    <collection id="ordersDc"
                class="io.jmix.uisamples.entity.Order"
                fetchPlan="_local">
        <loader id="ordersDl">
            <query>
                <![CDATA[select e from uisamples_Order e]]>
            </query>
        </loader>
    </collection>
</data>
<facets>
    <dataLoadCoordinator auto="true"/>
</facets>
<layout>
    <propertyFilter property="amount"
                    operation="GREATER_OR_EQUAL"
                    dataLoader="ordersDl"/>
    <dataGrid id="orderDataGrid"
              dataContainer="ordersDc"
              width="100%"
              minHeight="20em">
        <columns>
            <column property="date"/>
            <column property="customer"/>
            <column property="amount"/>
            <column property="description"/>
        </columns>
    </dataGrid>
</layout>

Этот компонент фильтрует данные, загруженные в контейнер данных. Он часто используется вместе с компонентами dataGrid или treeDataGrid, которые связаны с тем же контейнером. Такая комбинация позволяет точно управлять отображаемыми строками.

Операции фильтрации

Компонент поддерживает множество операций фильтрации. Можно выбрать одну операцию или разрешить пользователям менять её во время выполнения с помощью атрибута operationEditable.

<data>
    <collection id="customersDc"
                class="io.jmix.uisamples.entity.Customer"
                fetchPlan="_local">
        <loader id="customersDl">
            <query>
                <![CDATA[select e from Customer e]]>
            </query>
        </loader>
    </collection>
</data>
<facets>
    <dataLoadCoordinator auto="true"/>
</facets>
<layout>
    <propertyFilter id="propertyFilter"
                    property="name"
                    operation="CONTAINS"
                    operationEditable="true"
                    dataLoader="customersDl"/>
    <dataGrid id="customersDataGrid"
              dataContainer="customersDc"
              width="100%"
              minHeight="20em">
        <columns>
            <column property="name"/>
            <column property="lastName"/>
            <column property="age"/>
            <column property="active"/>
            <column property="grade"/>
        </columns>
    </dataGrid>
</layout>

Список доступных операций зависит от типа свойства.

propertyFilter связанный с данными

В dataLoader укажите загрузчик, к которому применяется propertyFilter, а в property — атрибут сущности для условия. Загрузчик может заполнять контейнер коллекции или контейнер ключ-значение.

Контейнер коллекции

В следующем примере propertyFilter настраивается для работы с контейнером коллекции:

<data>
    <collection id="ordersDc"
                class="io.jmix.uisamples.entity.Order"
                fetchPlan="_local">
        <loader id="ordersDl">
            <query>
                <![CDATA[select e from uisamples_Order e]]>
            </query>
        </loader>
    </collection>
</data>
<facets>
    <dataLoadCoordinator auto="true"/>
</facets>
<layout>
    <propertyFilter property="amount"
                    operation="GREATER_OR_EQUAL"
                    dataLoader="ordersDl"/>
    <dataGrid id="orderDataGrid"
              dataContainer="ordersDc"
              width="100%"
              minHeight="20em">
        <columns>
            <column property="date"/>
            <column property="customer"/>
            <column property="amount"/>
            <column property="description"/>
        </columns>
    </dataGrid>
</layout>

Контейнер Key-Value

В следующем примере propertyFilter настраивается для работы с контейнером коллекции ключ-значение:

<data>
    <keyValueCollection id="customersDc">
        <loader id="customersDl">
            <query>
                <![CDATA[select o.customer.name, o.customer.lastName, sum(o.amount) from uisamples_Order o group by o.customer]]>
            </query>
        </loader>
        <properties>
            <property datatype="string" name="name"/>
            <property datatype="string" name="lastName"/>
            <property datatype="decimal" name="sum"/>
        </properties>
    </keyValueCollection>
</data>
<facets>
    <dataLoadCoordinator auto="true"/>
</facets>
<layout>
    <propertyFilter id="propertyFilter"
                    label="Name contains"
                    property="name"
                    operation="CONTAINS"
                    dataLoader="customersDl"/>
    <dataGrid id="customersDataGrid"
              dataContainer="customersDc"
              width="100%"
              minHeight="20em">
        <columns>
            <column property="name"
                    header="Name"/>
            <column property="lastName"
                    header="Last name"/>
            <column property="sum"
                    header="Sum"/>
        </columns>
    </dataGrid>
</layout>

Множественная фильтрация

Привязка нескольких компонентов propertyFilter к одному контейнеру данных позволяет применять несколько условий фильтрации одновременно. Например, можно использовать два компонента для фильтрации по отделу и фамилии:

<hbox>
    <propertyFilter dataLoader="usersDl"
                    operation="EQUAL"
                    property="department"/>
    <propertyFilter dataLoader="usersDl"
                    operation="CONTAINS"
                    property="lastName"/>
</hbox>

Фильтрация по дате

Фильтрация по дате без учета времени

Операция сравнения = не всегда подходит для свойств с типом Date/Time. Для сравнения только по дате (без учета времени), вместо = используйте date equals:

Фильтрация по временному интервалу

Компонент предоставляет несколько способов фильтрации по интервалам дат. Выберите оператор in interval и укажите значения интервала в диалоговом окне.

Доступные опции:

  • Прошедший период: интервалы вида «последние 3 месяца» или «последние 12 недель».

  • Будущий период: интервалы вида «следующие 3 года» или «следующие 48 часов».

  • Предопределённый интервал: значения «сегодня», «завтра», «в этом месяце» или «в этом году».

  • Относительные дата и время: условия «к концу дня», «в начале часа», «не в последний день года».

  • Произвольный интервал: позволяет указать границы интервала вручную.

<data>
    <collection id="ordersDc"
                class="io.jmix.uisamples.entity.Order"
                fetchPlan="_local">
        <loader id="ordersDl">
            <query>
                <![CDATA[select e from uisamples_Order e]]>
            </query>
        </loader>
    </collection>
</data>
<facets>
    <dataLoadCoordinator auto="true"/>
</facets>
<layout>
    <propertyFilter property="date"
                    operation="IN_INTERVAL"
                    dataLoader="ordersDl"/>
    <dataGrid id="orderDataGrid"
              dataContainer="ordersDc"
              width="100%"
              minHeight="20em">
        <columns>
            <column property="date"/>
            <column property="customer"/>
            <column property="amount"/>
            <column property="description"/>
        </columns>
    </dataGrid>
</layout>

Настройка

Можно явно задать компонент поля ввода и настроить его атрибуты. Это позволяет изменить стандартный внешний вид propertyFilter и добавить дополнительные возможности. Например:

<data>
    <collection id="ordersDc"
                class="io.jmix.uisamples.entity.Order">
        <fetchPlan extends="_local">
            <property name="customer" fetchPlan="_local"/>
        </fetchPlan>
        <loader id="ordersDl">
            <query>
                <![CDATA[select e from uisamples_Order e]]>
            </query>
        </loader>
    </collection>
    <collection id="customersDc"
                class="io.jmix.uisamples.entity.Customer">
        <fetchPlan extends="_local"/>
        <loader id="customersDl">
            <query>
                <![CDATA[select e from Customer e]]>
            </query>
        </loader>
    </collection>
</data>
<facets>
    <dataLoadCoordinator auto="true"/>
</facets>
<layout>
    <propertyFilter property="customer"
                    operation="EQUAL"
                    dataLoader="ordersDl">
        <entityComboBox metaClass="Customer" itemsContainer="customersDc">
            <actions>
                <action id="lookup" type="entity_lookup"/>
                <action id="clear" type="entity_clear"/>
            </actions>
        </entityComboBox>
    </propertyFilter>
    <dataGrid id="ordersDataGrid"
              dataContainer="ordersDc"
              width="100%"
              minHeight="20em">
        <columns>
            <column property="date"/>
            <column property="customer"/>
            <column property="amount"/>
            <column property="description"/>
        </columns>
    </dataGrid>
</layout>

Динамические атрибуты

Компонент поддерживает фильтрацию по динамическим атрибутам. Для этого не требуется наличие фасета dynamicAttributes на экране.

Чтобы указать динамический атрибут, начните его имя с префикса +:

<propertyFilter
        property="+passengerNumberOfSeats"
        operation="EQUAL"
        dataLoader="carsDl"/>
Если динамический атрибут является сущностью, фильтрация по его атрибутам невозможна.

Варианты темы

Используйте атрибут themeNames, чтобы применить один или несколько вариантов темы.

Вариант Описание Поддерживается в

Предопределённые варианты отсутствуют

propertyFilter не определяет встроенные варианты оформления. Используйте themeNames для пользовательских стилей в теме приложения.

Пользовательские темы

Атрибуты

propertyFilter имеет следующие уникальные атрибуты:

Имя Описание По умолчанию

autoApply

Устанавливает, должен ли фильтр по атрибутам автоматически применяться к DataLoader при изменении значения условия.

dataLoader

dataLoader — обязательный атрибут.

defaultValue

Устанавливает значение по умолчанию для условия фильтра.

label

Задаёт подпись компонента.

labelPosition

Атрибут labelPosition определяет положение метки фильтра:

labelVisible

Устанавливает видимость label или нет.

labelWidth

Устанавливает ширину label.

operation

Определяет операцию фильтрации.

operationEditable

Устанавливает, виден ли селектор операций.

operationTextVisible

Атрибут operationTextVisible определяет видимость метки операции.

parameterName

Атрибут parameterName задаёт имя связанного имени параметра запроса, используемого условием.

property

Указывает атрибут сущности, связанный с компонентом.

propertyFilter имеет следующие общие атрибуты:

Обработчики

propertyFilter имеет следующие уникальные обработчики:

Имя Описание

OperationChangeEvent

OperationChangeEvent отправляется при изменении свойства операции.

validator

Проверяет значение компонента.

propertyFilter имеет следующие общие обработчики:

Элементы

Компонент propertyFilter может содержать следующие вложенные элементы: tooltip и validator.