我正在考虑将JasperReports嵌入到现有的Web应用程序中进行报告。 webapp位于现有数据库之上,该数据库古老而复杂,并且不适合报表编写者直接编写报表。
我想看的是在我们现有的数据访问层周围编写一些包装器(编写,以便让我们的生活更轻松地与前面提到的古老和复杂的数据库交谈)。有没有人有为JasperResports编写自定义数据源的经验,或做过这样的事情?
更新
我想我可能在我的问题中并不清楚 - 这可能是因为我的要求也不清楚。我想提供一些方法,最终用户可以使用像iReport这样的东西来编写针对数据库的报告,然后使用JasperReportServer来安排/查看报告。但是,数据库确实非常糟糕,并且从未设计过以这种方式使用。我们周围有一个访问层,webapp用它来与之交谈。我想让我的最终用户完全远离数据库,并且使用访问层的自定义数据源的想法似乎是一个不错的选择。但是,我发现很少有关于如何做到这一点的文档。也许它比我想象的要简单得多,而我只是想让一个简单的事情变得太复杂。
更新
感谢您的回答。我不认为我的问题已经解决,但我认为答案有助于告知需求阶段。
答案 0 :(得分:4)
Jasper报告允许您使用“JavaBean”数据源。您可以将数据加载到任何Java Bean结构中,并根据该结构构建报告。效果很好。
请参阅“自定义数据源”部分here。
答案 1 :(得分:3)
每个JasperReports模板都可以有两个不同的数据源。一种是使用一些jdbc驱动程序将它直接挂接到数据库,或者在您的情况下,提供一组java bean(POJO),通常是列表。
JasperReports模板类似于方法定义。它有一个名称,即编译的JR对象和参数(数据源和一些最流行的Java类型的输入参数列表)。
我的建议是使用iReport工具。打开JasperReports包附带的一些示例,分析并调整它。它并不复杂。
<强>更新强>
让客户编写JasperReports模板,编译并添加到类路径意味着您需要过多地打开系统。通常客户端提供所需报告的描述,开发人员创建数据源并设计模板。 JasperReports可以有参数。如果通过UI公开这些参数,则用户可以更改运行时报告的行为。
如果您确实需要提供更大的灵活性,请使用JasperReports提供的API来创作模板。我可以想象一些简单的DLS可供高级用户与您的系统进行通信,从而创建动态报告。