1. 概述编辑
1.1 问题描述
希望在导入 Excel 数据并提交之前,清空原数据库表的数据,如下所示:
1.2 实现思路
在设置填报属性时,内置sql里面的提交事件,其执行顺序是在内置sql结束之后的。所以可以利用这个特性,在内置sql中设置删除提交清空表,然后在提交事件中设置智能提交或者插入提交来插入数据。
该方式能保证事务的一致性,如果数据插入失败了,那清空表的操作也会回滚。
2. 示例编辑
2.1 准备数据
新建普通报表,添加数据库查询 ds1,SQL 语句: SELECT * FROM 产品
2.2 设计表格
已知 Excel 表: 导入Excel前清空表.xlsx
在设计器中,按照 Excel 表设计表格,B3 单元格设置「单元格属性>扩展方向」为「纵向」,如下图所示:
注:本例设计表格时未添加控件,只支持导入数据,无法修改,可自行添加。
2.3 设置填报属性
点击「模板>报表填报属性」,添加一个内置 SQL 提交,提交类型为「智能提交」,选择 FRDemo 中的「产品」表,智能添加所有字段,并添加对应单元格,勾选「产品ID」作为主键。步骤如下图所示:
2.4 设置提交事件
1)点击「模板>模板 Web 属性>填报页面设置」,选择「为该模板单独设置」,设置工具栏工具为「提交」和「导入 Excel 」,添加 「Excel 导入前」事件:
2)事件类型选择「提交入库」,提交类型选择「删除提交」,选择需要清空的数据表,通过添加字段添加主键「产品 ID」,值使用公式SQL("FRDemo","SELECT 产品ID FROM 产品",1) 查询出所有主键 ID 。
2.6 效果预览
保存报表,点击「填报预览」,效果如 1.2 节预期效果一致。
注:不支持移动端。
3. 模板下载编辑
已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\demo\form\导入Excel前清空表.cpt。
点击下载模板:导入Excel前清空表.cpt