动态模型

动态模型支持在正在运行的应用程序中扩展数据模型:可以向已有实体添加属性,或者定义全新的实体,而无需更改源码或重新启动应用程序。该扩展包含了运行时 UI,例如视图和菜单项。

主要功能:

  • 为已有(静态)实体添加动态属性,或定义新的动态实体。

  • 将动态数据存储在特定的数据库表中(静态实体使用侧表,动态实体使用专用表)以提供良好的性能。

  • 通过声明新视图和菜单项来自定义运行时 UI。

  • 基于资源角色定义验证、属性的唯一性和安全性。

  • 提供动态枚举、引用、集合和计算型属性。

  • 为动态模型提供本地化名称和消息。

  • 模型在图形管理 UI 中编辑,并存储为带版本的 YAML 定义。

动态模型扩展组件目前处于实验状态,在下一个 Jmix 版本中可能会有重大变更。

动态模型与动态属性

Jmix 提供了两种不同的扩展组件,用于在运行时扩展数据模型。

动态属性 将附加值存储在 实体-属性-值 结构中。适合为已有实体添加由管理员定义的自定义字段。

动态模型 添加了由专用数据库表支持的真实属性和新实体。除数据外,还可以定义运行时视图和菜单项,并且其模型定义是可编辑和版本化的。当需要新实体、专用表、运行时 UI 或受管理的版本化模型定义时,请使用动态模型。

安装

此扩展组件需要企业版 订阅。如果您没有订阅,请参见 企业版试用 部分了解如何获取试用版本。

如需通过 Jmix Marketplace 自动安装,请按照 扩展组件 部分中的说明操作。

手动安装,请按照以下步骤操作。

  1. 配置对 premium 仓库的访问。

    • build.gradle 添加 premium 仓库:

      repositories {
          // ...
          maven {
              url = 'https://global.repo.jmix.io/repository/premium'
              credentials {
                  username = rootProject['premiumRepoUser']
                  password = rootProject['premiumRepoPass']
              }
          }
      }
    • 将 premium 仓库的凭证记录在 ~/.gradle/gradle.properties 文件中:

      premiumRepoUser=123456123456
      premiumRepoPass=abcdefabcdef

      仓库的凭证可以通过许可秘钥获取:秘钥中短横前的部分为用户名,短横后的部分为密码。例如,如果你的秘钥是 123456123456-abcdefabcdef,则用户名是:123456123456,密码是 abcdefabcdef

  2. build.gradle 添加依赖:

    implementation 'io.jmix.dynmodel:jmix-dynmodel-starter'
    implementation 'io.jmix.dynmodel:jmix-dynmodel-flowui-starter'

应用程序使用单一菜单模式

如果你的应用程序使用的是 单一菜单模式,需要在扩展组件安装完成后手动添加菜单项。

  1. 在 Jmix Studio 中打开 菜单设计器

  2. 切换至 Structure 标签页。

  3. 左侧面板显示可用的菜单项。

    add menu items
  4. 添加菜单项:

    • 左侧选择需要添加的菜单项后,点击 > 按钮添加至右侧。

    • 或者也可以直接从左侧拖拽菜单至右侧结构中。

当应用程序是 单一 菜单模式时,Studio 不会自动合并组件的菜单,因此必须手动执行该步骤。