在Pentaho中动态生成报告并处理报告定义存储在数据库中

时间:2011-01-12 04:37:56

标签: pentaho

我正在开发一个报告应用程序,用户可以从100个报告的列表中选择(和订购)报告,并要求提供主报告。此主报告将按照确切的顺序包含所有选定的报告,并包含列出主报告中包含的报告的目录。可供用户选择的报告(可能是100个)存储在数据库中。

我的问题是: -

  1. 要使用用户选择的报告生成主报告,我能看到的唯一解决方案是使用Reporting Engine API生成动态报告,我必须将用户选择的报告添加为子报告。这是解决这个问题的最正确和最简单的方法吗?有没有人有报告引擎API用法的样本,特别是在主报告中注入子报告?
  2. 由于我将报告存储在db(blobs)中,因此我试图找到一种方法来生成带有输入流的子报告,而不是ResourceManager.createDirectly(url, MasterReport.class)中指定的URL,但是没有成功直到现在。如何根据存储在数据库中的定义生成报告?应该有一些资源抽象。

1 个答案:

答案 0 :(得分:1)

将报告读入字节数组,然后像往常一样使用ResourceManager.createDirectly方法。这将解决您解析报告的问题。

您可以使用

将它们直接解析为SubReports

ResourceManager.createDirectly(bytes,SubReport.class)

然后可以将这些子报表作为带状子报表添加到主报表中。如果您希望所选报告在新页面上开始,请确保在子报表的报表标题上设置“pagebreak-before”样式。

有一个资源抽象:它被称为“LibLoader”,您可以创建自己的ResourceLoader来处理将数据作为原始数据流从数据库中获取的问题,以便ResourceFactory实现可以解释/解析原始数据-data。

但是每个数据库的设计都不同,因此因为系统集成商必须为它编写粘合代码。我们只能提供接口。