动态改变填报数据库表(日报表、月报表填报)
1. 问题描述
客户的用户群体很大,涵盖范围很广,为了数据安全,所以将不同区域的数据存在不同的数据库表中,这些数据表的表结构完全一样(即表的字段名,字段类型等等设置完全一样)。所以在数据填报录入时,需要根据用户所在的区域,将用户录入的数据存入不同的数据库表中,如果不同区域使用不同的模板,会加大开发和后期维护的工作量,那么怎么才能在一张模板中实现,根据区域的不同,将数据填报至不同的数据库表中呢,也就是说根据参数将数据存入不同的数据库?
2. 解决思路
在模板中添加该参数,并给参数赋值(值应该为数据库名称或者数据表名称),在点击提交按钮的时候,将参数值传递过来,实现入库操作。
注:参数的值为不同的数据表名称,那么所有这些数据表与模板绑定的字段必须完全一样。
另:数据库名称是指FineReport建立的数据连接名称。
3. 示例
以FineReport设计器内置FRDemo的订单表和S订单表为例,往这两张表中插入数据。
3.1 模板设计
新建一张空白模板,如下图所示,往模板中添加控件:
控件类型与单元格的对应关系如下图:
单元格 | 控件类型 | 控件数据字典 | 单元格形态 |
---|---|---|---|
A2 | 数字控件 | 无 | 无 |
B2 | 下拉框控件 | 实际值:客户表的客户ID,显示值:客户名称 | 实际值:客户表的客户ID,显示值:客户名称 |
C2 | 日期控件 | 无 | 无 |
D2 | 下拉框控件 | 实际值:运货商表的运货商ID,显示值:公司名称 | 实际值:运货商表的运货商ID,显示值:公司名称 |
E2 | 下拉框控件 | 实际值:订单表的货主地区,显示值:货主地区 | 无 |
下拉框数据字典和形态的具体设置方式请查看数据字典
3.2 添加参数
点击模板>模板参数
,添加两个参数base和table,其中base参数用来传递数据库的名称,table参数用来传递表名,如下图:切换到参数设计面板,将刚刚添加的2个参数全部添加到面板中,base控件和table控件均使用下拉框,如下图:
由于FineReport内置的数据连接只有一个FRDemo,故这里的base参数就直接使用FRDemo,不变更其值,只改变table参数的值,下拉框默认值设置请查看下拉框默认值。
base参数下拉框的默认值为FRDemo,无需数据字典。
table参数下拉框的默认值为订单,数据字典,如下图:
数据字典类型选择自定义,输入所有需要填报的数据表的名称,形成下拉框的下拉选项。
3.3 报表填报属性设置
点击模板>报表填报属性,添加一个=$base,表后面输入=$table,然后点击 ,会弹出一个参数输入框,如下图:
,数据库后面输入数据库base参数输入FRDemo,表table参数输入订单。
注:由于参与动态填报的数据库中的数据表中与单元格绑定的字段都是一致的,所以随便选择一组在数据库中存在的数据库名和表名称即可,主要是为了获取需单元格绑定的数据表字段。
选择需要填报入库的字段,然后点击
,将模板总的字段与数据表字段绑定起来,并设置订单ID为主键,如下图:3.4 效果查看
保存模板,点击填报预览,如下图,数据库由于只有一个值,无需选择,即base参数为FRDemo。
注:base参数也是可以改变的,只需要给其赋值即可。
数据表选择订单
web端参数界面上数据表选择订单,即table参数为订单,点击查询,再填报一条记录,提交入库,如下图,即可在订单表中看到多了一条刚刚插入的记录,而S订单表中则没有:
数据表选择S订单
web端参数界面上数据表选择S订单,即table参数为S订单,点击查询,再填报一条记录,提交入库,如下图,即可在S订单表中看到多了一条刚刚插入的记录,而订单表中则没有:
在线查看模板效果请点击DynamicForm.cpt
已完成模板请参照%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Form\TypicalApp\DynamicForm.cpt
附件列表
主题: 填报应用
标签:
已验证