Menu

#8 subdata sets in subreports (XML)

1.3.0
closed
2015-12-07
2014-12-24
No

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:

Discussion

  • Magnus Karlsson

    Magnus Karlsson - 2014-12-24

    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

     
  • Donat Mueller

    Donat Mueller - 2015-02-20

    ==============================================================

    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

    • JRXmlDataSource instance
    • XQuery expression (String)

    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

     
  • Magnus Karlsson

    Magnus Karlsson - 2015-06-04
    • Milestone: 1.2.0 --> 1.3.0
     
  • Donat Mueller

    Donat Mueller - 2015-06-30

    With JEval not possible as only strings are processed.
    Will be implemented after the JShuningYard evaluator is integrated and tested

     
  • Donat Mueller

    Donat Mueller - 2015-09-01

    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

     
  • Donat Mueller

    Donat Mueller - 2015-12-07
    • status: open --> closed
     

Log in to post a comment.

MongoDB Logo MongoDB