2013-03-09 4 views
0

Я пытаюсь получить подчиненный отчет, используя XML-документ в качестве источника данных.Subreport Data Source Expression для XML-документа

Когда я сортирую основные данные отчета, subreport не будет требовать 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

Вашего выражение DataSource $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

+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") ' –

+0

Я уже изменил это так. Но ошибка все же происходит. А также я использовал выражение фильтра в подзаголовке, передавая параметр из основного отчета. В это время номер телефона отображается только один. Я хочу показать, что многие из телефонов нет. этот человек обладал. Этот фильтр не работает для меня. Я не знаю, как это сделать. Если вы знаете другой путь, пожалуйста, объясните мне. Благодарю. – sharipha

0

$ P {REPORT_DATA_SOURCE}). SubDataSource ("Xpath")

, когда кто-то использует указанное выше выражение для подключения к созданию дополнительного отчета в Джаспере с использованием XML-данных нам нужно установить язык отчетов как отличный, а не Java. Я считаю, что subdatasource не является методом, определенным на Java, но в groovy. Я пытаюсь найти метод, который эквивалентен выше в Java.

+0

1.Click на подотчет или списка или таблицы элементов 2.Go к Datasource Под использовать выражение JRDatasource использовать приведенную ниже формулу ((net.sf.jasperreports.engine.data.JRXmlDataSource) \t \t $ Р {REPORT_DATA_SOURCE}). SubDataSource («Subquery Xpath») для Java –

 Смежные вопросы

  • Нет связанных вопросов^_^