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

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

Использование 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>