Отображение динамических атрибутов

При создании нового экрана деталей или списка в проекте с установленным дополнением 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 фрагмента:

dynamic-attributes-fragment.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>

Пример контроллера фрагмента:

DynamicAttributesFragment.java
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> {
}

Затем создайте экран, который использует этот фрагмент.

Фрагмент, использующий фасет dynamicAttributes, должен иметь идентификатор (ID). Вы можете установить его в XML или программно.

При настройке видимости динамических атрибутов идентификатор для экрана, использующего фрагмент, следует шаблону: <view_ID>.<fragment_ID>. Например, если экран с ID DynAttrFacetView содержит фрагмент с ID xmlFragment, полный идентификатор будет DynAttrFacetView.xmlFragment.

dyn attr facet

Использование 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 динамические атрибуты можно загружать и отображать в процессных формах. Подробности и пример см. в разделе Загрузка динамических атрибутов.