Отображение динамических атрибутов
При создании нового экрана деталей или списка в проекте с установленным дополнением Dynamic Attributes фреймворк предоставляет возможность использования фасета dynamicAttributes в XML-дескрипторах.
Другой метод отображения динамических атрибутов на экранах - использование DynamicAttributesPanel.
Использование фасета dynamicAttributes
Фасет dynamicAttributes позволяет отображать динамические атрибуты в DataGrid или FormLayout, связанных с контейнером данных, содержащим сущности с динамическими атрибутами.
В экранах
Чтобы использовать динамические атрибуты в экране, включите фасет dynamicAttributes в раздел facets XML-дескриптора экрана:
<view xmlns="http://jmix.io/schema/flowui/view"
xmlns:dynattr="http://jmix.io/schema/dynattr/flowui"
title="msg://carDetailView.title"
focusComponent="form">
<facets>
<dynattr:dynamicAttributes/>
<dataLoadCoordinator auto="true"/>
</facets>
<!--...-->
</view>
После добавления фасета вы можете выбрать этот экран в диалоге Category attribute details на вкладке Visibility.
Во фрагментах
Фасет dynamicAttributes также может использоваться в фрагментах.
Добавьте фасет в XML фрагмента:
<fragment xmlns="http://jmix.io/schema/flowui/fragment"
xmlns:dynattr="http://jmix.io/schema/dynattr/flowui">
<data>
<collection id="usersDc"
class="com.company.demo.entity.User">
<fetchPlan extends="_base"/>
<loader id="usersDl" readOnly="true">
<query>
<![CDATA[select e from User e order by e.username]]>
</query>
</loader>
</collection>
</data>
<facets>
<dynattr:dynamicAttributes/>
<fragmentDataLoadCoordinator auto="true"/>
</facets>
<content>
<vbox id="root">
<dataGrid id="usersDataGrid"
width="100%"
columnReorderingAllowed="true"
minHeight="20em"
dataContainer="usersDc">
<columns resizable="true">
<column property="username"/>
<column property="firstName"/>
<column property="lastName"/>
<column property="email"/>
<column property="timeZoneId"/>
<column property="active"/>
</columns>
</dataGrid>
</vbox>
</content>
</fragment>
Пример контроллера фрагмента:
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import io.jmix.flowui.fragment.Fragment;
import io.jmix.flowui.fragment.FragmentDescriptor;
@FragmentDescriptor("dynamic-attributes-fragment.xml")
public class DynamicAttributesFragment extends Fragment<VerticalLayout> {
}
Затем создайте экран, который использует этот фрагмент.
|
Фрагмент, использующий фасет При настройке видимости динамических атрибутов идентификатор для экрана, использующего фрагмент, следует шаблону:
|
Использование DynamicAttributesPanel
Если сущность реализует интерфейс Categorized, у вас есть возможность использовать компонент DynamicAttributesPanel для отображения динамических атрибутов, связанных с сущностью. Этот компонент упрощает выбор категории для конкретного экземпляра сущности и указание значений для динамических атрибутов в этой категории.
Для интеграции компонента DynamicAttributesPanel в экран деталей выполните следующие шаги:
-
Убедитесь, что атрибут
categoryвключен в фетч-план вашей категоризированной сущности:<data> <instance id="carDc" class="com.company.demo.entity.Car"> <fetchPlan extends="_base"> <property name="category" fetchPlan="_base"/> </fetchPlan> <loader/> </instance> </data> -
Добавьте визуальный компонент
dynamicAttributesPanelна экран:<layout> <formLayout id="form" dataContainer="carDc"> <textField id="numberField" property="number"/> <textField id="modelField" property="model"/> <dynattr:dynamicAttributesPanel dataContainer="carDc" categoryFieldVisible="true"/> </formLayout> <!--...--> </layout>
Добавление в форму бизнес‑процесса
С дополнением BPM динамические атрибуты можно загружать и отображать в процессных формах. Подробности и пример см. в разделе Загрузка динамических атрибутов.