问题
FineReport 使用JS实现数据库更新(自动更新,不用点击按钮)
问题描述
数据库中部分表数据按照一段时间需要更新(如:每个月更新一次),这样数据库中的数据相关数据的部分值是相同的,需要让每一个月的月份更新后,数据库中其他表对应的关系也自动更新。
具体步骤
创建决策报表frm
具体包括的组件:
一个按钮控件(两个文本框(可隐藏)):用于更新月份表
一个网页框控件:用于刷新分数表(可隐藏,初始化时的网页url为空)
创建普通报表cpt
包括组件:
相关需要更新数据的查询
一个按钮控件
frm报表相关处理
月份更新文本控件控件值参考公式代码:year(now())+"-"+month(now())
按钮相关设置:
设置两个点击事件:
- 点击1:设置提交入库事件-入库的值是
文本框控件名作为动态参数的值
- 点击2:设置JavaScript脚本
注:链接尾部的参数不要忘记添加:&op=write
此参数的目的是以填报形式打开报表
- 点击1:设置提交入库事件-入库的值是
//点击2的js
var rhiframe0 = _g().getWidgetByName('rhiframe0');
rhiframe0.setValue("${servletURL}?viewlet=文件夹路径/month_update.cpt&op=write");
cap报表相关处理
- 添加一个提交按钮控件
- 添加数据库查询的数据列到单元格中
按钮控件的事件设置
初始化事件(使用初始化事件可以不用执行点击相关事件)
- 选择提交入库(这里不直接选择js脚本的原因是最开始初始化时还没有查询到数据库的值到单元格中,使用提交入库的回调函数后单元格中有数据,可以使用后面的点击事件进行数据提交),然后选择回调函数,回调函数选择js脚本
点击事件
- 选择提交入库(这里的是真正的把查询到单元格中的值提交到数据库中)
//初始化事件提交入库的回调js
//submit2: 当前按钮的控件名
submit2 = _g().getWidgetByName('submit2');
//赋予按钮点击事件
submit2.fireEvent('click');
- 初始化事件图片
- 点击事件图片