Мне нужно было показать столбцы crosstabHeaderCell динамически из массива строк.это json
{
"header": {
"columnName": [
"Product Store1",
"location"
],
"values": [{
"purchase": {
"name": "bags",
"location": "MainMarket "
},
"weekSpend": [{
"weekStartDate": 20181105,
"spend": 100
},
{
"weekStartDate": 20181112,
"spend": 200
}
]
},
{
"purchase": {
"name": "shoes",
"location": "MainMarket "
},
"weekSpend": [{
"weekStartDate": 20181105,
"spend": 100
},
{
"weekStartDate": 20181112,
"spend": 200
}
]
}
]
}
Я хочу показать crosstabHeaderCell из списка значений массива columnName в кросс-таблице.Исходя из вышеизложенного JSON я могу перебрать и показать название продукта и местоположение в виде строк и weekSpend в виде столбца с набором данных кросс-таблицы как
<crosstabDataset isDataPreSorted="true">
<dataset>
<datasetRun subDataset="crossTabDataSet" uuid="e7b27508-8a48-4785-a48e-c646249df9a9">
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("..values(@size > 0)..weekSpend.*")]]></dataSourceExpression>
</datasetRun>
</dataset>
</crosstabDataset>
, когда я указываю компонент списка для crosstabHeaderCell, как показано ниже, я получаю параметр ошибкиREPORT_DATA_SOURCE не найдено.
<jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Horizontal" ignoreWidth="true">
<datasetRun subDataset="listcol" uuid="a13d0691-5b9e-4d9f-aaa0-9d0ff0b67b78">
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("$.columnName.*")]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="30" width="100">
<textField>
<reportElement x="0" y="0" width="100" height="30" uuid="99c3d5fe-9f90-4efc-bdab-4371eee17d54"/>
<textFieldExpression><![CDATA[$F{namecol}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
список набора данных определен как
<subDataset name="listcol" uuid="2630f2ff-b912-4f05-8189-7a5d47eada9e">
<field name="namecol" class="java.lang.String">
<property name="net.sf.jasperreports.jsonql.field.expression" value="[0]"/>
</field>
</subDataset>
как можно ссылаться на список значений из набора данных кросс-таблицы.почему список терпит неудачу с параметром not found исключение для REPORT_DATA_SOURCE.мы можем установить значение REPORT_DATA_SOURCE из набора данных кросс-таблицы, которое будет использоваться внутренним набором данных.
если я удаляю REPORT_DATA_SOURCE jr: list и использую список строк запроса как $ .columnName. *.я получаю пустым в crosstabHeaderCell
Ожидаемый вывод
Спасибо Anjana,