将当前页数据入库

编辑
文档创建者:文档助手1 (67727 )     浏览次数:1751次     编辑次数:6次     最近更新:jiangsr 于 2018-08-23     

目录:

1. 描述编辑

模板多张页面,如一系列的帐簿的模板。每次只打印部分页面(可能是一张,可能是多张,不一定从第一页开始),每次打印后希望触发事件,在数据库中对应位置记录本页面对应的帐簿已经打印过了。每张页面在固定位置有本张帐簿的编号,对应到数据库中有一个记录是否已经打印的记录字段,如只打印第三页时,希望在数据库中编号3457的帐簿所对应的toprint字段值改为true。如下图效果:
222222

2. 思路编辑

可通过报表>报表Web属性>分页预览设置>添加打印后事件,使用JavaScript调用一个jsp的执行事件。若点击打印,就会将当前页的编号获取到,进而通过update语句修改toprint字段的值。

3. 示例编辑

以已部署过FineReport的webroot工程到tomcat服务器为例,其详细过程如下:
3.1 对模板添加打印后事件
打开设计器,打开其tomcat报表工作目录,在菜单中点击报表>报表Web属性>分页预览设置,在右边栏中,如点击添加Flash打印后事件。
在其JavaScript中,输入js代码,目的是调用其webroot工程下写的一个jsp的执行入库操作。
3.2 获取所在页单元格的值
如编号ID在J3单元格,即第三行、第十列,则js方法如下:
var a = $("#r-2-0","div.reportPane").children().eq(9)[0].innerHTML;
注释:$("#r-2-0","div.reportPane") 这个是获取模板当前页第三行,第一行为:"#r-0-0",行号从0开始; 
注释:eq(9)[0] 是获取第10列,第一列为eq(0)[0],列号从0开始。 
注:如果是扩展单元格,则要根据扩展以后所在的行与列来获取。
3.3 通过Ajax把值传到jsp页面
完整代码如下:
var a = $("#r-2-0","div.reportPane").children().eq(9)[0].innerHTML; $.ajax({ url : 'http://localhost:8080/webroot/print1.jsp?ID='+a })
3.4 定义jsp获取编号修改数据库表
定义页面print1.jsp,首先获取编号ID的值,连接数据库通过update语句把表中toprint字段进行修改,代码如下:
package com.fr.io; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import com.fr.base.FRContext; import com.fr.base.Env; public class SaveReportToDatabase { public static void main(String[] args) { SaveReport(); } private static void SaveReport() { try { // 连接数据库 String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@192.168.100.169:1521:orcl10g"; String user = "temp"; String pass = "temp123"; Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, pass); PreparedStatement presmt = conn .prepareStatement("insert into report values(?,?)"); // 读进需要保存入库的模板文件 Env oldEnv = FRContext.getCurrentEnv(); String envPath = oldEnv.getPath(); File cptfile = new File(envPath + "\\reportlets\\gettingstarted.cpt"); int lens = (int) cptfile.length(); InputStream ins = new FileInputStream(cptfile); // 将模板保存入库 presmt.setString(1, "gettingstarted.cpt"); // 第一个字段存放模板相对路径 presmt.setBinaryStream(2, ins, lens); // 第二个字段存放模板文件的二进制流 presmt.execute(); conn.commit(); presmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } }
将其print1.jsp文件放到tomcat服务器的webroot工程下。
3.5 效果预览

启动Web服务器,预览报表,点击Flash打印,打印完之后查看数据库的记录信息表print1,可看到当前页的编号对应的toprint字段值变成true了。

附件列表


主题: 专题总结
标签: 暂无标签 编辑/添加标签
如果您认为本文档还有待完善,请编辑

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

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