管理动态属性

可以在 Administration(管理) > Dynamic attributes(动态属性) 视图管理动态属性。视图的左边有分类列表,右边展示选中分类包含的属性。

dyn attr

在修改动态属性配置时,需要点击 Apply changes(应用更改) 按钮保存修改。

Dynamic attributes 视图也提供了将选中的分类导出成 ZIP 或 JSON 文件或导入系统的操作。

创建分类

在给实体创建动态属性前,首先需要创建一个分类。设置分类名称并选择该分类所关联的实体。

create category

如果实体实现了 Categorized 接口,Is default(是否默认) 复选框表示会自动为新实例选择这个分类。

如果实体没有实现 Categorized 接口,则 Is default(是否默认) 复选框不起作用,你可以自己为该实体创建单一分类,或者创建多个分类,所有分类中的属性都会按照 可见性 进行展示。

如果应用程序支持多种语言,则会显示 Localization(本地化) 标签页。支持为分类设置每个可用语言环境的本地化名称。

localization category

创建属性

常规设置

Category attribute detail(分类属性编辑)General(常规) 标签页中,可以设置名称、系统编码、描述、值类型、默认值以及验证脚本。

create attribute

对于除 Boolean 以外的所有值类型,都可以设置 formLayout 中的字段宽度(以像素为单位或百分比)。如果 Width(宽度) 字段为空,则其默认值为 100%。

对于除 Boolean 之外的所有值类型,还有一个 Is collection(是否集合) 复选框。支持为所选的值类型创建多值动态属性。

对于 Double(双精度浮点数)Fixed-point number(定点数)Integer(整数) 类型,可以用下列字段:

  • Minimum value - 当确保属性值必须大于等于指定的最小值。

  • Maximum value - 当确保属性值必须小于等于指定的最大值。

对于 Fixed-point number(定点数) 值类型,可以使用 Number format pattern(数字显示格式) 字段设置数字格式。数字格式按照 DecimalFormat 介绍的规则设置。

对于每个值类型,可以在 Validation script(验证脚本) 字段设置 Groovy 脚本用于验证输入的值。如果验证失败,脚本应当返回一个错误消息。如果通过验证,脚本可以不返回任何值或者返回 null。被检查的值在脚本中可以通过 value 变量获取。错误消息是一个 Groovy 字符串,其中可以用 $value 关键字。

示例:

if (!value.startsWith("correctValue")) return "the value '\${value}' is incorrect"

对于 Enumeration(枚举) 值类型,通过列表编辑器在 Enumeration(枚举类型) 字段中定义命名值集合。每个枚举值可以进行本地化显示设置。

enumeration

对于 String(字符串)Double(双精度浮点数)Entity(实体)Fixed-point number(定点数)Integer(整数) 数据类型,可以使用 Dropdown list(下拉框控件) 选项。如果勾选了此设置,用户可以从下拉列表中选择属性值。选项值列表在 Calculated values and options(计算值和选项) 标签页配置。

Entity 数据类型,支持配置 WhereJoin 子句。

计算值和选项

Calculated values and options(计算值和选项) 标签页,可以指定当前属性依赖的其他属性。当改变其中一个依赖属性时,则会重新执行计算该属性值的脚本或计算 选项值列表 的脚本。

Groovy 脚本必须提供一个新的参数值。脚本将接收到下列变量:

  • entity - 当前编辑的实体;

  • dynamicAttributes - 一个 map 映射,key - 属性编码,value - 动态属性的值。

使用 EntityValues 类的重算脚本示例:

calculated

使用 dynamicAttributes map 重算脚本示例:

if (dynamicAttributes['passengerNumberOfSeats'] > 9)
return 'Bus' else return 'Passenger'

脚本会在依赖属性值改变时执行。

如果定义了该脚本,则属性的输入控件会变成不可编辑状态。

重算只对 formLayout 表单布局DynamicAttributesPanel UI 组件有效。

如果选中了 General(常规) 标签页的 Dropdown list(下拉框控件),可以在 Options type(选项类型) 中选择选项加载器的类型。

可用的选项加载器类型:Groovy、SQL、JPQL(仅支持 Entity 数据类型)。

  • Groovy 选项加载器会使用 Groovy 脚本加载一组值。脚本中可以使用 entity 变量访问实体的属性,也包括动态属性。

    String 类型属性脚本的示例:

    options
  • SQL 选项加载器使用 SQL 脚本加载选项值列表。可以在脚本中使用 ${entity} 变量访问实体 id。使用 ${entity.<field>} 访问实体参数,field 是实体参数的名称。使用 \+ 前缀可访问实体的动态属性,例如 ${entity.+<field>}。脚本示例(这里我们访问实体和实体的动态属性 passengerTypeOfCar):

    select LAST_NAME from DRIVER
    where CAR_TYPE = ${entity.+passengerTypeOfCar}
  • JPQL 选项加载器只支持 Entity 类型的动态属性。JPQL 条件通过 Join clause(Join 子句)Where clause(Where 子句) 字段设置。在 JPQL 参数中可以使用 {entity}{entity.<field>} 变量。

    Join clause(Join 子句) 的值会添加至 from 后面,因此需要以逗号、joinleft join 开头。

    在脚本中可以使用动态属性,通过 entity 变量访问,例如,${entity.+<dynamicAttrCode>},这里 <dynamicAttrCode> 表示对应动态属性的编码。

    {E} 占位符可以作为实体的别名。在执行查询语句的时候,会用指定的别名进行替换。

    示例:

    join {E}.seller s

    Where clause(Where 子句) 字段的值会使用 and 条件添加在 where 子句的后面。因此,不需要手动添加 where

    在脚本中可以使用动态属性,通过 entity 变量访问,示例:

    jpql and where fields

本地化

如果应用程序支持多种语言,则会显示 Localization(本地化) 标签页。所有类型的动态属性都支持本地化。

localization attr

可见性

设置可见性可以控制动态属性在哪些视图展示。默认情况下,动态属性不显示。

visibility

视图需要添加 dynamicAttributes facet 才能支持在 Visibility(可见性) 标签页选择。

除了指定视图,还可以指定允许展示动态属性的组件。例如,在视图中的多个 FormLayout 组件展示同一实体的多个字段。

如果属性在某个视图可见,则视图中展示对应实体的所有表单和表格中都会展示这个属性。

如果实体实现了 Categorized,可以使用 DynamicAttributesPanel

对动态属性的访问权限也可以通过 资源角色 进行限制。动态属性相关的安全设置与普通属性类似。

resource role