利用填报监听类动态设置更新模式名

在一些项目进行实施的时候,应用的数据库用户名和密码往往都是临时的,而在项目上线后应用的数据库才是正式的。这样,在设计填报表的更新属性时,就需要在更新属性中动态的设置模式名。

润乾报表中对于填报式报表,系统为程序员提供数据保存前后的监听器接口,即用tag标签中inputListener属性指定一个java类名,此java类必须从com.runqian.report4.usermodel.input. AbstractInputListener类继承,并实现beforeSave()、afterSave()方法,保存数据前后的处理代码分别写在这两个方法中。

根据填报监听类的特性,将动态设置报表模版中更新属性的模式名的代码写到beforeSave()方法中,这样就可以实现在填报前设置模式名,从而保证更新顺利进行了。

第一步:先打开一张普通填报表,查看更新属性中的模式名:



先不设置模式名,在后面的填报监听类中设置。

第二步:编写填报监听类:

package com.runqian.input;
import com.runqian.report4.usermodel.*;
import com.runqian.report4.usermodel.input.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class MyInputListener extends AbstractInputListener
{
//构造方法
public MyInputListener()
{
}
//保存前的处理方法
public void beforeSave()
throws Exception
{
//取得第二行第一个单元格的更新属性
INormalCell iCell = report.getCell(2, (short)1);
InputProperty ip = iCell.getInputProperty();
if (ip != null)
{
ArrayList list = ip.getUpdateList();
int listSize = list.size();
//获取更新属性集合
for (int i = 0; i < listSize; i++)
{
UpdateProperty up = (UpdateProperty)list.get(i);
//up.setMode(UpdateProperty.MODE_CUSTOM);
//up.setMode((byte)3);
TableRelations trs = (TableRelations)up.getRelation();
//设置模式名
trs.setSchema(”public”);//这里根据具体的模式名可以做到动态设置
}
}
}
//保存后的处理方法
public void afterSave(){
}
}

第三步:在展现报表的标签中增加inpuListener的属性:

<report:html name=”report1″ reportFileName=”<%=report%>”
funcBarLocation=”top”
needPageMark=”yes”
generateParamForm=”no”
params=”<%=param.toString()%>”
exceptionPage=”/reportJsp/myError2.jsp”
inpuListener=”com.runqian.input.MyInputListener ”
/>

这样,在更新的时候就会首先进入到填报监听类里面,设置模式名后再进行更新。

在监听器类中可以使用session对象、request对象、response对象、报表运行环境对象、获得前端提交的数据、修改前端提交的数据,因此利用填报监听类可以检查用户登录信息、操作权限、数据有效性或其他信息,而不用额外改动报表模版,实现了批量处理的效果。

你可能感兴趣的:(java,设计模式,jsp,UP)