Jasperreports - how to get JSON to populate a subreport

前端 未结 3 1869
迷失自我
迷失自我 2021-01-13 07:05

I am trying to get a table to populate with the same data in my main report using Jasper/iReport. How can I get the Json to carry over?

In Edit table datasource I\

相关标签:
3条回答
  • 2021-01-13 07:15

    If anyone is using the JasperReports new Book Reports feature (available in version 6+) and you want to use a JsonDataSource, this is the way to pass the json payload to the subreports:

    <p:subreportPart xmlns:p="http://jasperreports.sourceforge.net/jasperreports/parts" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/parts http://jasperreports.sourceforge.net/xsd/parts.xsd">
      <subreportParameter name="REPORT_DATA_SOURCE">
        <subreportParameterExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource()]]></subreportParameterExpression>
      </subreportParameter>
      <subreportExpression><![CDATA["PROFILES_cover.jasper"]]></subreportExpression>
    </p:subreportPart>
    

    You could also pass a subset of the json payload by providing node location as a parameter of the subDataSource(java.lang.String selectExpression) method. Examples:

    .subDataSource("Northwind.Customers")
    

    or

    .subDataSource("Northwind.Customers(Country == USA)")
    
    0 讨论(0)
  • 2021-01-13 07:26

    Just add Data Source Expression in your main report:

    <subreport>
        <reportElement x="-6" y="0" width="570" height="59" uuid="ac54a12b-8022-49a1-bc90-90cff664e3a1" />
        <dataSourceExpression>
            <![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("footer")]]>
        </dataSourceExpression>
        <subreportExpression>
            <![CDATA["footer.jrxml"]]>
        </subreportExpression>
    </subreport>
    

    Its working for me. Hope it will help.

    0 讨论(0)
  • 2021-01-13 07:32

    I was struggling with a similar problem when using sub reports. It seems that the JSON datasource gets consumed by the main report so you need to invoke subDataSource() to get a fresh datasource for your sub reports and maybe for tables, too - haven't tested that yet though...

    Data Source Expression: ((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource()

    0 讨论(0)
提交回复
热议问题