2015-11-19 66 views
0

我是新來編寫jasper報告(和一般的SQL)。我們試圖在報告末尾加載RTF或HTML文件作爲披露。我們正在做這件事的方法是在SQL的一部分,選擇文件(「披露」)的名稱:從Jasper中的參數加載文件

SELECT 
.... 
'Disclosure' as Disclosure 
FROM 
... 

然後,很明顯,對於這一個領域:

<field name="Disclosure" class="java.lang.String"/> 

最後,在該報告的摘要部分,我們使用的loadFile實用程序:

<textFieldExpression class="java.lang.String"><![CDATA[JasperFileRuntimeUtility.loadFile($F{Disclosure}, $P{REPORT_PARAMETERS_MAP})]]></textFieldExpression> 

如果報告返回的數據,這個精美的作品。但是,如果原始查詢的結果沒有返回任何記錄,那麼披露信息不會包含在報告中(因爲查詢的結果顯然不是什麼)。

我認爲我們可以通過提供「Disclosure」作爲參數來輕鬆解決此問題,但是當我將其更改爲$ P而不是$ F時。我收到關於無效的io文件類型的錯誤。

我也嘗試創建一個變量,並將$ V設置爲我們傳入的$ P的值,但在那裏也沒有運氣。

是否有加載文件類型的實用程序,將加載像我們正在做的字段參數?還有其他建議嗎?

感謝幫助!

回答

1

我明白你的問題現在好多了,所以我編輯了答案,您呼叫

JasperFileRuntimeUtility.loadFile($F{Disclosure}, $P{REPORT_PARAMETERS_MAP}) 

你不知道什麼功能是這一點,但你知道,如果你把這個字符串「披露」它的工作原理。

JasperFileRuntimeUtility類在您的圖書館(它不是一個官方的賈斯珀報告功能),嘗試搜索您的項目或您的圖書館。

它有一個靜態方法public static String loadFile(String value, Map<?,?> map)

調用與在$ F {披露} = 「披露」

JasperFileRuntimeUtility.loadFile($F{Disclosure}, $P{REPORT_PARAMETERS_MAP}) 

JasperFileRuntimeUtility.loadFile("Disclosure", $P{REPORT_PARAMETERS_MAP}) 

不會做出任何不同的結果梅託德將是相同的(因爲該方法沒有其他的想法,然後用你稱之爲的參數)。

通常還帶有$ P {披露} =「披露」,呼籲

JasperFileRuntimeUtility.loadFile($P{Disclosure}, $P{REPORT_PARAMETERS_MAP}) 

將是相同的,但由於參數映射傳遞函數可以看到這個參數,也許做其他的事情。 ..

更可能然而,由於參數映射傳遞的功能,你可能有scriptlet或設置static領域的其他電話,當你有沒有結果調用loadFile因爲這些靜態字段不工作一直沒組。

所以,如果它不能正常工作通過「信息披露」,這是肯定的情況下..

玩得開心!

+0

因此,我們目前正在做的是使用SQL查詢將字符串「Disclosure」傳遞到字段「Disclosure」中......然後報告使用該loadFile函數加載名爲「Disclosure」的文件。我實際上並不知道它是如何工作的,爲什麼它知道文件擴展名..但它確實會加載我們在摘要中的disclosure.html文件。 但是..不幸的是..當查詢本身沒有返回任何記錄時,它不會將該「Disclosure」字符串傳遞給「Disclosure」字段..所以loadFile不起作用。 –

+0

更好地理解你的問題我已經編輯了我的答案,讓我知道如果你在類中找到JasperFileRuntimeUtility類... –

+0

太棒了!非常感謝。我不知道爲什麼我沒有看到這個,但那絕對是答案。我用直接的「Disclosure」字符串替換了$ F值。咄。非常感謝! –