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实体在柔性设计平台中被定义为以下五种类型:

  • 实体表:有数据库表结构的正常表,数据记录可存储多条
  • 单例表:有数据库表结构的正常表,从平台层面控制只能存储单条数据
  • 临时表:有数据库表结构的正常表,从平台层面控制不存储数据,通过代码构造数据,数据存储在内存里面
  • 聚集表:有数据库表结构的正常表,其中部分字段的数据 通过聚合函数,聚合后展示出来
  • 行列转置表:有数据库表结构的正常表,其中某一字段列的数据变成表头 交叉数据通过聚合函数,聚合后展示出来

实体结构

undefined

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实体内名称

results matching ""

    No results matching ""