Das Connection Element brauchts wohl nur für SQL
MASTER
<subreport>
<reportelement positiontype="Float" x="335" y="25" width="175" height="20" isremovelinewhenblank="true" backcolor="#99ccff">
<subreportparameter name="City">
<subreportparameterexpression><![CDATA[$F{City}]]></subreportparameterexpression>
</subreportparameter>
<connectionexpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionexpression>
<returnvalue subreportvariable="REPORT_COUNT" tovariable="CityAddressCount">
<subreportexpression class=""><![CDATA["AddressReport.jasper"]]></subreportexpression>
</returnvalue></reportelement></subreport>
SUBREPORT
<querystring><![CDATA[SELECT * FROM Address WHERE City = $P{City}]]></querystring>
Hier wird einfach noch der Parameter City übergeben für die Subquery der angegebenen Connection
MASTER
<subreport isUsingCache="false">
<reportElement uuid="5de7e952-dcba-4375-ab47-3b59ef75fd1e" positionType="Float" mode="Transparent" x="-8" y="504" width="531" height="126"/>
<subreportParameter name="XML_DATA_DOCUMENT">
<subreportParameterExpression><![CDATA[$P{XML_DATA_DOCUMENT}]]></subreportParameterExpression>
</subreportParameter>
<subreportExpression><![CDATA['movein-signing-de.jasper']]></subreportExpression>
</subreport>
SUBREPORT
<queryString language="xPath">
<![CDATA[/protocolKind/realestate-checklist-movein/signer]]>
</queryString>
Der Parameter XML_DATA_DOCUMENT wird ja gar nicht aus gewertet im Subreport.
Ich habe nun mal eine Connection hinzugefügt:
<dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
Die wird dann auch tatsächlich angezogen
Die anderen machen aber etwa so was:
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("//XMLJourneyItem")]]></dataSourceExpression>
d.H. mit XPath subquery aber das geht bei uns NICHT da wir keinen Java compiler haben, der diesen Ausdruck auflösen könnte !
Lies mal:
Nochmals kurz zum xml xpath subquery
Wenn mit 5.1.2 in der jrxml Expression kein Ausdruck ...).subDataSource(…) mehr vorkommt, dann lohnt es sich dem nachzugehen,
da dann etwas geändert wurde um diesen hack zu umgehen und der fix ist in unserer 5.01 version nicht drin
Ansonsten würd ich sagen not supported. dann ist so etwas dass man auf wunsch dann einbauen könnte
==============================================================
Add support for data source expressions like:
<datasourceexpression>
<[CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("model/element[@name='ILLUSTRATION_DOCUMENT']/element[@name='pg_Weighted_Fund']/element[@name='egrd_Weighted_Fund']")]]>
</datasourceexpression>
TODO: add a JEval Function subDataSource that takes two parameters
The implementation checks if the first parameter is instance of JRXmlDataSource and casts the object to it if so. Then call the method subDataSource on the instance and pass the XQuery expression as parameter
With JEval not possible as only strings are processed.
Will be implemented after the JShuningYard evaluator is integrated and tested
TODO: create a testcase that proves that above aproach works with current JSHuntingYard implementation: TwoArgsFunction<object,object,string>
return FunctionElementFactory.createObject(((JRXmlDataSource)a.getValue()).subDataSource(b.getValue()));
We have already somewhere Unit tests that do such tests.</object,object,string>
TODO: integrate Unit tests to PDFReporter so that all our API implementation and PDFRepoter specific compiler functions are tested in maven prior to running integration tests based on jrxml report templates