我在JasperStudio 5.5中创建了一个报告,该报告在main中定义了许多参数,并且需要使用这些参数的许多子数据集(用表定义)。
情况:
/ main /参数:myPar
/主/ mySubDataSet1 /
/主/ mySubDataSet2 /
...
/ main / mySubDataSetN /
子数据集需要在她的查询中使用此参数:select * from Tab t其中t.attr = $ P!{myPar}
所以,我的问题是子数据集无法访问此主参数,我尝试编译的所有时间,程序发送给我“参数未找到:myPar”。
如何在子数据集中使用myPar?
p.s。:我读了这个帖子Pass main dataset parameter to subdataset query(基于iReport),但没有成功......
答案 0 :(得分:3)
那么,您需要使用实际使用它们的值填充subDataset参数。在这种情况下,列出subDataset中项目的表需要声明必要的参数,并将报告级数据集参数的值分配给它们。
在jrxml中听起来:
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="mySubDataSet1" uuid="bbe7937c-a8f1-4838-811a-3f11ec1f8e35">
<datasetParameter name="myPar">
<datasetParameterExpression><![CDATA[$P{myPar}]]></datasetParameterExpression>
</datasetParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
</datasetRun>
...
</jr:table>
答案 1 :(得分:2)
详细信息:
<subDataset name="dsLines" uuid="a47307ff-90a8-476f-afd1-0fd8aa0517d0">
<parameter name="formalId" class="java.lang.String"/>
<queryString language="SQL">
<![CDATA[
SELECT s.formalid, sl.*
FROM salesorder s INNER JOIN salesorderline sl
ON (s.id = sl.salesorder_id)
WHERE s.formalid = $P{formalId}
]]>
</queryString>
<field name="qty" class="java.math.BigDecimal"/>
...
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="dsLines" uuid="3ef5ec78-ab18-4f44-88e6-f99f3eafac07">
<datasetParameter name="formalId">
<datasetParameterExpression><![CDATA[$F{formalid}]]></datasetParameterExpression>
</datasetParameter>
</datasetRun>
<jr:column width="29" uuid="f675a273-7ea6-4bd4-8a55-c7522dfea2a8">
...