2009-09-07 136 views
1

以下的.jrxml報告時:iReport的:編譯錯誤與報表

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="DTC-Campaigns-Block-Campaigns-Helper-Campaigns" language="groovy" pageWidth="794" pageHeight="450" orientation="Landscape" columnWidth="794" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0"> 
    <queryString><![CDATA[SELECT 1;]]></queryString> 
    <detail> 
     <band height="50" splitType="Stretch"> 
      <subreport> 
       <reportElement x="0" y="0" width="794" height="25"/> 
       <subreportExpression class="java.lang.String"><![CDATA["./test.jasper"]]></subreportExpression> 
      </subreport> 
     </band> 
    </detail> 
</jasperReport> 

不會內的iReport 3.6.0編譯:

Compiling to file... /home/dominik/workspace/project1/reporting/MyFile.jasper 
Compiling subreports.... 
Unable to locate the subreport with expression: "$P{SUBREPORT_DIR} + "test.jasper"". 

即使固定SUBREPORT_DIR./不會幫助,在主報告之前,都不會手動編譯test.jrxml

任何想法?

回答

0

問題不會出現與JasperReports的較新版本(至少在我的情況下)的任何更長的時間。

0

你不能確定當前目錄下,把它作爲一個參數?我就是這麼做的,而且效果很好。如果您要將Jasper Reports集成到代碼中,您甚至可以使用一些代碼來獲取Java中當前目錄的完整路徑並通過HashMap傳遞它。

+0

那麼,我甚至沒有從我自己的Java應用程序,而是從iReport中啓動它。 – 2009-09-30 10:03:40

+0

您可以設置參數的默認值,並提示用戶在必要時進行更改。 Jasper似乎設置爲只使用_full_路徑,而不是您嘗試的相對路徑(./foo)。相對路徑比較方便一些,但只有在集成到程序中時纔是必需的,無論如何您都可以從相對路徑中確定完整路徑。 – sventechie 2009-09-30 15:21:30

1

在JRXML提取物,你不指定SUBREPORT_DIR是一個字符串參數...您可以將此信息。

我也注意到行爲version 3.5.2 and 3.5.3 更新日誌的3.5.3版本之間的變化說:

子報表的自動編譯

因此報表參數多路徑不似乎工作任更長... (但我記得得到警告,而不是失敗)。

你試過:

  • 只編譯報表(使用的iReport)。 [預覽會產生jrxml的編譯版本的jasper文件]
  • 要爲jrxml文件(而不是Jasper文件)提供表達式$P{SUBREPORT_DIR} + "test.jrxml",並且根本沒有參數(例如"test.jrxml" - 您的子報告需要在相同的本地目錄作爲您的主報告)
0

爲了解決這個問題,你必須設置在$ P {} SUBREPORT_DIR的絕對路徑。

它可以在iReport的進行在屬性窗口,在屬性「默認值表達式」。

爲了更好的說明,請參見:http://jasperforge.org/plugins/espforum/view.php?group_id=83&forumid=101&topicid=62793

+4

但是,只有報告總是在相同的目錄結構中編譯時纔有效。如果我在本地機器上創建報告並將其移至服務器以供稍後進一步處理,該怎麼辦?無論如何,現在我只需將所有源文件放入一個文件夾。 – 2010-06-28 07:00:24

0

你沒有需要在報表SUBREPORT_DIR ......只要supreport是在同一個目錄像主報告..就不會有問題。 ..compilation發生,當你預覽JRXML文件...

+2

但是如果它們不在同一個目錄中 - 通常是更清潔的結構? – 2010-08-17 09:54:52

0

在我的情況:在屬性編輯器我加,參數SUBREPORT_DIR/的財產Subreport Expression得到的東西,如:

$P{SUBREPORT_DIR} + "/InvoiceDetail.jasper" 
0

我使用iReport的3.7版。3

這個問題可以固定在兩個方面:

1.Assign參數SUBREPORT_DIR的價值,一個變量,而不是使用像參數變量:

$V{path} + "InvoiceDetail.jasper" 

確保「 「

2.將設置爲$ P {} SUBREPORT_DIR '參數SUBREPORT_DIR爲$ P {} SUBREPORT_DIR的默認值表達式',並用它變量表達式,如:

$P{SUBREPORT_DIR} + "InvoiceDetail.jasper"