动态改变填报数据库表(日报表、月报表填报)

编辑
文档创建者:文档助手1 (67727 )     浏览次数:6465次     编辑次数:12次     最近更新:ukae 于 2018-08-02     

1. 问题描述编辑

客户的用户群体很大,涵盖范围很广,为了数据安全,所以将不同区域的数据存在不同的数据库表中,这些数据表的表结构完全一样(即表的字段名,字段类型等等设置完全一样)。所以在数据填报录入时,需要根据用户所在的区域,将用户录入的数据存入不同的数据库表中,如果不同区域使用不同的模板,会加大开发和后期维护的工作量,那么怎么才能在一张模板中实现,根据区域的不同,将数据填报至不同的数据库表中呢,也就是说根据参数将数据存入不同的数据库?

2. 解决思路编辑

报表填报属性添加内置sql,选择数据库和数据表的时候,7.0.5版本及以上版本新增了在选择数据库和数据表的下拉框处传递参数这一功能,即可以在选择数据库和数据表名称的地方直接输入=$参数
222
在模板中添加该参数,并给参数赋值(值应该为数据库名称或者数据表名称),在点击提交按钮的时候,将参数值传递过来,实现入库操作。
注:参数的值为不同的数据表名称,那么所有这些数据表与模板绑定的字段必须完全一样。
另:数据库名称是指FineReport建立的数据连接名称。

3. 示例编辑

以FineReport设计器内置FRDemo的订单表和S订单表为例,往这两张表中插入数据。
3.1 模板设计
新建一张空白模板,如下图所示,往模板中添加控件:
222
控件类型与单元格的对应关系如下图:
  单元格 控件类型 控件数据字典  单元格形态 
  A2  数字控件  无  无
  B2  下拉框控件  实际值:客户表的客户ID,显示值:客户名称  实际值:客户表的客户ID,显示值:客户名称
  C2  日期控件  无  无
  D2  下拉框控件  实际值:运货商表的运货商ID,显示值:公司名称   实际值:运货商表的运货商ID,显示值:公司名称
  E2  下拉框控件  实际值:订单表的货主地区,显示值:货主地区  无
下拉框数据字典和形态的具体设置方式请查看数据字典
3.2 添加参数
点击模板>模板参数,添加两个参数base和table,其中base参数用来传递数据库的名称,table参数用来传递表名,如下图:
222
切换到参数设计面板,将刚刚添加的2个参数全部添加到面板中,base控件和table控件均使用下拉框,如下图:
222
由于FineReport内置的数据连接只有一个FRDemo,故这里的base参数就直接使用FRDemo,不变更其值,只改变table参数的值,下拉框默认值设置请查看下拉框默认值
base参数下拉框的默认值为FRDemo,无需数据字典。
table参数下拉框的默认值为订单,数据字典,如下图:
222
数据字典类型选择自定义,输入所有需要填报的数据表的名称,形成下拉框的下拉选项。
3.3 报表填报属性设置
点击模板>报表填报属性,添加一个内置SQL,数据库后面输入=$base,表后面输入=$table,然后点击智能添加字段,会弹出一个参数输入框,如下图:
222
数据库base参数输入FRDemo,表table参数输入订单。
注:由于参与动态填报的数据库中的数据表中与单元格绑定的字段都是一致的,所以随便选择一组在数据库中存在的数据库名和表名称即可,主要是为了获取需单元格绑定的数据表字段。
选择需要填报入库的字段,然后点击智能添加单元格,将模板总的字段与数据表字段绑定起来,并设置订单ID为主键,如下图:
222
3.4 效果查看
保存模板,点击填报预览,如下图,数据库由于只有一个值,无需选择,即base参数为FRDemo。
注:base参数也是可以改变的,只需要给其赋值即可。
数据表选择订单
web端参数界面上数据表选择订单,即table参数为订单,点击查询,再填报一条记录,提交入库,如下图,即可在订单表中看到多了一条刚刚插入的记录,而S订单表中则没有:
222
数据表选择S订单
web端参数界面上数据表选择S订单,即table参数为S订单,点击查询,再填报一条记录,提交入库,如下图,即可在S订单表中看到多了一条刚刚插入的记录,而订单表中则没有:
222
在线查看模板效果请点击DynamicForm.cpt
已完成模板请参照%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Form\TypicalApp\DynamicForm.cpt

附件列表


主题: 填报应用
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

此页面有帮助吗? [ 去社区提问 ]