通过填报监听类获取行式报表的填报数据
行式填报表是快逸报表提供的一种特殊的填报表,它相对于普通的填报表而言具有以下优点:
1.在网页上可以动态地实现增加 删除 修改行的数据
2. 增加行时可以引用定义的流水号,实现流水号在增加行时自动计算的功能
3.可以实现在网页上动态地导入不定行的excel数据
除了上述的强大功能外,行式填报表还可以利用快逸报表提供的填报监听类来实现一些特殊功能,在填报前后进行自己的业务操作。本文就用一个填报前获取行式报表每次插入数据的例子来让他家了解一下快逸的填报监听类。
获取每次插入新数据的思路:
报表提交的时候涉及到三种对数据库的操作:
插入(insert) 删除(delete) 更新(update)
行式填报报表具体体现是:
(1) 在原有查询的基础上修改数据提交时执行的是update
(2) 在原有查询基础上删除查询出来的数据的某一行提交时执行的是delete
(3) 在原有查询的基础上插入一行数据提交时执行的是insert
清楚插入数据执行的是insert以后我们就可以通过继承填报监听类AbstractInputListener 在beforeSave()函数中获取提交的sql语句,然后在返回的InputSQL类型的sq语句中进行遍历,查看有没有包含”insert”字符串,如果含有则说明InputSQL组中的元素就是包含我们想要的插入的新数据的sql语句,然后在根据需要在sql语句中取出填报的数据。
具体实现如下:
//需要引用的类
import com.runqian.report4.usermodel.input.AbstractInputListener;
import com.runqian.report4.usermodel.input.InputSQL;
//继承abstractInputListener 实现beforeSave()函数
public class RowsInputListener extends AbstractInputListener {
public void beforeSave()throws Exception {
InputSQL[] abc = this.getInputSql();
for(int i=0;i< this.getInputSql().length;i++){
String sql = abc[i].getSql();
InputSQL sql1=abc[i];
if(sql.matches(”insert.*”)){
//判断是否是新增的记录,如果是则从InputSQL 对象中获取对应填报的数据
System.out.println(”这是insert语句”+sql);
Object []param =sql1.getParams();
for(int j=0;j
String name=param[j].toString();
System.out.println(name);
}
public void afterSave()throws Exception {
// 填报数据后如果还有其它业务逻辑,可以在函数afterSave中实现
}} }}}