2013-03-09 63 views
0

我正在嘗試使用XML文檔作爲數據源來獲取報表的子報表。XML文檔的子報表數據源表達式

當我對主要報告數據進行排序時,子報表不需要重新查詢XML文檔。它期待一個JRSortableDataSource,而不是一個JRXmlDataSource

我在做什麼錯?

我用下面的數據源表示:

$P{REPORT_DATA_SOURCE}).subDataSource("/person/phone") 

堆棧跟蹤:

Error filling print... Error evaluating expression :  Source text : $P{REPORT_DATA_SOURCE}.subDataSource("/person/phone") 

net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression : 

    Source text : $P{REPORT_DATA_SOURCE}.subDataSource("/person/phone")  
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:203)  
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:591)  
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:559)  
at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:966)  
at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport(JRFillSubreport.java:384)  
at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:286)  
at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:259)  
at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:459)  
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2044)  
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:778)  
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:288)  
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:151)  
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909)  
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:126)  
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:464)  
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:300)  
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:757)  
at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:1003)  
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)  
at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) Caused by: groovy.lang.MissingMethodException: 
No signature of method: net.sf.jasperreports.engine.fill.SortedDataSource.subDataSource() 
is applicable for argument types: (java.lang.String) values: [/person/phone]  
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:54)  
at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:46)  
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40)  
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)  
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124)  
at TestParam_1362739351228_895383.evaluate(calculator_TestParam_1362739351228_895383:223)  
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:190)  

回答

1

你的數據源表達$P{REPORT_DATA_SOURCE}).subDataSource("/B/C")
有語法錯誤
您在第一(
然後錯過了無與倫比的性格

如果其期待JRSortableDataSource
用這句話
((net.sf.jasperreports.engine.data.JRSortableDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("DefineThat")

如果其期待一個JRXmlDataSource
用這句話
((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("DefineThat")

+0

我真的用$ p {} REPORT_DATA_SOURCE .subDataSource( 「/人/電話」)。我按名稱對主要報告進行了排序......在此之後,我遇到了這樣的錯誤。我不知道如何解決這個錯誤。如果你不介意,請一步一步解釋我。因爲我是新的Jasper Report用戶。謝謝。 – sharipha 2013-03-11 08:58:13

+0

您必須將'$ P {REPORT_DATA_SOURCE}'參數強制轉換爲('JRXmlDataSource'類型),那麼您的數據源表達式必須爲 ((net.sf.jasperreports.engine.data.JRXmlDataSource)$ P {REPORT_DATA_SOURCE})。subDataSource (「/ person/phone」)'NOT'$ P {REPORT_DATA_SOURCE} .subDataSource(「/ person/phone」)' – 2013-03-11 09:03:41

+0

我已經像這樣改變了。但錯誤仍然發生。而且我通過傳遞來自主報告的參數在子報告中使用過濾器表達式。此時,電話號碼僅顯示一個。我想展示很多電話號碼。該人擁有。這個過濾器對我不起作用。我不知道該怎麼辦。如果你知道另一種方式,請解釋我。謝謝。 – sharipha 2013-03-11 10:12:58

0

$ P {REPORT_DATA_SOURCE})。subDataSource( 「的XPath」)

當有人使用上述表達式連接以使用XML數據在Jasper中創建子報表時我們需要設置報表語言爲groovy,而不是Java。我認爲subdatasource不是Java中定義的方法,而是常規。我試圖找到一種方法相當於上面的Java

+0

1.單擊子報表或列表或表元素2.轉到數據源使用JRDatasource表達式使用下面的表達式((net.sf.jasperreports.engine.data.JRXmlDataSource) \t \t $ P {REPORT_DATA_SOURCE})。subDataSource (「Subquery Xpath」) – 2017-02-16 16:35:01

相關問題