JasperReports Server无法找到子报告

时间:2014-09-22 12:02:20

标签: jasper-reports jasperserver subreport

我有一个主报告,它调用一个子报告,该报告调用另一个子报告 我在报告工作室里有一个叫做dash2的所有3个。

当我在主报表上使用报表工作室部署到* JasperReports Server *时,它似乎也部署了第一个子报表(但不是子子报表)。好吧,如果我右键单击报告并选择编辑,然后选择控制和资源,它会列出子报告。

如果我逐个手动部署所有3个报告,我会在 Jaspersoft Studio 的报告文件夹中看到所有这三个报告。但是,如果我尝试运行主报告,我会得到:

Error filling report
net.sf.jasperreports.engine.JRException: Resource not found at : dash2/dash-kpi.jasper

所以它在dash2中寻找子报告。所以我在主报告文件夹下创建了一个名为dash2的目录,并将子报告复制到其中。同样的错误。所以我手动复制了与报告工作室相同的结构 - 没有快乐。它永远找不到子报告。

在主报告中,它有这个条目:

<subreportExpression><![CDATA["dash2/dash-kpi.jasper"]]></subreportExpression>

任何想法如何解决?

它在报告工作室中运行良好。

编辑:尝试删除&#34; dash2 /&#34;从资源名称前面。没有帮助。

Edit2:尝试将所有出现的dash2 / xxx.jasper发送到repo:xxx.jrxml。这打破了jasper工作室:

  1. 报告不再适用于工作室
  2. 上传主报告时,它不再识别相关子报告,也不会上传它们。
  3. 我尝试手动部署所有报告,但无法将主报告与jasper服务器中的现有子报告相关联。他们提供的唯一选择是编辑主报告,并手动上传jrxml文件作为资源。我尝试了这个,但没有帮助,仍然无法找到它们:

     Repository file resource /reports/dashboard_files/dash_kpi.jrmxl could not be loaded
    

    有趣的是,它使用了一个名为dashboard_files的目录,它不存在。在任何报告jrxml文件中都没有引用此目录。

2 个答案:

答案 0 :(得分:2)

经过多次痛苦,我找到了解决方案。似乎jasper工作室对于嵌套的子报告并不是很好。这是一个高级别的解决方案,至少适用于服务器5.6和Studio 5.6:

  1. 从工作室中将子报告定义为“xxx.jasper”的报告开始。
  2. 将主报告部署到jasper服务器。它会询问您是否要部署子报告(但不是它们的子报告)。但是,它做得不对,我们必须解决它。
  3. 现在从studio(aka repository explorer)连接到服务器
  4. 您的报告将位于SErvers-&gt;您的服务器 - &gt; Reports-&gt; reportname-&gt; Main.jrxml下。右键单击它并选择属性。选择“资源编辑器”选项卡。
  5. 复制父文件夹路径。例如/报告/ myreport_files
  6. 现在回到工作室。编辑您拥有“xxx.jasper”的所有报告和子报告中的每个位置,并将其替换为“repo:/reports/myreport_files/xxx.jrxml”
  7. 保存所有内容
  8. 再次部署主报告。
  9. 在Jasper Server中
  10. ,找到报告,右键单击它并选择EDIT
  11. 点击“控件和资源”。
  12. 删除所有资源
  13. 现在通过手动上传每个jrxml文件来添加每个子报告。确保您为文件指定相同的名称和ID,例如my_sub_report.jrxml
  14. 祈祷它有效。
  15. 注意1:如果您的子报告名称中有任何“ - ”,它们将转换为“”,它将找不到它们。使用“ - ”重命名所有子报表以使用“”insead,删除并重新部署。

    注意2:现在您的报告无法在工作室中使用。好一个碧玉。您可以尝试使用参数,例如:

    $P{IsOnServer} ? "repo:/reports/myreport_files/my_sub.jrxml" : "my_su.jasper"
    

    并创建参数默认为true,但我无法使其工作。

    这些家伙的主要功劳:

答案 1 :(得分:0)

我通过简单地不使用onServer参数克服了这个问题。 如果只放置文件名,Studio可以抓取此文件并自动部署。 奇怪的是,这也可以在服务器上运行。