Как составить подотчет во время выполнения основного отчета в ireport? - PullRequest
0 голосов
/ 03 августа 2010

Я пытаюсь скомпилировать подотчет на лету из Java. Я поместил выражение подотчета в ОСНОВНОЙ отчет следующим образом.

<subreportExpression class="net.sf.jasperreports.engine.JasperReport"><![CDATA[SubReportCompiler.getCompiledReport("reportId")]]></subreportExpression>

Мой код подотчетного компилятора выглядит следующим образом:

открытый класс SubReportCompiler {

private static final String JR_XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
    + "<!DOCTYPE jasperReport PUBLIC \"-//JasperReports//DTD Report Design//EN\" \"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd\">";


public static JasperReport getCompiledReport(String reportId)
{

    Report report = Report.getReportObject(reportId, applicationId);

    String jasperXML=JR_XML_HEADER + report.getJASPERXML();
    InputStream jrXMLStream = new ByteArrayInputStream(jasperXML.getBytes());
    JasperReport jReport;

    try {
        jReport = JasperCompileManager.compileReport(jrXMLStream);
    } catch (JRException e) {
        throw new ReportException(e.getMessage(), e);
    }
    catch (Exception e)
    {
        throw new ReportException(e.getMessage(), e);
    }

    return jReport;
}

}

пока я пытаюсь выполнить основной отчет из Java. Я получаю следующую ошибку.

(java.lang.String) Нет такого свойства: SubReportCompiler для класса: report2_1280833699753_269232

Нужно ли регистрировать какие-либо свойства? Как скомпилировать подотчет на лету из java при выполнении основного отчета?

1 Ответ

1 голос
/ 27 августа 2010

Где находится класс SubReportCompiler?Размещено ли оно где-нибудь в Java-пакетах приложения?Если да, вы должны указать полное имя класса в JRXML:

<subreportExpression class="net.sf.jasperreports.engine.JasperReport">
<![CDATA[<b>mypackage.</b>SubReportCompiler
.getCompiledReport("reportId")]]></subreportExpression>

Замените «mypackage» в приведенном выше коде на имя вашего пакета.

...