Динамическая настройка net.sf.jasperreports.export.xls.sheet.name из полезной нагрузки json - PullRequest
0 голосов
/ 09 января 2019

В моем jrxml источнике данных есть json, у нас есть одно поле

{
  "sheetName":"test"
}

вместе с другими полями JSON. Когда вывод отчета jasper находится в формате xlsx, мы хотим, чтобы имя листа было значением этого входного json.

Согласно нашему пониманию, имя листа для вывода xlsx из jrxml может быть установлено с помощью свойства "* net.sf.jasperreports.export.xls.sheet.name"

следовательно, чтобы обеспечить это значение свойства, я объявил эти поля в основном наборе данных как

<field name="sheetName" class="java.lang.String">
        <property name="net.sf.jasperreports.jsonql.field.expression" value="sheetName"/>
</field>

и затем я объявляю выражение свойства, чтобы задать имя листа динамического набора для элемента jasperreport, как это

<propertyExpression name="net.sf.jasperreports.export.xls.sheet.name"><![CDATA[$F{sheetName}]]></propertyExpression>

Я по-прежнему получаю значение, указанное в <jasperReport> имя листа element.ie в сгенерированном файле xlsx - это имя отчета, указанное для отчета вместо значения net.sf.jasperreports.export.xls.sheet.name ,

Есть ли способ установить net.sf.jasperreports.export.xls.sheet.name из ввода json в jrxml?

в приведенном ниже коде при установке свойства как части jasperreport не отображается имя листа из json

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 6.6.0  -->
<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="SheetNameTest" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="1f31f952-cc6a-4faf-b8fd-2ede4119ea9f">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="modtest\dynamicSheet.xml"/>
    <propertyExpression name="net.sf.jasperreports.export.xls.sheet.name"><![CDATA[$F{sheetName}]]></propertyExpression>
    <queryString language="jsonql">
        <![CDATA[]]>
    </queryString>
    <field name="sheetName" class="java.lang.String">
        <property name="net.sf.jasperreports.json.field.expression" value="sheetName"/>
        <fieldDescription><![CDATA[sheetName]]></fieldDescription>
    </field>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch">
            <textField>
                <reportElement x="259" y="38" width="100" height="30" uuid="653aa746-6763-4fbb-8576-cebe40169a8b"/>
                <textFieldExpression><![CDATA["JsonSheet"]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <detail>
        <band height="231" splitType="Stretch"/>
    </detail>
</jasperReport>

в приведенном ниже коде путем установки имени листа в текстовом поле отображается имя листа из json

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 6.6.0  -->
<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="SheetNameTest" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="1f31f952-cc6a-4faf-b8fd-2ede4119ea9f">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="modtest\dynamicSheet.xml"/>
    <queryString language="jsonql">
        <![CDATA[]]>
    </queryString>
    <field name="sheetName" class="java.lang.String">
        <property name="net.sf.jasperreports.json.field.expression" value="sheetName"/>
        <fieldDescription><![CDATA[sheetName]]></fieldDescription>
    </field>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch">
            <textField>
                <reportElement x="259" y="38" width="100" height="30" uuid="653aa746-6763-4fbb-8576-cebe40169a8b">
                    <propertyExpression name="net.sf.jasperreports.export.xls.sheet.name"><![CDATA[$F{sheetName}]]></propertyExpression>
                </reportElement>
                <textFieldExpression><![CDATA["JsonSheet"]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <detail>
        <band height="231" splitType="Stretch"/>
    </detail>
</jasperReport>

Решение работает, если имя листа указано в текстовом поле.

спасибо Anjana.

...