我們有一項任務是使用純JRXML(不包含定製的Java代碼)來實現多個報告。這主要有兩個原因:報告只能使用SQL查詢生成(不需要定製代碼),並且應該很容易部署JasperReport服務器(不需要Java代碼=不需要安裝自定義數據源和庫)。賈斯珀報告。測試JRXML模板中的SQL查詢
但是,我們仍然需要自動對這些報告進行測試。 我們決定拆分數據檢索(SQL查詢)和報告呈現的測試。
對於測試SQL,我們希望從JRXML模板中提取實際的查詢以實現更好的未來測試維護。
我們可以手動將報告查詢複製到我們的測試中,使用字符串替換功能手動將所有參數替換爲實際值,等等。然而,在這種情況下,我們將被迫在兩個地方手動維護相同的查詢:我們的測試和我們的JRXML模板。我們想避免它。
從JRXML檢索到的SQL查詢的問題是它們仍包含JasperReport特定的佔位符。喜歡的東西:
SELECT name, department FROM employees WHERE employee_id = $P{employeeId}
到目前爲止,我已經找到了,我們大概可以使用(見this thread)。然而,它仍然涉及JasperReports庫實現的邏輯的部分重複(我們需要複製用於處理JRQueryChunks的邏輯並向查詢添加參數值)。
有沒有更好的方法來做到這一點(我的意思是從JRXML測試SQL)?
謝謝!
感謝您的建議。如果我正確地理解了你,你提出了從JRXML提取參數和SQL(例如JasperDesign.getMainDataSet()。getQuery())並處理這個SQL替換參數的佔位符,對嗎?我們有完全一樣的想法。我的問題是:如果Jasper已經擁有這個功能,可以避免重新發明輪子(在我們的代碼中解析SQL查詢)? – 2012-04-20 05:53:27