使用wabacus框架实现不同数据源的控制数据记录集做法
前段时间写了一篇《使用wabacus框架实现多个数据源集合到一个报表上中的做法》小文章,在这篇文章中主要做法是:怎么在把不同数据源的数据栏位集合到一个报表中,其中主要是在拦截器中使用 wabacus的ReportDataAssistant.getInstance().setColValue 方法来实现的,有需要深入了解的朋友可以看我前一篇文章。
随着需求的不断加深,使用此方法还不能满足需求,因为如果你要在报表中查询第二数据源的数据的时候,使用此方法是不能满足要求的,所以我们要使用控制数据记录集的做法来自己构造集合,实现报表的展示。
[size=large]首先我们的report头部应该这些写:[/size]
其次我们在拦截器中应该这些写:
1,这个是接受报表查询的条件值
2,这里在如果sql=sql.replaceAll 这样写,那么第一次循环的时候,就把"%mycondition%替换掉了,第二次循环时,已经没有这个占位,所以我们这样写 String sqltemp=sql.replaceAll就可以了。
3,在这里一般"count(*)">0的,但是如果你的sql里面有count(*)的话就会出问题。因为如果有count(*),框架就会执行lstResults.add(rs.getInt(1));两遍。
4,如果是空值就会抛出未刷卡的人员名单。(这个地方是个集合)
5,这里就开始构造自己的数据集合了。
最后如果你要想传值到报表就可以用: rrequest.setAttribute来传值,但是一般在format中接受值的时候,你会发现根本接受不到拦截器中的值,为什么呢?是因为我这是在加载数据前置运作中自己构造结果集,而不是由框架来执行你的SQL语句构造结果集,并且我自己开发了存放报表数据的POJO类work1,不是由框架自动生成,所以pojo.format(rrequest,rbean);
不会调用<format/>标签中的格式化方法,而是调用我的类work1 自己的format()方法。
所以你只要将代码:
String wafer= (String)rrequest.getAttribute("name");
写到work1的format()方法中即可。
其中POLO对象代码如下:
package com.wabacusdemo;
import com.wabacus.config.component.application.report.ReportBean;
import com.wabacus.system.ReportRequest;
import com.wabacus.system.format.IFormat;
public class work1 implements IFormat
{
private String ssn;
private String name;
private String checktime;
private String sensorid;
private String dpnm;
private String number;
public String getDpnm() {
return dpnm;
}
public void setDpnm(String dpnm) {
this.dpnm = dpnm;
}
public String getSsn() {
return ssn;
}
public void setSsn(String ssn) {
this.ssn = ssn;
}
public String getChecktime() {
return checktime;
}
public void setChecktime(String checktime) {
this.checktime = checktime;
}
public String getSensorid() {
return sensorid;
}
public void setSensorid(String sensorid) {
this.sensorid = sensorid;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void format(ReportRequest rrequest,ReportBean rbean){
//String bumen = (String)rrequest.getStringAttribute("bumen","");
//String wafer=(String)rrequest.getAttribute("namescj");
}
}
这样我们不仅可以查询分类第一数据源数据栏位,而且也可以查询第二数据源数据栏位。