Table
描述
Table实体代表数据库表,每个Table都对应数据库一张实体表。Table由若干字段,索引和GOT定义的FieldGroups构成,字段类型与DataType类型相同包括:String、Long、Decimal、Boolean、Date、Time、DateTime、Enum、Blob、Clob、Component共11种数据类型。这些数据类型由GOT模型定义,与具体关系型数据库管理系统无关,通过运行时根据类型自动进行数据类型映射通。每个表都必包含RecId和RecVersion ,字段 RecId 单表唯一且设为唯一索引描述了一条记录的唯一主键,RecVersion描述了一条记录的修改次数。字段索引可建多个与数据库索引相关联,可设置索引的唯一性和索引下字段的排序,必有RecId相关唯一自增长索引。Table 下的FieldGroups 描述了该Table 的主表字段作为DataType 时被其他字段继承引用后,下拉主表数据时显示的下拉表格内的字段列和查询框。FieldGroups 还定义了 该表的默认字段 一般包括 CreatedDate,CreatedTime,CreatedBy,ModifiedDate,ModifiedTime,ModifiedBy 分别存储表记录的创建日期 创建时间 和创建人 ,记录的修改日期修改时间和修改人。
在GOT模型中,在柔性设计平台中,每个Table实体对应两个普通Java类 一个是以Table命名的Java类 一个是以Base+Table命名的Java类
Table对应Java类位于层节点tablse包目录。里面一般包含 表的 初始化 新增 修改 删除的 二次开发方法和 一些自定义调用Util 方法 具体表的二开方法 详情见 二次开发-表
package gongqi.df.subpurch.layers.app.tables;
import gongqi.df.subpurch.layers.app.tables.base.BaseFetch_ProdRoute;
public class Fetch_ProdRoute extends BaseFetch_ProdRoute {
@Override
public void init() {
// TODO 初始化
super.init();
}
@Override
public void insert() {
// TODO 新增
super.insert();
}
@Override
public void update() {
// TODO 修改
super.update();
}
@Override
public void delete() {
// TODO 保存
super.delete();
}
}
BaseTableJava类位于层节点tablse/base包目录 。里面 定义了 该Table 有哪些字段 ,这些字段的Get 和Set 方法 ,表的实例化方法 表的Util 方法调用 ,Map转表的方法 和 表字段的静态字段引用。
一般来说 Base 内的内容会根据Table 在GOT 上的变化而变化 不允许自行修改
package gongqi.df.subpurch.layers.app.tables.base;
import java.math.BigDecimal;
public class BaseFetch_ProdRoute extends gongqi.erp.gotmodel.table.GongqiRecord
{
private String prodId;
private String prodRouteTransId;
private String itemId;
...
public String getProdId() {
return prodId;
}
public String getProdRouteTransId() {
return prodRouteTransId;
}
public String getItemId() {
return itemId;
}
public String getItemName() {
return itemName;
}
...
public static gongqi.df.subpurch.layers.app.tables.Fetch_ProdRoute newInstance()
{
return (gongqi.df.subpurch.layers.app.tables.Fetch_ProdRoute)gongqi.erp.framework.core.ObjectContainer.newLayeredInstance(gongqi.df.subpurch.layers.app.tables.Fetch_ProdRoute.class);
}
public static gongqi.df.subpurch.layers.app.tables.Fetch_ProdRoute util()
{
return (gongqi.df.subpurch.layers.app.tables.Fetch_ProdRoute)gongqi.erp.framework.core.ObjectContainer.getLayeredInstance(gongqi.df.subpurch.layers.app.tables.Fetch_ProdRoute.class);
}
@Override
public void init() {
super.init();
}
@Override
public void insert() {
super.insert();
}
@Override
public void update() {
super.update();
}
@Override
public void delete() {
super.delete();
}
@Override
public void cast(java.util.Map<String, Object> map)
{
this.setProdId(gongqi.erp.gotmodel.table.GongqiRecordHelper.castString(map, "prodId"));
this.setProdRouteTransId(gongqi.erp.gotmodel.table.GongqiRecordHelper.castString(map, "prodRouteTransId"));
this.setItemId(gongqi.erp.gotmodel.table.GongqiRecordHelper.castString(map, "itemId"));
...
super.cast(map);
}
public void validateRecordFieldRef() {
gongqi.erp.gotmodel.table.GongqiRecordHelper.validateRecordFieldRef(this);
}
//GOT TableName
final public static String __EntityName = "gongqi.df.subpurch.Fetch_ProdRoute";
//TableField
final public static String _ProdId = "ProdId";
final public static String _ProdRouteTransId = "ProdRouteTransId";
final public static String _ItemId = "ItemId";
...
}
Table实体在业务建模过程主要有以下三种用途:
- FormDataSource继承:Form数据源继承 此为主要用途。实现画面上数据源新增修改保存删除记录,与数据库数据同步。
- 数据存储:单纯的数据存储,使用代码往数据库表中存储数据
- 临时表使用:只使用表和字段结构 构造画面 不存储数据库数据,数据从内存中通过代码存储和获取
Table实体在柔性设计平台中被定义为以下五种类型:
- 实体表:有数据库表结构的正常表,数据记录可存储多条
- 单例表:有数据库表结构的正常表,从平台层面控制只能存储单条数据
- 临时表:有数据库表结构的正常表,从平台层面控制不存储数据,通过代码构造数据,数据存储在内存里面
- 聚集表:有数据库表结构的正常表,其中部分字段的数据 通过聚合函数,聚合后展示出来
- 行列转置表:有数据库表结构的正常表,其中某一字段列的数据变成表头 交叉数据通过聚合函数,聚合后展示出来
实体结构
Table
Table节点 包含 Fields Indexes 和 FieldGroups 节点 其中Fields 是字段的集合 Indexes是索引的集合 FieldGroups 描述了默认字段和作为主表时下拉数据表的列和查询框
属性 | 说明 |
---|---|
Label | 标签,用于描述该表,常被Form引用,一般不建议过程 |
TableType | 表类型 默认是 Normal 可选如下: • Normal:正常表 正常数据存储表 有数据库表结构 能存储大量数据 • SingleParam:单例表 有数据库表结构 从逻辑上定义的单条记录的表 一般常用于配置表 |
Temporary | 临时表 默认是false 如果设置为true 则从逻辑上定义为临时表,有数据库表结构 但数据库不存数据 数据存储在内存中 通过代码去构造数据和获取数据 代码详情见 二次开发 |
DefaultOrderBy | 默认排序 画面上作为数据源查询数据时默认根据设置的RecIdx 索引字段RecId 升序排序 ;可下拉选择其他索引排序 |
ClusterIndex | 簇索引 默认为空 暂时无效 |
RecordCM | 表默认字段组,默认值为DateTimeBy 可选以下选项 • None:没有默认字段 • DateTimeBy:默认创建修改日期时间用户 • Session:默认只有用户Session • DateTimeBySession:默认创建修改日期时间用户及用户Session |
LineNumFilter | 行号生成规则,默认为空,如果该表有 SysLineNum 字段且 继承SysLineNum,则可设置 SysLineNum 根据其他列数据唯一规则递增; 如果不设置,则SysLineNum 值一直是递增 |
TableField
TableField节点根据不同节点类型 包含不同属性
公共属性列表
属性 | 说明 | 备注 |
---|---|---|
Extends | 指定继承关系。 除Blob和Clob类型外,所有TableField可继承同类型的DataType实体。 |
|
Label | 标签。标签存在继承属性,对于继承自DataType的节点,如果未设置标签,在界面渲染时会查找继承的节点的标签。 根据业务设计惯式,为保证同一个业务字段在系统内标签的一致性,一般在DataType上设置标签,对于继承DataType的TableField、等不单独设置标签,通过标签继承进行实现。 |
|
HelpText | 帮助文本,用于描述解释,目前仅作用于GOT设计器,用于对节点解释备注说明。 | |
DisplayLength | 显示宽度,单位:字符。 不同数据类型的默认显示宽度不一样。 根据业务设计规范,建议显示宽度不小于标签内容,对于长度有限编号类(通常内容小于20个字符),建议显示大于实际内容1个字符。 |
Blob,Clob Component 不存在该属性 |
NotNull | 是否允许为空,这里的null 与数据库字段的null无关,在平台设计逻辑上不允许字段数据在新增或者修改是为空 对于日期时间类型的字段 在数据库层面是允许为Null 其他类型的字段 都有默认值 数值类型的默认为0 文本类型的默认为"" |
Blob,Clob Boolean 不存在该属性 |
AllowEditor | 字段编辑性 ,默认为Always • Always:总能编辑 • Never:总不能编辑 • OnlyOnCreate:只有创建记录时可以被编辑 根据业务设计惯式,为保证同一个业务字段在系统内编辑性一致,一般在TableField,对于继承TableField的FormDataSourceField、FormItem等不单独设置,通过继承进行实现。 |
Blob,Clob Component 不存在该属性 |
Default | 默认值 一般不建议在这里统一设置 建议通过代码赋值 | Blob,Clob Component 不存在该属性 |
String类型属性列表
属性 | 说明 | |
---|---|---|
StringSize | 数据存储长度,不区分字符与汉字。 默认值:20 |
|
Trim | 空白字符的处理策略,空白字符包括:半角空格、全角空格、回车、换行、Tab。默认值:LeftRigth • Left:去除字符串左侧的空白字符; • LeftRigth:去除字符串左右两侧的空白字符; • None:不处理空白字符,保持原样; • Through:去除字符串左右两侧空白字符,内容的空白字符,连续的多个空白字符合成一个半角空格; |
|
ChangeCase | 字符串大小写处理策略。默认值:None • Lower:转换为小写字符 • None:不处理,保持原样 • Upper:转换为大写字符。 |
|
FilerField | 过滤:根据主表中某字段进行过滤,在主表里必须有继承该DataType节点的字段,如果需要根据当前字段过滤,则在表内字段也需继承对应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 |
Enum类型属性列表
属性 | 说明 | |||
---|---|---|---|---|
Source | 指定继承实体的类型,可选值:DataType、Enum。 | |||
Regular | 设置展示哪些EnumItem。属性值内容为EnumItem值,多个值之间用竖线“\ | ”分隔。例如:1\ | 2\ | 3 |
TableIndex
Table实体节点下的Indexes节点代码索引集合 一个 Indexes可包含多个TableIndex
属性 | 说明 |
---|---|
Unique | 设置为唯一索引 默认是false 索引设置与数据库相关联 |
TableIndexItem
属性 | 说明 |
---|---|
Field | 关联绑定TableFiled字段 |
ArrayItem | 如果字段是维度类型 则需选择对应维度项维度项 |
SortOrder | 排序方式 默认是ASC • ASC:升序; • DESC:降序 这里的设置与数据库无关 只在平台层面通过设置Table上的DefaultOrderBy 属性来控制查询数据的时候 字段的排序顺序 |
AutoLookup
AutoLookup节点解释了该表在作为自动下拉画面时 的查询框和表格列 默认AutoLookup节点下为空 作为主表下拉画面时仅显示单一表且只有主表字段列 。可在AutoLookup节点下新增多个与TableFiled 关联的TableFieldGroupItem节点 从而使得自动下拉画面内容更丰富
属性 | 说明 |
---|---|
Field | 绑定的Table实体字段 可下拉选择 也可从 Fields内拖入 |
ArrayItem | 如果字段是维度 则需要选择指定维度项 |
AutoQueryField | 自动设置为查询字段 具体表现为在下拉画面的表格上方生成该字段的查询框 查询方式默认是 包含 该内容 |
FocusIn | 设置查询字段之后 是否默认焦点进入 表现为不需要再次点击输入框 就可以直接输入 |
JoinQuery | 设置查询字段之后 该查询框 是否需要支持跨列查询 如 只需要一个框就能查询表格内多列数据 |
Visible | 该查询列是否可见 默认 为可见 在某些场景下 底层设置多个字段的AutoLookup上层并不需要某些字段的情况下 可提升该节点然后 修改 Visible属性的值 |
右键方法
Table实体节点提供特殊的 右键方法
- 同步:补全源码内容
- 引用列表:显示其他节点对当前节点的引用列表 可通过引用列表 直接索引到其他节点
- 层控制:对当前可编辑节点进行控制
- 标记可见:标记节点对上层链结构可见
- 标记不可见:标记节点对上层链结构不可见
- 标记锁定:标记节点对上层链结构锁定 (不可提升)
- 解除锁定:标记节点对上层链结构解除锁定 (可提升)
- 辅助功能:
- 调整创建层:调整节点的创建层
- 同步数据源字段:同步表结构 到 Form关联的FormDataSource 常用于表字段与数据源字段不匹配时 以 表字段为主
- 同步数据库表结构:根据Table实体节点结构 同步当前项目关联数据库的 当前表结构 包括 新增字段 重命名字段等
- 重置关联节点名称:当其他字段引用当前Table实体节点或者TableFiled节点时候 重置关联节点的名称为Table实体内名称