临时表

临时表是一种特殊的数据库表,用于存储临时数据。与普通表不同,临时表通常在数据源中定义了结构(即列和数据类型),但不在磁盘上持久存储数据,而是将数据存储在内存中。下面是对临时表的详细描述,包括其特点、用途,以及如何通过代码对数据进行增删改查(CRUD)操作。

临时表的特点

  1. 表结构定义
    • 临时表具有明确的表结构,包括列名、数据类型和约束等,通常在创建临时表时定义。
  2. 非持久化存储
    • 临时表的数据通常存储在内存中,意味着它们在会话结束或事务完成后可能会被清除,具体取决于数据库的实现和配置。
  3. 性能优势
    • 由于数据存储在内存中,临时表的读写速度通常比从磁盘读取数据要快,适用于需要快速访问和处理大量数据的场景。
  4. 会话级别
    • 临时表通常与特定的数据库会话或用户操作相关联,其他会话无法访问同一会话中的临时表数据。
  5. 数据隔离性
    • 不同会话中的临时表数据互不干扰,确保数据的隔离性。

临时表的用途

  • 数据处理:临时表可以用于处理复杂的查询和数据计算,尤其是在需要多次访问相同数据时,可以减少重复的查询操作。
  • 数据转换:在数据导入、导出和转换过程中,临时表可以作为中间存储区域。
  • 报告生成:在生成报表时,可以使用临时表存储中间计算结果,方便后续的处理和展示。

正式表用于临时表

在平台中 可以用Table 类型为normal的正式表当作 临时表来使用

操作如下:

​ 1.新建一张正式版(也可以使用原有正式表)

​ 2.把正式表作为数据源构造 Form,注意 需要把 数据源类型(DataSourceType)设置为Temporary

undefined

​ 3.构造正常的画面元素结构 如 构造DataGrid

​ 4.代码构造数据 如:

    //在画面初始化之后的方法中 去构造临时表数据 然后 插入到对应的数据源
    public CommandResult afterInit(CommandArg arg) {
        CommandResult result = new CommandResult();
        List<Student> list = new ArrayList<>();
        //以下3种方法任选其一
        //每次打开画面都会进该方法 如果需要避免数据重复插入 需要先清空数据源临时数据 tmpRecordClear 方法在3.13及之后版本不推荐使用 
        result.tmpRecordClear().setGroup(__DS_Student);
        cleanTemporaryData(__DS_Student);
        GongqiFormUtils.cleanTemporaryDSData(GOTHelper.getEntityId(Form_Student.class), 
                                             Form_Student.__DS_Student);
        for(int i=0;i<10;i++) {
            Student st = Student.newInstance();
            st.initAsTempTable();
            st.setNumber("ST_00"+i);
            st.setName("Name_"+i);
            list.add(st);
        }
        //以下2种方法任选其一
        //注意 该方法在 3.13之后 不建议使用 
        result.tmpRecordAdd(list).setGroup(__DS_Student);
        //3.13之后插入数据源临时数据 并且需要执行 executeQuery命令刷新数据 否则 初始化不存在数据
        addTemporaryRecordData(__DS_Student, list);
        result.executeQuery().setGroup(__DS_Student);

        return result;
    }

正式临时表

在平台中 可以直接创建类型为 Temporary 的临时表 之后 用该表作为数据源时 数据源类型(DataSourceType)自动设置为Temporary

操作如下:

​ 1.新建一张Table属性Temporary的临时表

undefined

​ 2.把该Table 拖入Form 中 构造 Form

​ 3.构造正常的画面元素结构 如 构造DataGrid

​ 4.代码构造数据 如:

    //在画面初始化之后的方法中 去构造临时表数据 然后 插入到对应的数据源
    public CommandResult afterInit(CommandArg arg) {
        CommandResult result = new CommandResult();
        List<Student> list = new ArrayList<>();
        for(int i=0;i<10;i++) {
            Student st = Student.newInstance();
            st.initAsTempTable();
            st.setNumber("ST_00"+i);
            st.setName("Name_"+i);
            list.add(st);
        }
        //注意 该方法在 3.13之后 不建议使用
        result.tmpRecordAdd(list).setGroup(__DS_Student);
        //3.13之后插入数据源临时数据 并且需要执行 executeQuery命令刷新数据 否则 初始化不存在数据
        addTemporaryRecordData(__DS_Student, list);
        result.executeQuery().setGroup(__DS_Student);

        return result;
    }

代码构造临时表

在平台在 存在特殊情况 开发人员 不建议表结构 纯粹用代码构造其结构

[!WARNING]

在3.13版本及之后版本 该构造成的临时表 不支持在PC端进一步过滤排序 不推荐长期使用 仅作为临时处理展示数据使用

操作如下:

​ 1.新建一个Form

​ 2.新建一个DataSource 继承 SysTmp

​ 3.在Desgin 下 新建 一个DataGird

​ 4.在DataGird下新建具体类型字段 如 StringEditor 并且把DataSource属性设置为 SysTmp ,把DataMethod属性设置为Normal

undefined

数据代码操作

对于不同版本的数据操作 存在版本代码差异

数据插入

tmpRecordAdd

CommandResult 命令 作用是对临时表数据源增加临时表记录,传List参数

方法签名

gongqi.erp.gotmodel.form.remote.CommandResult.tmpRecordAdd(List<?>)

方法入参

  • List list:列表数据 T 为具体的 临时表对象 也可以是Map

示例代码

public CommandResult buttonOK_Button(CommandArg arg) {
      List<TestTmpTable> list = new ArrayList<TestTmpTable>();
    //新建 一条TestTmpTable 存入到 list 内
      TestTmpTable tt = new TestTmpTable();
      tt.initAsTempTable();
      tt.setA_TableField("小明");
      tt.setA_TableField1(1);
      list.add(tt);

      tt = new TestTmpTable();
      tt.initAsTempTable();
     tt.setA_TableField("小红");
      tt.setA_TableField1(2);
      list.add(tt);
      CommandResult result = new CommandResult();
      //此画面有多个数据源,所以当赋值的时候必须指定数据源
    //使用 tmpRecordAdd 给临时数据源TestTmpTable 添加数据
      result.tmpRecordAdd(list).setGroup(__DS_TestTmpTable);
    //结合 executeQuery刷新数据
    result.executeQuery();
      return result;
}

[!WARNING]

3.13版本 标记为不可用 不推荐使用

addTemporaryRecordData(String, List<? extends GongqiRecord>)

Form上命令 作用是对临时表数据源增加临时表记录

方法签名

gongqi.erp.gotmodel.form.GongqiForm.addTemporaryRecordData(String, List<? extends GongqiRecord>)

方法入参

  • String datasource :指定数据源
  • List<? extends GongqiRecord> list:列表数据 T 为具体的 临时表对象

示例代码

public CommandResult buttonOK_Button(CommandArg arg) {
      List<TestTmpTable> list = new ArrayList<TestTmpTable>();
    //新建 一条TestTmpTable 存入到 list 内
      TestTmpTable tt = new TestTmpTable();
      tt.initAsTempTable();
      tt.setA_TableField("小明");
      tt.setA_TableField1(1);
      list.add(tt);

      tt = new TestTmpTable();
      tt.initAsTempTable();
     tt.setA_TableField("小红");
      tt.setA_TableField1(2);
      list.add(tt);
      CommandResult result = new CommandResult(); 
       //使用 addTemporaryRecordData 命令 给Student数据 添加list 数据
      addTemporaryRecordData(__DS_Student, list);
    //结合 executeQuery刷新数据
    result.executeQuery();
      return result;
}

addTemporaryMapData(String, List>)

Form上命令 作用是对临时表数据源增加临时表记录

方法签名

gongqi.erp.gotmodel.form.GongqiForm.addTemporaryMapData(String, List<Map<String, Object>>)

方法入参

  • String datasource :指定数据源
  • List> list:列表数据构造 Map传入

示例代码

public CommandResult buttonOK_Button(CommandArg arg) {
      List<Map<String,Object>> list = new ArrayList<TestTmpTable>();
    //新建 一条TestTmpTable 存入到 list 内
      TestTmpTable tt = new TestTmpTable();
      tt.initAsTempTable();
    Map<String, Object> castToMap = tt.castToMap();
      tt.put("Name","小明");
      tt.put("Num",1);
      list.add(tt);

      tt = new TestTmpTable();
      tt.initAsTempTable();
    Map<String, Object> castToMap2 = tt.castToMap();
      castToMap2.put("Name","小红");
      castToMap2.put("Num",2);
      list.add(tt);
      CommandResult result = new CommandResult(); 
       //使用 addTemporaryRecordData 命令 给Student数据 添加list 数据
      addTemporaryMapData(__DS_Student, list);
    //结合 executeQuery刷新数据
    result.executeQuery();
      return result;
}

putTemporaryDSData(String, String, List>)

GongqiFormUtils 内的命令 作用是对临时表数据源增加临时表记录

方法签名

gongqi.erp.gotmodel.util.GongqiFormUtils.putTemporaryDSData(String, String, List<Map<String, Object>>)

方法入参

  • String formId:指定画面Form的Id 一般通过GotHelper.getEntityId获取
  • String datasource :指定数据源
  • List> list:列表数据构造 Map传入

示例代码

public CommandResult buttonOK_Button(CommandArg arg) {
      List<TestTmpTable> list = new ArrayList<TestTmpTable>();
    //新建 一条TestTmpTable 存入到 list 内
      TestTmpTable tt = new TestTmpTable();
      tt.initAsTempTable();
    Map<String, Object> castToMap = tt.castToMap();
      tt.put("Name","小明");
      tt.put("Num",1);
      list.add(tt);

      tt = new TestTmpTable();
      tt.initAsTempTable();
    Map<String, Object> castToMap2 = tt.castToMap();
      castToMap2.put("Name","小红");
      castToMap2.put("Num",2);
      list.add(tt);
      CommandResult result = new CommandResult(); 
       //使用 GongqiFormUtils.putTemporaryDSData 命令 给Student数据 添加list 数据
    GongqiFormUtils.putTemporaryDSData(GOTHelper.getEntityId(Form_Student.class), Form_Student.__DS_Student, list);
    //结合 executeQuery刷新数据
    result.executeQuery();
      return result;
}

数据删除

tmpRecordClear()

CommandResult 命令 作用是对临时表数据源清空数据 结合setGroup 指定数据源

方法签名

gongqi.erp.gotmodel.form.remote.CommandResult.tmpRecordClear()

方法入参

示例代码

public CommandResult buttonOK_Button(CommandArg arg) {
      CommandResult result = new CommandResult(); 
    //结合setGroup 指定清空数据源临时数据
    result.tmpRecordClear().setGroup(__DS_Student);
    result.executeQuery().setGroup(__DS_Student);
      return result;
}

[!WARNING]

3.13版本 标记为不可用 不推荐使用

cleanTemporaryData(String)

Form上命令 作用是对临时表数据源清空临时数据

方法签名

gongqi.erp.gotmodel.form.GongqiForm.cleanTemporaryData(String)

方法入参

  • String datasourcename:数据源名称

示例代码

public CommandResult buttonOK_Button(CommandArg arg) {
      CommandResult result = new CommandResult(); 
    //结合setGroup 指定清空数据源临时数据
    result.cleanTemporaryData(__DS_Student);
    result.executeQuery().setGroup(__DS_Student);
      return result;
}

cleanTemporaryDSData(String, String)

Form上命令 作用是对临时表数据源清空临时数据

方法签名

gongqi.erp.gotmodel.util.GongqiFormUtils.cleanTemporaryDSData(String, String)

方法入参

  • String formId:指定画面Form的Id 一般通过GotHelper.getEntityId获取
  • String datasource :指定数据源

示例代码

public CommandResult buttonOK_Button(CommandArg arg) {
      CommandResult result = new CommandResult(); 
    //结合setGroup 指定清空数据源临时数据
    result.cleanTemporaryDSData(GOTHelper.getEntityId(Form_Student.class), Form_Student.__DS_Student);
    result.executeQuery().setGroup(__DS_Student);
      return result;
}

removeTemporaryDSData(String, String, long)

Form上命令 作用是对临时表数据源清空临时数据

方法签名

gongqi.erp.gotmodel.util.GongqiFormUtils.removeTemporaryDSData(String, String, long)

方法入参

  • String formId:指定画面Form的Id 一般通过GotHelper.getEntityId获取
  • String datasource :指定数据源
  • Long recId:recId 编号

示例代码

public CommandResult buttonOK_Button(CommandArg arg) {
      CommandResult result = new CommandResult(); 
    //结合setGroup 指定清空数据源临时数据
    GongqiFormUtils.removeTemporaryDSData(GOTHelper.getEntityId(Form_Student.class), Form_Student.__DS_Student,100L);
    result.executeQuery().setGroup(__DS_Student);
      return result;
}

removeTemporaryDSData(String, String, long)

Form上命令 作用是对临时表数据源数据 删除部分

方法签名

gongqi.erp.gotmodel.util.GongqiFormUtils.removeTemporaryDSData(String, String, long)

方法入参

  • String formId:指定画面Form的Id 一般通过GotHelper.getEntityId获取
  • String datasource :指定数据源
  • Long recId:recId 编号

示例代码

public CommandResult buttonOK_Button(CommandArg arg) {
      CommandResult result = new CommandResult(); 
    //结合setGroup 指定清空数据源临时数据
    GongqiFormUtils.removeTemporaryDSData(GOTHelper.getEntityId(Form_Student.class), Form_Student.__DS_Student,100L);
    result.executeQuery().setGroup(__DS_Student);
      return result;
}

removeTemporaryDSData(String, String, Predicate>)

Form上命令 作用是对临时表数据源数据 删除部分

方法签名

gongqi.erp.gotmodel.util.GongqiFormUtils.removeTemporaryDSData(String, String, Predicate<Map<String, Object>>)

方法入参

  • String formId:指定画面Form的Id 一般通过GotHelper.getEntityId获取
  • String datasource :指定数据源
  • Predicate> predicate:Predicate对象 返回true 移除该数据

示例代码

    public CommandResult buttonOK_Button(CommandArg arg) {
        CommandResult result = new CommandResult();  
        Predicate pda = new Predicate<Map<String,Object>>() {
            @Override
            public boolean test(Map<String, Object> t) {
                //根据 每个记录转换的 map t  判断 是否需要删除  true 删除 false 保留
                return false;
            }
        };
        GongqiFormUtils.removeTemporaryDSData(arg.formParam.formId, __DS_A_TablE,pda);
        //刷新数据
           result.executeQuery();
        return result;
    }

数据更新

临时表数据更新操作

可以使用 数据插入的命令 结合 数据删除清理 操作

tmpRecordRefresh(List<?>)

CommandResult 命令 作用是对临时表数据源 数据根据RecId找出对应记录 进行 更新

方法签名

gongqi.erp.gotmodel.form.remote.CommandResult.tmpRecordRefresh(List<?>)

方法入参

  • List list:列表数据 T 为具体的 临时表对象 也可以是Map

示例代码

public CommandResult buttonOK_Button(CommandArg arg) {
      CommandResult result = new CommandResult(); 
    //获取当前指定记录
    List<Map<String,Object>> selectedMaps = arg.getSelectedMaps();
    for (Map<String, Object> map : selectedMaps) {
        map.put("Name", "newName");
    }
    result.tmpRecordRefresh(selectedMaps).setGroup(__DS_Student);
      return result;
}

[!WARNING]

3.13版本 标记为不可用 不推荐使用

数据获取

临时表的数据获取一个是通过 CommandArg 获取 一个通过 GongqiFormUtils 获取

getAllRecords

得到画面上所有记录 返回一个List ,List中是GongqiRecord对象 可以强转成对应表对象

方法签名

List<? extends GongqiRecord> allRecords = arg.getAllRecords();

方法入参

getCurrentMap

得到当前选中记录(包括DataMethod这样不在表中存在的字段)返回值为一个Map,Map的Key值即字段名或者DataMethod字段的名

方法签名

Map<String, Object> currentMap = arg.getCurrentMap();

方法入参

getCurrentRecord

得到画面上当前的选中记录 返回 GongqiRecord对象 可以强制成对应表对象

方法签名

GongqiRecord currentRecord = arg.getCurrentRecord();

方法入参

示例代码

//获取到画面上SysUser数据源选中的记录 返回 SysUser对象
SysUser user = (SysUser)arg.getCurrentRecord();

getSelectedRecords

得到当前选中的记录

方法签名

List<? extends GongqiRecord> selectedRecords = arg.getSelectedRecords();

方法入参

示例代码

//获取到画面上SysUser数据源选中的记录 返回 SysUser对象
List<SysUser> users = (List<SysUser>)arg.getSelectedRecords();

getTemporaryDSData(String, String, long)

根据RecId 获取临时表数据

方法签名

gongqi.erp.gotmodel.util.GongqiFormUtils.getTemporaryDSData(String, String, long))

方法入参

  • String formId:form的编号

  • String formDataSourceName:数据源名称

  • long recId:recId

示例代码

    public CommandResult buttonOK_Button(CommandArg arg) {
        CommandResult result = new CommandResult();  
        SysReportTable currentRecord =(SysReportTable) arg.getCurrentRecord();
        GongqiFormUtils.getTemporaryDSData(arg.formParam.formId, __DS_A_TablE,currentRecord.getRecId());
        return result;
    }

getTemporaryDSData(String, String, QueryTable)

根据QueryTable 获取临时表数据

方法签名

gongqi.erp.gotmodel.util.GongqiFormUtils.getTemporaryDSData(String, String, QueryTable)

方法入参

  • String formId:form的编号

  • String formDataSourceName:数据源名称

  • long recId:recId

示例代码

    public CommandResult buttonOK_Button(CommandArg arg) {
        CommandResult result = new CommandResult();  
        QueryTable formQuery = arg.getFormQuery();
        formQuery.findOrCreateWhereItem(A_TablE._Nmemmeme).setValue("<>''");
        List<Map<String,Object>> temporaryDSData = 
        GongqiFormUtils.getTemporaryDSData(arg.formParam.formId, __DS_A_TablE,formQuery);
        return result;
    }

getTemporaryDSData(String, String, Predicate>)

根据QueryTable 获取临时表数据

方法签名

gongqi.erp.gotmodel.util.GongqiFormUtils.getTemporaryDSData(String, String, Predicate<Map<String, Object>>)

方法入参

  • String formId:form的编号

  • String formDataSourceName:数据源名称

  • long recId:recId

示例代码

    public CommandResult buttonOK_Button(CommandArg arg) {
        CommandResult result = new CommandResult();  
        Predicate pda = new Predicate<Map<String,Object>>() {
            @Override
            public boolean test(Map<String, Object> t) {
                //根据 每个记录转换的 map t  判断 是否需要  true 需要
                return false;
            }
        };;
        List<Map<String,Object>> temporaryDSData = 
        GongqiFormUtils.getTemporaryDSData(arg.formParam.formId, __DS_A_TablE,pda);
        return result;
    }

results matching ""

    No results matching ""