2010-08-03 15 views
0

J'essaye de compiler un sous-rapport à la volée de Java. J'ai placé l'expression du sous-rapport dans le rapport MAIN comme suit.Comment compiler un sous-rapport pendant que le rapport principal s'exécute dans ireport?

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

Mon code subreportcompiler est la suivante:

SubReportCompiler public class {

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; 
} 

}

pendant que je suis en train d'exécuter le rapport principal de java. Je reçois l'erreur suivante.

(java.lang.String) Pas de ces biens: SubReportCompiler pour la classe: report2_1280833699753_269232

Ai-je besoin d'enregistrer l'une des propriétés? Comment compiler le sous-rapport à la volée depuis java pendant l'exécution du rapport principal?

Répondre

1

Où la classe SubReportCompiler est-elle placée? Est-il placé quelque part dans les paquets Java d'application? Si oui, vous devez indiquer le nom complet de la classe dans JRXML:

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

Remplacer « mypackage » dans le code ci-dessus avec votre nom de package.

+0

Ça marche ... merci Andrey ... :) – Jagadesh