DataType
概述
DataType是GOT模型中用于定义数据结构和约束规则的核心节点。通过继承机制和全局管理能力,确保业务对象数据格式的统一性,实现数据一致性与开发效率的平衡。
- 数据一致性:通过DataType的类型、长度、精度、主表设置,实现数据结构粒度/约束一致性;
- 开发效率:通过拖拽操作快速复用,实现自动化数据约束校验、数据下拉引用功能,减少代码冗余。
DataType实体支持包括:String、Long、Decimal、Boolean、Date、Time、DateTime、Enum、Blob、Clob、Component共11种数据类型,这些数据类型由GOT模型定义,与具体关系型数据库管理系统无关,通过运行时根据类型自动进行数据类型映射。
- String:文本数据类型,在DataType支持的11种数据类型种,只有String类型支持设置主表关系,基于主表关系设置,可以实现自动化构造下拉画面、数据约束校验等功能。基于对业务系统设计归纳总结,业务表中单列候选键选举一个定义String类型DataType并设置主表关系。
- Enum:枚举类型。相比枚举实体,Enum类型的DataType在枚举实体的基础上,支持枚举项过滤,以及效果采用DataType形式进行展示。
- Component:维度类型。属于GOT自定义类型,结合面向对象封装特性与业务设计进行使用。
每个DataType实体会生成一个普通Java类,位于层节点源码的datatypes包目录下,命名规则为:DataType_实体名称。
package gongqi.erp.layers.obj.datatypes;
public class DataType_ItemId extends gongqi.erp.gotmodel.datatype.GongqiString {
public DataType_ItemId(){}
public DataType_ItemId(String value) {
this.setValue(value);
}
......
}
DataType实体在业务建模过程主要有以下三种用途:
- TableField继承:表字段继承,此场景为主要用途。实现表字段结构粒度一致与数据约束校验。
- 无数据源Editor:无数据源Editor,相较于普通无数据源Editor,配置DataType属性后,可以实现数据自动下拉、校验等功能。
- DataType继承:DataType可以继承相同类型的DataType,实现结构的层次化设计。例如:金额属于Decimal类型Datype,精度为4,用于统一金额数据类型,基于此有销售金额的DataType继承金额DataType,精度配置为2,实现类型全局统一,精度基于模块设计。
实体结构
DataType
DataType节点是DataType实体根节点,根据数据类型不同,实体结构以及属性存在差异,大部分情况下DataType实体只有根节点,不存在子节点,其中对于String类型的DataType,如果存在主表关系配置,则存在一个Relation子节点,用于配置主表关系。对于Component数据类型DataType,存在一个DataTypeArray节点,DataTypeArray节点下允许多个DataTypeArrayItem子节点,DataTypeArrayItem用于配置维度项。
公共属性列表
属性 | 说明 |
---|---|
Extends | 指定继承关系。 除Enum类型外,所有DataType仅允许继承同类型的其他DataType实体。 |
Label | 标签。标签存在继承属性,对于继承自DataType的节点,如果未设置标签,在界面渲染时会查找继承的节点的标签。 根据业务设计惯式,为保证同一个业务字段在系统内标签的一致性,一般在DataType上设置标签,对于继承DataType的TableField、Editor、等不单独设置标签,通过标签继承进行实现。 |
HelpText | 帮助文本,用于描述解释,目前仅作用于GOT设计器,用于对节点解释备注说明。 |
DisplayLength | 显示宽度,单位:字符。 不同数据类型的DataType默认显示宽度不一样。 根据业务设计规范,建议显示宽度不小于标签内容,对于长度有限编号类(通常内容小于20个字符),建议显示大于实际内容1个字符。 |
String类型属性列表
属性 | 说明 |
---|---|
StringSize | 数据存储长度,不区分字符与汉字。 默认值:20 |
Trim | 空白字符的处理策略,空白字符包括:半角空格、全角空格、回车、换行、Tab。默认值:LeftRigth • Left:去除字符串左侧的空白字符; • LeftRigth:去除字符串左右两侧的空白字符; • None:不处理空白字符,保持原样; • Through:去除字符串左右两侧空白字符,内容的空白字符,连续的多个空白字符合成一个半角空格; |
ChangeCase | 字符串大小写处理策略。默认值:None • Lower:转换为小写字符 • None:不处理,保持原样 • Upper:转换为大写字符。 |
FormLookup | 指定DataType下拉画面,下拉数据来源是Lookup类型的Form。对于继承DataType的TableField或无数据源StringEditor,如果没有指定下拉画面,则继承DataType的下拉画面配置。 |
FilterSysActive | 指定继承此DataType的表字段,下拉画面是否要根据SysActive字段进行过滤显示值为true的数据。SysActive字段必须名称为SysActive且继承名称为SysActive的DataType才有效。 此配置项仅针对自动构造的下拉画面生效,如果下拉画面为自定义下拉画面此属性无效。 |
Regular | 配置字符串的数据格式,属性值为正则表达式,如果数据不满足此规则,输入后提示数据无效。 此属性仅作用于客户端输入过程,通过程序自动生成的数据此属性无效。 |
Long类型属性列表
属性 | 说明 |
---|---|
ShowZero | 配置LongEditor对于数值0是否显示,如果配置为false,对于数值0,编辑框未进入编辑模式时展示为空白,进入编辑框后展示为0。 此属性仅作用于客户端自动渲染画面的LongEditor控件。 |
ThousandSeperator | 配置LongEditor在非编辑模式展示时,是否显示千分位分隔符。 此属性仅作用于客户端自动渲染画面的LongEditor控件。 |
Decimal类型属性列表
属性 | 说明 |
---|---|
DisplayStyle | 配置显示样式,支持以下样式配置 • 显示百分比:DecimalEditor展示时增加百分号“%”后缀,例如:50,显示为50%,仅增加显示后缀,数值不动。 • 货币符号:DecimalEditor展示时增加货币符号后缀,具体货币符号通过界面配置。 此属性仅作用于客户端自动渲染画面的DecimalEditor控件。 |
ShowZero | 配置DecimalEditor对于数值0是否显示,如果配置为false,对于数值0,编辑框未进入编辑模式时展示为空白,进入编辑框后展示为0。 此属性仅作用于客户端自动渲染画面的DecimalEditor控件。 |
ThousandSeperator | 配置DecimalEditor在非编辑模式展示时,是否显示千分位分隔符。 此属性仅作用于客户端自动渲染画面的DecimalEditor控件。 |
NumOfDecimals | 设置浮点数存储的精度,即小数点后的小数位数。 |
DisplayDecimals | 设置浮点数通过DecimalEditor展示时,在未进入编辑状态时,显示的小数位数,允许与存储精度不一致,值范围小于等于存储精度。 例如:数据存储的精度为4,展示精度为2. |
RoundOff | 设置四舍五入的方式,默认值:HalfUp,可选策略如下: • Ceiling:向正无限大方向舍入的舍入模式。如果结果为正,则舍入行为类似于 UP;如果结果为负,则舍入行为类似于 DOWN。注意,此舍入模式始终不会减少计算值。 • Down:向零方向舍入的舍入模式。从不对舍弃部分前面的数字加 1(即截尾)。注意,此舍入模式始终不会增加计算值的绝对值。 • Floor:向负无限大方向舍入的舍入模式。如果结果为正,则舍入行为类似于 DOWN;如果结果为负,则舍入行为类似于 RoundingMode.UP。注意,此舍入模式始终不会增加计算值。 • HalfDown:向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入。如果被舍弃部分 > 0.5,则舍入行为同 UP;否则舍入行为同 DOWN。 • HalfEven:向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。如果舍弃部分左边的数字为奇数,则舍入行为同 HALF_UP;如果为偶数,则舍入行为同 HALF_DOWN。注意,在重复进行一系列计算时,此舍入模式可以在统计上将累加错误减到最小。此舍入模式也称为“银行家舍入法”,主要在美国使用。此舍入模式类似于 Java 中对 float 和 double 算法使用的舍入策略。 • HalfUp:向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。如果被舍弃部分 >= 0.5,则舍入行为同 RoundingMode.UP;否则舍入行为同 DOWN。注意,此舍入模式就是通常学校里讲的四舍五入。 • Unnecessary:用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。如果对生成精确结果的操作指定此舍入模式,则抛出 ArithmeticException。 • Up:远离零方向舍入的舍入模式。始终对非零舍弃部分前面的数字加 1。注意,此舍入模式始终不会减少计算值的绝对值。 |
Date类型属性列表
属性 | 说明 |
---|---|
DisplayStyle | 设置日期的展示样式,支持以下格式: • yyyy:展示年份。例如:2025 • MM-dd:展示月份和日期。例如:04-15 • MM/dd:展示月份和日期。例如:04/15 • yyyy-MM:展示年份和月份。例如:2025-04 • yyyyMMdd:展示年月日。例如:20250415 • yyyy-MM-dd:展示年月日。例如:2025-04-15 • yyyy/MM/dd:展示年月日。例如:2025/04/15 • yyyy-M-d:展示年月日。例如:2025-4-15 • yyyy/M/d:展示年月日。例如:2025/4/15 |
Time类型属性列表
属性 | 说明 |
---|---|
DisplayStyle | 设置时间的展示样式,支持以下格式: • HH:mm:ss:展示时分秒,例如:14:03:10 • HH:mm:展示时分。例如:14:03 |
DateTime类型属性列表
属性 | 说明 |
---|---|
DisplayStyle | 设置日期时间的展示样式,支持以下格式: • yyyy-MM-dd HH:mm:ss:展示年月日时分秒,例如:2025-04-15 14:03:10 • yyyy-MM-dd HH:mm:展示年月日时分,例如:2025-04-15 14:03 |
Boolean类型属性列表
属性 | 说明 |
---|---|
TextTure | 设置布尔值true时BooleanEditor展示文本。 |
TextFalse | 设置布尔值false时BooleanEditor展示文本 |
Enum类型属性列表
属性 | 说明 | |||
---|---|---|---|---|
Source | 指定继承实体的类型,可选值:DataType、Enum。 | |||
Regular | 设置展示哪些EnumItem。属性值内容为EnumItem值,多个值之间用竖线“\ | ”分隔。例如:1\ | 2\ | 3 |
Relation
对于String类型的DataType,存在主表关联时,有且仅有一个Relation节点,用于配置主表信息。
属性列表
属性 | 说明 |
---|---|
Table | 数据主表,即数据来源的表。 例如:物料编号来源物料表,物料编号ItemId DataType的Relation节点Table属性为物料表ItemTable。 |
Field | 指定DataType关联主表的哪个字段。 例如:物料编号DataType关联字段是ItemTable的ItemId字段。 |
FilterField | 单纯无效,根据主表中某字段进行过滤,在主表外有继承该DataType节点的,如果需要根据当前字段过滤,则在表内也需 |
RefMenuItem | 配置DataType的Editor右键菜单“进入主表”打开的画面。一般打开画面的默认数据源组的根节点为当前DateType的主表。 |
ValidateDelete | 删除时是否校验引用关系,为true是校验引用 删除时会提示错误数据存在引用。 |
DataTypeArrayItem
对于Component类型的DataType,包含一个DataTypeArray节点,DataTypeArray节点下支持多个DataTypeArrayItem,每一个DataTypeArrayItem代表一个维度项。维度项用于关联一个已经存在的DataType。
属性列表
属性 | 说明 |
---|---|
RefDataType | 关联的DataType节点。 |