Jasper reports JasperReport:如何在表中显示动态列表
我想在表格中显示列表。列表查询的参数基于表项的值。例如:Jasper reports JasperReport:如何在表中显示动态列表,jasper-reports,Jasper Reports,我想在表格中显示列表。列表查询的参数基于表项的值。例如: <subDataset name="dsLines" uuid="a47307ff-90a8-476f-afd1-0fd8aa0517d0"> <parameter name="formalId" class="java.lang.String"/> <queryString language="SQL"> <![CDATA[SELECT s.formalid, sl.qt
<subDataset name="dsLines" uuid="a47307ff-90a8-476f-afd1-0fd8aa0517d0">
<parameter name="formalId" class="java.lang.String"/>
<queryString language="SQL">
<![CDATA[SELECT s.formalid, sl.qty, sl.subtotal, sl.currency,
sl.product_localsku, sl.product_name,
sl.product_price,
sl.finalprice,
sl.promoids
FROM salesorder s LEFT JOIN salesorderline sl
ON (s.id = sl.salesorder_id)
WHERE s.formalid = $P{formalId}
ORDER BY sl.product_localsku]]>
</queryString>
<field name="qty" class="java.lang.Integer"/>
<field name="subtotal" class="java.math.BigDecimal"/>
<field name="product_localsku" class="java.lang.String"/>
<field name="product_name" class="java.lang.String"/>
<field name="product_price" class="java.math.BigDecimal"/>
<field name="finalprice" class="java.math.BigDecimal"/>
<field name="promoids" class="java.util.List"/>
</subDataset>
有人知道怎么做吗?您必须注意的基本想法是,您在查询中使用了$F{promoids}字段,而该字段在当前上下文中不存在。 接下来您必须了解的是,$F{}字段是数据集查询的结果。 最后一件事是,您只能在查询中使用参数$P{}。 如果列表组件基于表中的字段
$F{promoids}
,则在数据集promodeffortds
中创建一个参数,例如$P{promoids}
,最后将字段$F{promoids}
映射到参数$P{promoids}
,然后在数据集promotdiscountds
的查询中使用该参数,如下所示
其中id=ANY($p{promoids})
希望这能解决您的问题。谢谢@Rahul的语法更正,但是如何将语法传递到
$p{productids}
?您能详细说明您的问题吗?
<subDataset name="promoDiscountDs" uuid="f276a182-41da-432e-b611-b5f47bfaed9a">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<queryString language="SQL">
<![CDATA[select name as discount_name,
discount_percentage,
discount_amount from promo
where id = ANY($F{promoids})]]>
</queryString>
<field name="discount_name" class="java.lang.String"/>
<field name="discount_amount" class="java.lang.String"/>
<field name="discount_percentage" class="java.lang.String"/>
</subDataset>
org.postgresql.util.PSQLException: ERROR: syntax error at or near "$"
Position: 94
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2198)
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1927)
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:561)
org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:419)
org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:304)
com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:404)
net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:233)
net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1087)
net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:668)
net.sf.jasperreports.components.list.FillDatasetRun.start(FillDatasetRun.java:162)
net.sf.jasperreports.components.list.VerticalFillList.prepare(VerticalFillList.java:93)
net.sf.jasperreports.engine.fill.JRFillComponentElement.prepare(JRFillComponentElement.java:149)
net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:331)
net.sf.jasperreports.engine.fill.JRFillFrame.prepare(JRFillFrame.java:217)
net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:331)
net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:384)
net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:358)
net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2046)
net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:778)
net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:288)
net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:151)
net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909)
net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:659)
net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:203)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)