使用iReport 4.1.3时,我遇到了这个基本问题。我有两个表'orders'和'order_details'。 我在order_details中针对每个订单在购物车中映射各种产品。例如: 在订单表中我有:
ORDER_ID
123个
456
在order_details表中,我将有:
order_id product_id
123 abc1
123 abc2
456 efg1
456 efg2
456 efg3
我在ireport中创建了以下jrxml:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="merchant_invoice" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="order_ids" class="java.lang.String">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[select
o.order_id,od.product_id
from cscart_orders o
inner join cscart_order_details od on od.order_id=o.order_id
where o.order_id in ($P{order_ids})]]>
</queryString>
<field name="order_id" class="java.math.BigInteger"/>
<field name="product_id" class="java.math.BigInteger"/>
<group name="order_id_group" isStartNewPage="true" isReprintHeaderOnEachPage="true">
<groupExpression><![CDATA[$F{order_id}]]></groupExpression>
<groupHeader>
<band height="25">
<textField>
<reportElement x="6" y="3" width="380" height="20"/>
<textElement/>
<textFieldExpression><![CDATA["header for order_id "+$F{order_id}]]></textFieldExpression>
</textField>
</band>
</groupHeader>
<groupFooter>
<band height="25">
<textField>
<reportElement x="8" y="3" width="291" height="20"/>
<textElement/>
<textFieldExpression><![CDATA["Footer for order id : "+$F{order_id}]]></textFieldExpression>
</textField>
</band>
</groupFooter>
</group>
<background>
<band splitType="Stretch"/>
</background>
<detail>
<band height="30" splitType="Stretch">
<textField>
<reportElement x="8" y="4" width="270" height="20"/>
<textElement/>
<textFieldExpression><![CDATA["Products with id :"+$F{product_id}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
但是当我使用参数'123,456'进行预览时,我只得到一个页面,其中只包含第一个订单的详细信息,即订单123。 我不知道我做错了什么。 请帮助。
答案 0 :(得分:0)
如果您选择多个订单ID,则查询应该是这样的
select
o.order_id,od.product_id
from cscart_orders o
inner join cscart_order_details od on od.order_id=o.order_id
where $X{IN,o.order_id,order_ids}
和参数order_ids的类应该是“java.util.Collection”,你也可以给出默认值表达式
<parameter name="order_ids" class="java.util.Collection">
<defaultValueExpression><![CDATA[new ArrayList(Arrays.asList(new String[] {"123","456"}))]]></defaultValueExpression>
</parameter>