使用wabacus框架实现不同数据源的控制数据记录集做法

[size=large] 前段时间写了一篇《使用wabacus框架实现多个数据源集合到一个报表上中的做法》小文章,在这篇文章中主要做法是:怎么在把不同数据源的数据栏位集合到一个报表中,其中主要是在拦截器中使用 wabacus的ReportDataAssistant.getInstance().setColValue 方法来实现的,有需要深入了解的朋友可以看我前一篇文章。
随着需求的不断加深,使用此方法还不能满足需求,因为如果你要在报表中查询第二数据源的数据的时候,使用此方法是不能满足要求的,所以我们要使用控制数据记录集的做法来自己构造集合,实现报表的展示。
[size=large]首先我们的report头部应该这些写[/size]:[/size]
[img]http://dl.iteye.com/upload/picture/pic/113842/51807bd7-9f5f-3e02-9cc6-b422f61b866d.png[/img]

[size=large]其次我们在拦截器中应该这些写:[/size]
[img]http://dl.iteye.com/upload/picture/pic/113846/d421abf5-7699-353c-a9a4-d4ac5e4a8dc6.png[/img]
[size=large] 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");

}


}


这样我们不仅可以查询分类第一数据源数据栏位,而且也可以查询第二数据源数据栏位。[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值