管理动态属性
可以在 Administration(管理) > Dynamic attributes(动态属性) 视图管理动态属性。视图的左边有分类列表,右边展示选中分类包含的属性。
在修改动态属性配置时,需要点击 Apply changes(应用更改) 按钮保存修改。
Dynamic attributes 视图也提供了将选中的分类导出成 ZIP 或 JSON 文件或导入系统的操作。
创建分类
在给实体创建动态属性前,首先需要创建一个分类。设置分类名称并选择该分类所关联的实体。
如果实体实现了 Categorized
接口,Is default(是否默认) 复选框表示会自动为新实例选择这个分类。
如果实体没有实现 Categorized
接口,则 Is default(是否默认) 复选框不起作用,你可以自己为该实体创建单一分类,或者创建多个分类,所有分类中的属性都会按照 可见性 进行展示。
如果应用程序支持多种语言,则会显示 Localization(本地化) 标签页。支持为分类设置每个可用语言环境的本地化名称。
创建属性
常规设置
在 Category attribute detail(分类属性编辑) 的 General(常规) 标签页中,可以设置名称、系统编码、描述、值类型、默认值以及验证脚本。
对于除 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(枚举类型) 字段中定义命名值集合。每个枚举值可以进行本地化显示设置。
对于 String(字符串)
、Double(双精度浮点数)
、Entity(实体)
、Fixed-point number(定点数)
和 Integer(整数)
数据类型,可以使用 Dropdown list(下拉框控件) 选项。如果勾选了此设置,用户可以从下拉列表中选择属性值。选项值列表在 Calculated values and options(计算值和选项) 标签页配置。
对 Entity
数据类型,支持配置 Where 和 Join 子句。
计算值和选项
在 Calculated values and options(计算值和选项) 标签页,可以指定当前属性依赖的其他属性。当改变其中一个依赖属性时,则会重新执行计算该属性值的脚本或计算 选项值列表 的脚本。
Groovy 脚本必须提供一个新的参数值。脚本将接收到下列变量:
-
entity
- 当前编辑的实体; -
dynamicAttributes
- 一个 map 映射,key
- 属性编码,value
- 动态属性的值。
使用 EntityValues
类的重算脚本示例:
使用 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 类型属性脚本的示例:
-
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
后面,因此需要以逗号、join
或left join
开头。在脚本中可以使用动态属性,通过
entity
变量访问,例如,${entity.+<dynamicAttrCode>}
,这里<dynamicAttrCode>
表示对应动态属性的编码。{E}
占位符可以作为实体的别名。在执行查询语句的时候,会用指定的别名进行替换。示例:
join {E}.seller s
Where clause(Where 子句) 字段的值会使用
and
条件添加在where
子句的后面。因此,不需要手动添加where
。在脚本中可以使用动态属性,通过
entity
变量访问,示例:
可见性
设置可见性可以控制动态属性在哪些视图展示。默认情况下,动态属性不显示。
视图需要添加 dynamicAttributes facet 才能支持在 Visibility(可见性) 标签页选择。
除了指定视图,还可以指定允许展示动态属性的组件。例如,在视图中的多个 FormLayout
组件展示同一实体的多个字段。
如果属性在某个视图可见,则视图中展示对应实体的所有表单和表格中都会展示这个属性。
如果实体实现了 Categorized
,可以使用 DynamicAttributesPanel。
对动态属性的访问权限也可以通过 资源角色 进行限制。动态属性相关的安全设置与普通属性类似。