propertyFilter
propertyFilter фильтрует данные по атрибуту сущность.
XML-элемент |
|
|---|---|
Java-класс |
|
Основы
В простейшем виде 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 имеет следующие уникальные атрибуты:
| Имя | Описание | По умолчанию |
|---|---|---|
Устанавливает, должен ли фильтр по атрибутам автоматически применяться к |
— |
|
|
— |
|
Устанавливает значение по умолчанию для условия фильтра. |
— |
|
Задаёт подпись компонента. |
— |
|
Атрибут |
— |
|
Устанавливает видимость label или нет. |
— |
|
Устанавливает ширину label. |
— |
|
Определяет операцию фильтрации. |
— |
|
Устанавливает, виден ли селектор операций. |
— |
|
Атрибут |
— |
|
Атрибут |
— |
|
Указывает атрибут сущности, связанный с компонентом. |
— |
propertyFilter имеет следующие общие атрибуты:
id - alignSelf - ariaLabel - ariaLabelledBy - classNames - colspan - css - enabled - errorMessage - focusShortcut - height - helperText - invalid - maxHeight - maxWidth - minHeight - minWidth - readOnly - required - requiredMessage - tabIndex - themeNames - visible - width