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

在一些项目进行实施的时候,应用的数据库用户名和密码往往都是临时的,而在项目上线后应用的数据库才是正式的。这样,我们在设计填报表的更新属性时,在更新属性中的模式名就不能固定下来,那么,我们怎样才能动态设置报表模版中更新属性的模式名呢?

在润乾报表中,对于填报式报表,系统为程序员提供数据保存前后的监听器接口,即用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对象、报表运行环境对象、获得前端提交的数据、修改前端提交的数据,因此利用填报监听类可以检查用户登录信息、操作权限、数据有效性或其他信息,而不用额外改动报表模版,实现了批量处理的效果。

热门文章