您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将自定义数据源添加到Jaspersoft Studio

将自定义数据源添加到Jaspersoft Studio

例如adapter.xml,通过用户界面创建数据适配器文件内容可能类似于:

<?xml version="1.0" encoding="UTF-8" ?>
<beanDataAdapter class="net.sf.jasperreports.data.bean.BeanDataAdapterImpl">
    <name>YourClass</name>
    <factoryClass>com.yourcompany.jasper.JRDataSourceFactory</factoryClass>
    <methodName>createCollection</methodName>
    <useFieldDescription>false</useFieldDescription>
</beanDataAdapter>

createCollection根据上面的数据适配器定义,创建具有方法的类:

package com.compay.jasper;

public class JRDataSourceFactory {
    /**
     * @return A collection of data for the report.
     */
    public static Collection<YourClass> createCollection() {
        return Arrays.asList( new YourClass() );
    }
}

确保报告具有以下属性(将报告链接自定义数据适配器):

<property name="com.jaspersoft.studio.data.defaultdataadapter" value="adapter.xml"/>

现在,报告字段应能够引用Bean属性

<field name="yourObject.property" class="java.lang.String">
    <fieldDescription><![CDATA[yourObject.property]]></fieldDescription>
</field>

重要的是,该fieldDescription元素必须包含一个反映bean属性的值(即,通常会调用该Java代码以从该bean实例上的bean中检索值)。

JRDataSourceFactory班是独一无二的- 它使用的数据适配器创建bean实例的集合。该static方法createCollection在这里做的工作并没有,确实不能,使用继承。

如果可能,请从Bean的属性中借用报告的字段名称。问题中编写的代码很难区分其价值KN_Id来自何处。

下面的示例将数据适配器链接到报表中的字段名称

Bean公开了一些属性

package com.company.domain;

public final class Student extends Entity {
    private String firstName;
    private String lastName;

    public String getFirstName() {
        return this.firstName;
    }

    public String getLastName() {
        return this.lastName;
    }
}

数据适配器如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<beanDataAdapter class="net.sf.jasperreports.data.bean.BeanDataAdapterImpl">
    <name>Student</name>
    <factoryClass>com.company.jasper.JRDataSourceFactory</factoryClass>
    <methodName>createCollection</methodName>
    <useFieldDescription>false</useFieldDescription>
</beanDataAdapter>

数据类创建bean的实例:

package com.compay.jasper;

import com.company.domain.Student;

public class JRDataSourceFactory {
    public static Collection<Student> createCollection() {
        return Arrays.asList( new Student() );
    }
}

报告字段反映了bean字段:

<field name="firstName" class="java.lang.String">
    <fieldDescription><![CDATA[firstName]]></fieldDescription>
</field>
<field name="lastName" class="java.lang.String">
    <fieldDescription><![CDATA[lastName]]></fieldDescription>
</field>

一组“学生”实例被传递到报告中。在此示例中,集合包含一个实例。在您的示例中,集合可能包含许多实例。正如报告库遍历集合,不同的价值观firstName,并lastName会提供。

Student最初如何填充实例数据的机制不在此答案的范围内。就报告工具而言,它仅使用的预填充实例Student。如果FillTable填充TableCells,则报表工具无需担心。

其他 2022/1/1 18:28:27 有418人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶