Displaying Dynamic Attributes

When you create a new detail or list view in the project with the Dynamic Attributes add-on installed, the framework provides the ability to use the dynamicAttributes facet in XML descriptors.

Another method to show dynamic attributes in views is by employing the DynamicAttributesPanel.

Using dynamicAttributes Facet

dynamicAttributes facet enables the display of dynamic attributes in DataGrid or FormLayout associated with a data container containing entities with dynamic attributes.

Include the dynamicAttributes facet to the facets section of the view XML descriptor:

<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>

Subsequently, you can choose this view within the Category attribute details on the Visibility tab.

Using DynamicAttributesPanel

If an entity implements the Categorized interface, you have the option to use the DynamicAttributesPanel component to showcase the dynamic attributes associated with the entity. This component facilitates the selection of a category for a specific entity instance and the specification of values for the dynamic attributes within that category.

To integrate the DynamicAttributesPanel component into a detail view, follow these steps:

  • Make sure the category attribute is included into the fetch plan of your categorized entity:

    <data>
        <instance id="carDc"
                  class="com.company.demo.entity.Car">
            <fetchPlan extends="_base">
                <property name="category" fetchPlan="_base"/>
            </fetchPlan>
            <loader/>
        </instance>
    </data>
  • Add the dynamicAttributesPanel visual component to the view:

    <layout>
        <formLayout id="form" dataContainer="carDc">
            <textField id="numberField" property="number"/>
            <textField id="modelField" property="model"/>
            <dynattr:dynamicAttributesPanel dataContainer="carDc"
                                            categoryFieldVisible="true"/>
        </formLayout>
        <!--...-->
    </layout>