1
votes

I know that it is possible to get a return value from a subreport to the main report in iReport. Also there are subdatasets which can also have an own SQL query like a subreport. As I understand a subdataset can only be used with list, charts etc., but I don't know how to access the subdataset fields, variables and parameters in the main dataset/report.

Is it also possible to get a return value from a subdataset? If not, how is it possible to access values from the subdataset?

4
Duplicate to the solution posted here - stackoverflow.com/questions/58181821/…Mukesh Sharma
@MukeshSharma I think that is the duplicate, because I posted this question 2014. The question you mentioned is from 2019.BuZZ-dEE

4 Answers

1
votes

It is currently not possible to use a subdataset query in the main report structure. Your best option would be to use a table element, possibly only outputting one field to accomplish what you want to do.

Otherwise you would need to restructure your query to accommodate your needs to have data in the main report.

1
votes

In main report,

<variable name="sum" class="java.lang.Double" resetType="None" calculation="System">
        <initialValueExpression><![CDATA[0]]></initialValueExpression>
</variable>

Inside subdataset define another variable. In datasetRun you can return it,

In the main report,

<textField evaluationTime="Now">
                <reportElement x="243" y="12" width="100" height="30" uuid="3b6ae08b-3155-457c-9a27-6ed79b170acb"/>
                <textFieldExpression><![CDATA[$V{sum}]]></textFieldExpression>
</textField>
0
votes

in properties > Subreport properties > parameters > add > click icon near "value expression" then add your parameters or fields. and go to subreport for add parameter same name in report inspecter tab > parameters > Add Parameter.

0
votes

Is it also possible to get a return value from a subdataset?

It's possible.

In main report you define variable (Integer - is just for example):

<variable name="GLOBAL_VARIABLE" class="java.lang.Integer" resetType="None">
   <initialValueExpression><![CDATA[0]]></initialValueExpression>
</variable>

Inside subdataset define another variable.

In datasetRun you can return value from internal variable into global:

<datasetRun subDataset="someDataset" uuid="111">
   <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
   <returnValue fromVariable="SUB_DATASET_VARIABLE" toVariable="GLOBAL_VARIABLE"/>
</datasetRun>

And then just call your variable in main report.

<textField evaluationTime="Report">
<reportElement x="0" y="0" width="200" height="20" uuid="333"/>
<textFieldExpression><![CDATA[$V{GLOBAL_VARIABLE}]]></textFieldExpression>
</textField>

Pay attention to evaluationTime="Report". Without this it will not work.