展示动态属性

当项目中安装了动态属性扩展组件,则创建新的详情视图或列表视图时,可以使用 dynamicAttributes facet。

在视图展示动态属性的另一个方法就是使用 DynamicAttributesPanel

使用 dynamicAttributes Facet

dynamicAttributes facet 支持在 DataGridFormLayout 组件中展示动态属性,这两种组件需要绑定包含动态属性实体的数据容器。

视图 XML 中使用

需要在视图中使用动态属性,可以在界面 XML 的 facets 部分添加 dynamicAttributes facet:

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

添加 facet 后,可以在 Visibility 标签页的 Category attribute details 对话框中选择此视图。

在 Fragment 中使用

dynamicAttributes facet 也可以用于 fragments

将 facet 添加到 fragment 的 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>

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

然后创建一个使用该 fragment 的视图。

使用 dynamicAttributes facet 的 fragment 必须具有 ID。可以在 XML 或以编程方式 设置。

在配置动态属性的 可见性 时,使用 fragment 的视图的标识符遵循这个范式:<view_ID>.<fragment_ID>。例如,如果 ID 为 DynAttrFacetView 的视图包含 ID 为 xmlFragment 的 fragment,则完整标识符为 DynAttrFacetView.xmlFragment

dyn attr facet

使用 DynamicAttributesPanel

如果实体实现了 Categorized 接口,则可以使用 DynamicAttributesPanel 组件来显示该实体的动态属性。此组件支持为特定实体实例选择分类,并指定此分类的动态属性的值。

如需在详情视图中使用 DynamicAttributesPanel 组件,请按照下列步骤:

  • 确保在带分类实体的 fetch plan 中,包含了 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 扩展组件,则可以在流程表单中加载并显示动态属性。详情和示例,请参阅 加载动态属性