报表知识库
我要提问

通过填报监听类获取行式填报表的填报数据

行式填报表是润乾报表提供的一种特殊的填报表,它相对于普通的填报表而言具有以下优点:
1 在网页上可以动态地实现增加、删除、修改行的数据
2 增加行时可以引用定义的流水号,实现流水号在增加行时自动运算(如递增)的功能
3 可以实现在网页上动态地导入不定行的excel数据

除了上述的强大功能外,行式填报表还可以利用润乾报表提供的填报监听类来实现一些特殊功能,在填报前后进行自己的业务操作。这里就以获取行式填报表的填报数据为例来介绍填报监听类的使用。

报表提交的时候涉及到三种对数据库的操作:插入(insert) 、删除(delete) 、更新(update)。

行式填报表在提交时的具体体现是:
(1) 在原有数据基础上进行了修改,提交时执行的是update
(2) 在原有数据基础上删除删除了某行,提交时执行的是delete
(3) 在原有数据基础上插入新一行数据,提交时执行的是insert

那么我们就可以通过继承填报监听类AbstractInputListener 在beforeSave()函数中获取提交的sql语句,然后在返回的sql语句中进行遍历,查看有没有包含”insert”的字符串,如果有则说明这就是我们想要的插入新数据的sql语句,然后再在其中取出填报的数据即可。

具体实现如下:

//需要引用的类
import com.runqian.report4.usermodel.input.AbstractInputListener;
import com.runqian.report4.usermodel.input.InputSQL;

//继承bstractInputListener 实现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<param.length;j++){
String name=param[j].toString();
System.out.println(name);
}
} }}}