1.5 Javabean数据集
概述
从V5.0版本开始,UniEAP Report支持JavaBean数据源,即使用JavaBean对象作为数据来源。与API数据源类似,用户通过实现特定的接口,可以自由决定数据的获取或生成方式,让报表使用的数据可以有任意的来源,例如Web Service、其他应用程序、NoSQL数据库等等。
相比于API数据源,JavaBean数据源的实现要简单不少,主要是因为要实现的接口方法大大减少了。但要求是作为数据源的对象必须是标准的JavaBean,具体来说,要满足以下几点要求:
类必须是具体的和公共的。
具有一个无参数的构造方法。
属性必须私有化。
私有属性必须通过公共的get和set方法暴露给其他程序,并且方法命名要遵守一定的命名规范。
实现步骤
下面举例说明JavaBean数据源的实现步骤:
1.提供一个JavaBean的实现类,注意要满足上面提供的四点要求,该类的每个成员属性会成为数据源中的一个字段。例如下面的Customer类:
public class Customer {
private long customerId;
private String name;
// 0: 男,1: 女
private byte sex;
private Date birthday;
public Customer(long customerId, String name, byte sex, Date birthday) {
this.customerId = customerId;
this.name = name;
this.sex = sex;
this.birthday = birthday;
}
public long getCustomerId() {
return customerId;
}
public void setCustomerId(long customerId) {
this.customerId = customerId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public byte getSex() {
return sex;
}
public void setSex(byte sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
2.提供一个用于获取数据(JavaBean对象集合)的类,该类必须实现接口com.neusoft.report.dataset.executer.javabean.JavaBeanDataQuerier,该接口只有一个要实现的方法,用于返回数据,定义如下:
public interface JavaBeanDataQuerier {
/**
* 返回数据
*
* @param params 报表参数集合
* @param context 生成报表的上下文
* @return 指定类型的bean列表
*/
public List<?> query(Map params, Map context);
}
注意这里没有使用泛型,而是可以返回的是任意类型的列表,目的是允许用户使用同一个实现类返回不同类型的JavaBean对象。
如下是返回Customer列表的实现类:
public class CustomerQuerier implements JavaBeanDataQuerier {
public List<?> query(Map params, Map context) {
/** 获取报表参数的两种方法 **/
// 直接从map中获取
// int type = DataValueUtil.intValue(((DataValue) params.get("type")));
// 通过请求对象获取
// HttpServletRequest r = (HttpServletRequest) context.get("HTTP_REQUEST");
// int type2 = Integer.valueOf(r.getParameter("type"));
// 使用上面取到的报表参数值,从数据库、其他应用程序等获取数据。这里为了简单,直接使用固定的数据
List<Customer> customers = new ArrayList<Customer>();
customers.add(new Customer(1, "王先生", (byte) 0, new Date()));
customers.add(new Customer(2, "林女士", (byte) 1, new Date()));
customers.add(new Customer(3, "方先生", (byte) 0, new Date()));
customers.add(new Customer(4, "刘小姐", (byte) 1, new Date()));
return customers;
}
}
这里为了简单,只是直接返回固定的数据。另外演示了通过入参获取要用到的值的方法。
3.在\WEB-INF\conf\unieap\report\datasource.xml文件中添加JavaBean数据源的配置,例如:
<Category Name="javabean" Caption="JavaBean 数据源" SourceClass="com.neusoft.report.dataset.datasource.impl.JavaBeanDataSource"
QuerierClass="com.neusoft.report.dataset.executer.javabean.JavaBeanDataSetExecuter">
<DataSource Name="JavaBean数据源示例" Caption="JavaBean数据源示例">
<Parameters>
<Param Name="beanClassname" Value='com.neusoft.report.sample.dataset.javabean.Customer'/>
<Param Name="dataClassname" Value='com.neusoft.report.sample.dataset.javabean.CustomerQuerier'/>
</Parameters>
</DataSource>
</Category>
<Category Name="javabean" Caption="JavaBean 数据源" SourceClass="com.neusoft.report.dataset.datasource.impl.JavaBeanDataSource"
QuerierClass="com.neusoft.report.dataset.executer.javabean.JavaBeanDataSetExecuter">
<DataSource Name="JavaBean数据源示例" Caption="JavaBean数据源示例">
<Parameters>
<Param Name="beanClassname" Value='com.neusoft.report.sample.dataset.javabean.Customer'/>
<Param Name="dataClassname" Value='com.neusoft.report.sample.dataset.javabean.CustomerQuerier'/>
</Parameters>
</DataSource>
</Category>
其中每个DataSource对应一个数据源,不再有DataEntity的配置,DataSource有两个必须的参数,含义如下:
beanClassname:指定数据源中包含哪些字段的JavaBean实现类,例如Customer。
dataClassname:指定为报表提供数据的查询者实现类,例如CustomerQuerier。
字段类型限制
由数据源生成报表可用的数据集之前,需要先将数据源中的字段类型(对于JavaBean来说就是类的成员属性的Java类型)转换为报表支持的类型(在com.neusoft.report.commonbase.datavalue.DataValue中定义了常量),并不是所有的Java类型都被支持,目前支持的类型、及报表引擎中与之对应的常量见下表:
Java类型 | DataValue类中对应的常量 |
---|---|
String | DataValue.STRING |
Double, Float, double, float | DataValue.DECIMAL |
Integer, Long, Byte, Short, Character,int, long, byte, short, char | DataValue.INTEGER |
Boolean, boolean | DataValue.BOOLEAN |
java.util.Date | DataValue.DATETIME |
创建Javabean数据集
(1)在数据集管理菜单上,点击“+”按钮,选择Javabean数据集,如下图所示:
(2)选择配置好的数据源并添加标题名称,如下图所示:
(3)点击下方确定即成功创建数据集,如下图所示: