Мы вводим json в jrxml как
{
"ID": "5c2c7662f256a1452b0ed8b2",
"MarketData": {
"markets": [ { "id": "1001", "name": "val1" }, { "id": "1002", "name": "Val2" }, { "id": "1003", "name": "val3" } ],
"products": [
{"id": "1001", "proname": "shoe"},
{"id": "1002", "name": "bag"},
{"id": "1003", "name": "cap"}
],
"location":"ABC"
}
}
У нас есть JSON, который содержит список значений рынков, продуктов.
Нам нужно показать значения этого json как
Расположение: ABC
Рынки: val1, Val2, val3
Проданная продукция: обувь, сумка, кепка
Используя это решение, предоставленное здесь, я могу отображать Markets как значения, разделенные запятыми Jasper, преобразующий список значений json в значения, разделенные запятыми, используя jsonQL
Та же методика, если я использую набор данных и отображение, я получаю вывод как
Расположение: ABC
Рынки: val1
знач1, val2
знач1, val2, val3
Продукция: обувь
обувь, сумки
обувь, сумки, крышка
я объявил основной набор данных как
<queryString language="jsonql">
<![CDATA[]]>
</queryString>
<field name="location" class="java.lang.String">
<property name="net.sf.jasperreports.jsonql.field.expression" value="location"/>
<fieldDescription><![CDATA[location]]></fieldDescription>
</field>
затем поднабор данных как рынки
<subDataset name="marketList" uuid="01e76955-f29e-4d52-991b-aa0149bfdb37">
<field name="name" class="java.lang.String">
<property name="net.sf.jasperreports.jsonql.field.expression" value="name"/>
</field>
<variable name="allname" class="java.lang.String">
<variableExpression><![CDATA[$V{allname} != null ? $V{allname} + ", " + $F{name} : $F{name}]]></variableExpression>
</variable>
</subDataset>
ссылался на эти поля в jrxml как
<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="Vertical">
<datasetRun subDataset="marketList" uuid="565f0c3a-76b6-4527-b0d2-d306c5f4e20c">
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("$.MarketData.markets")]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="16" width="103">
<textField>
<reportElement x="0" y="0" width="100" height="16" uuid="7f2eaa2a-20b5-4598-bbf1-758f61dc3fc8"/>
<textFieldExpression><![CDATA[$V{allname}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
это дает вывод как
Markets : val1
val1,val2
val1,val2,val3
однако ожидаемый результат -
Location : ABC
Markets : val1,val2,val3
Products :shoes,bag,cap
Как показать набор данных, у которого список значений представлен в виде значений, разделенных запятыми.
Спасибо
Anjana