【发布时间】:2018-02-22 18:34:05
【问题描述】:
这与之前的问题相似,但它让我很难过。我使用的是 Studio 6.5.1 CE 版本。所以我在一个开始的文件中有 json 数据
{
"users": {
"itemCount": 30,
"items": [{
"id": 1,
"username": "user1",
...
我的主要 json 查询是空白的,定义了一个字段:itemCount,表达式为“users.itemCount”。
我有一个详细信息波段表和带有 jsonql 查询“users.items”的“UserDataset”。字段“id”表示“id”,“username”表示“username”等。数据预览准确显示字段。
运行报告时,我确实看到填充了单个 itemCount 字段。问题是桌子不见了。显然我无法成功地将数据源绑定到表。我尝试了各种表达方式,我认为这样的东西应该可以工作:
<datasetRun...>
...
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_CONNECTION}).subDataSource("users.items")]]></dataSourceExpression>
</datasetRun>
但是,我永远无法填充表格。我究竟做错了什么? (我有与 jdbc 源类似的报告格式,我对这些表没有任何问题。)
我找不到任何有效的查询/表达式组合,所以我附加了带有样式信息的 jrxml 文件以供查看。
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 6.5.1 -->
<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="Users" pageWidth="792" pageHeight="612" orientation="Landscape" columnWidth="752" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isIgnorePagination="true" uuid="61928541-d006-4374-9164-985c6c4116c9">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="Users.json"/>
<subDataset name="UserDataset" uuid="effd13cd-71de-4771-b706-d68b1042b564">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="Users.json"/>
<queryString language="jsonql">
<![CDATA[users.items]]>
</queryString>
<field name="id" class="java.lang.Integer">
<property name="net.sf.jasperreports.jsonql.field.expression" value="id"/>
<fieldDescription><![CDATA[id]]></fieldDescription>
</field>
<field name="username" class="java.lang.String">
<property name="net.sf.jasperreports.jsonql.field.expression" value="username"/>
<fieldDescription><![CDATA[username]]></fieldDescription>
</field>
</subDataset>
<queryString language="jsonql">
<![CDATA[]]>
</queryString>
<field name="itemCount" class="java.lang.Integer">
<property name="net.sf.jasperreports.jsonql.field.expression" value="users.itemCount"/>
<fieldDescription><![CDATA[itemCount]]></fieldDescription>
</field>
<detail>
<band height="116" splitType="Stretch">
<componentElement>
<reportElement x="-9" y="50" width="770" height="62" uuid="7d7f19b0-9800-43ab-86a4-45846dae7775">
<property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
<property name="com.jaspersoft.studio.table.style.table_header" value="Table_TH"/>
<property name="com.jaspersoft.studio.table.style.column_header" value="Table_CH"/>
<property name="com.jaspersoft.studio.table.style.detail" value="Table_TD"/>
</reportElement>
<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="UserDataset" uuid="fdfe69e2-eeac-4287-9e41-4c39610a79be">
<datasetParameter name="JSON_INPUT_STREAM">
<datasetParameterExpression><![CDATA[$P{JSON_INPUT_STREAM}]]></datasetParameterExpression>
</datasetParameter>
<datasetParameter name="net.sf.jasperreports.json.source">
<datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.json.source}]]></datasetParameterExpression>
</datasetParameter>
<datasetParameter name="net.sf.jasperreports.json.sources">
<datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.json.sources}]]></datasetParameterExpression>
</datasetParameter>
<datasetParameter name="net.sf.jasperreports.json.date.pattern">
<datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.json.date.pattern}]]></datasetParameterExpression>
</datasetParameter>
<datasetParameter name="net.sf.jasperreports.json.number.pattern">
<datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.json.number.pattern}]]></datasetParameterExpression>
</datasetParameter>
<datasetParameter name="JSON_LOCALE">
<datasetParameterExpression><![CDATA[$P{JSON_LOCALE}]]></datasetParameterExpression>
</datasetParameter>
<datasetParameter name="net.sf.jasperreports.json.locale.code">
<datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.json.locale.code}]]></datasetParameterExpression>
</datasetParameter>
<datasetParameter name="JSON_TIME_ZONE">
<datasetParameterExpression><![CDATA[$P{JSON_TIME_ZONE}]]></datasetParameterExpression>
</datasetParameter>
<datasetParameter name="net.sf.jasperreports.json.timezone.id">
<datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.json.timezone.id}]]></datasetParameterExpression>
</datasetParameter>
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_CONNECTION}).subDataSource("users.items")]]></dataSourceExpression>
</datasetRun>
<jr:column width="30" uuid="65fed6e9-ae42-4e04-b0b4-e2c8ef4a1b27">
<property name="com.jaspersoft.studio.components.table.model.column.name" value="Column1"/>
<jr:columnHeader style="Table_CH" height="30" rowSpan="1">
<staticText>
<reportElement x="0" y="0" width="30" height="30" uuid="becae13f-4af9-4884-9b38-ab19347e9455"/>
<text><![CDATA[USER_ID]]></text>
</staticText>
</jr:columnHeader>
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="30" height="30" uuid="8c6b26dc-c436-4e68-acd5-89c33e09dac6"/>
<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column width="90" uuid="224b44e6-a9c2-4407-891d-623c7d6b33dc">
<property name="com.jaspersoft.studio.components.table.model.column.name" value="Column2"/>
<jr:columnHeader style="Table_CH" height="30" rowSpan="1">
<staticText>
<reportElement x="0" y="0" width="90" height="30" uuid="3c961dd1-f991-4cde-9d22-224d4f3ae86c"/>
<text><![CDATA[USERNAME]]></text>
</staticText>
</jr:columnHeader>
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="90" height="30" uuid="3acbeee1-e7a4-4f45-b54c-b10c69bf7a95"/>
<textFieldExpression><![CDATA[$F{username}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
</jr:table>
</componentElement>
<textField>
<reportElement x="0" y="10" width="100" height="30" uuid="683b48a8-3f4d-4a3a-9ab5-df8255699b8b"/>
<textFieldExpression><![CDATA[$F{itemCount}]]></textFieldExpression>
</textField>
</band>
</detail>
<pageFooter>
<band height="39" splitType="Stretch">
<textField>
<reportElement x="326" y="6" width="100" height="30" uuid="94b2cbaa-c1f0-4934-a304-a0c4c84486a0"/>
<textFieldExpression><![CDATA["Page" +$V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
</band>
</pageFooter>
</jasperReport>
【问题讨论】:
-
尝试将“UserDataset”保留为无/空查询。您的 subDatasource 表达式已经导航到那里。
-
找不到任何有效的查询导航和表达式组合。
标签: json jasper-reports