1
我是新與Pentaho的報告..如何與pentaho集成grails 3.x?
我已經創建Pentaho的報告文件 「email_report.prpt」
我有Grails的3.0.9項目...
我想創建一個按鈕的下載「PDF」文件,其中由Pentaho的生成..
這是我從谷歌搜索後,做..
第一:將文件複製到新的文件夾 「LIB」
compile files('lib/pentaho-database-model-5.1.0.0-752.jar', 'lib/pentaho-reporting-engine-classic-core-5.1.0.0-752.jar')
compile files('lib/libbase-5.1.0.0-752.jar', 'lib/libdocbundle-5.1.0.0-752.jar')
compile files('lib/libfonts-5.1.0.0-752.jar', 'lib/libformat-5.1.0.0-752.jar')
compile files('lib/libformula-5.1.0.0-752.jar', 'lib/libloader-5.1.0.0-752.jar')
compile files('lib/libpixie-5.1.0.0-752.jar', 'lib/librepository-5.1.0.0-752.jar')
compile files('lib/libserializer-5.1.0.0-752.jar', 'lib/libswing-5.1.0.0-752.jar')
第二:
拷貝文件abstractReportgenerator.java到src/main/groovy/org/pentaho/reporting/engine/classic/AbstractReportGenerator.java
和PentahoReport.java
這樣的..
package org.pentaho.reporting.engine.classic;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import com.akiong.maintenance.SystemConfiguration;
import org.pentaho.reporting.engine.classic.core.DataFactory;
import org.pentaho.reporting.engine.classic.core.MasterReport;
import org.pentaho.reporting.libraries.resourceloader.Resource;
import org.pentaho.reporting.libraries.resourceloader.ResourceException;
import org.pentaho.reporting.libraries.resourceloader.ResourceManager;
import org.pentaho.reporting.engine.classic.AbstractReportGenerator;
public class PentahoReport extends AbstractReportGenerator {
private Map parameters = new HashMap();
private String resourceURL = "";
private String isURL = "Y";
public PentahoReport() {
System.out.println("this file is running!");
}
public MasterReport getReportDefinition() {
try {
// Using the classloader, get the URL to the reportDefinition file
final ClassLoader classloader = this.getClass().getClassLoader();
if(isURL.equals("Y")){
final URL reportDefinitionURL = classloader.getResource(resourceURL);
System.out.println("resourceURL = " + resourceURL);
System.out.println("reportDefinitionURL = "+reportDefinitionURL);
// Parse the report file
final ResourceManager resourceManager = new ResourceManager();
final Resource directly = resourceManager.createDirectly(reportDefinitionURL, MasterReport.class);
return (MasterReport) directly.getResource();
}
else{
File file = new File(resourceURL);
final ResourceManager resourceManager = new ResourceManager();
resourceManager.registerDefaults();
Resource res = null;
try {
System.out.println("toURL :" + file.toURI().toURL());
res = resourceManager.createDirectly(file.toURI().toURL(),MasterReport.class);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return (MasterReport) res.getResource();
}
} catch (ResourceException e) {
e.printStackTrace();
}
return null;
}
public DataFactory getDataFactory() {
return null;
}
public Map getReportParameters() {
System.out.println("parameters :" + parameters);
return parameters;
}
public void setReportParameters(String key, Object value) {
parameters.put(key, value);
}
public void setReportURL(String url) {
resourceURL = url;
}
public void setIsURL(String url) {
isURL = url;
}
}
第三:
PentahoReport reportSMS = new PentahoReport()
reportSMS.setReportURL("org/pentaho/reporting/engine/classic/report_email.prpt")
reportSMS.setReportParameters("dateFrom", (new Date()).parse("dd/MM/yyyy", params.dateFrom))
reportSMS.setReportParameters("dateTo", (new Date()).parse("dd/MM/yyyy", params.dateTo))
reportSMS.setReportParameters("usernameprint", 'admin1')
reportSMS.generateReport("PDF", false, null, fileDest);
,但我得到這個錯誤...
resourceURL = org/pentaho/reporting/engine/classic/report_email.prpt
reportDefinitionURL = null
ERROR org.grails.web.errors.GrailsExceptionResolver - NullPointerException occurred when processing request: [POST] /report/reportEmailPrint
Key data must not be null.. Stacktrace follows:
java.lang.reflect.InvocationTargetException: null
at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:62) ~[spring-security-core-3.0.0.M1.jar:na]
at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.groovy:53) ~[spring-security-core-3.0.0.M1.jar:na
]
at grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.groovy:53) ~[spring-security-core-3.0.0.M1.ja
r:na]
at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.groovy:53) ~[spring-security-core-3.0.0.M1.jar:na
]
at grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.groovy:53) ~[spring-security-core-3.0.0.M1.ja
r:na]
at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:62) ~[spring-security-core-3.0.0.M1.jar:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) ~[na:1.7.0_75]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) ~[na:1.7.0_75]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_75]
Caused by: java.lang.NullPointerException: Key data must not be null.
at org.pentaho.reporting.libraries.resourceloader.DefaultResourceManagerBackend.createKey(DefaultResourceManagerBackend.java:53) ~[libloader-5.1.0.0-752.jar:5.1.0.0-752.-1]
at org.pentaho.reporting.libraries.resourceloader.ResourceManager.createKey(ResourceManager.java:151) ~[libloader-5.1.0.0-752.jar:5.1.0.0-752.-1]
at org.pentaho.reporting.libraries.resourceloader.ResourceManager.createKey(ResourceManager.java:137) ~[libloader-5.1.0.0-752.jar:5.1.0.0-752.-1]
at org.pentaho.reporting.libraries.resourceloader.ResourceManager.createDirectly(ResourceManager.java:213) ~[libloader-5.1.0.0-752.jar:5.1.0.0-752.-1]
at org.pentaho.reporting.engine.classic.PentahoReport.getReportDefinition(PentahoReport.java:75) ~[main/:na]
at org.pentaho.reporting.engine.classic.AbstractReportGenerator.generateReport(AbstractReportGenerator.java:173) ~[main/:na]
at org.pentaho.reporting.engine.classic.AbstractReportGenerator.generateReport(AbstractReportGenerator.java:140) ~[main/:na]
at com.akiong.app.ReportController$_closure5$$EPdWUGWX.doCall(ReportController.groovy:148) ~[na:na]
... 9 common frames omitted
爲什麼我得到這個錯誤?
reportSMS.setReportURL(「組織/ Pentaho的/報告/發動機/經典/ report_emai l.prpt「),看起來不像是正確的URL - 看看如何配置這個文件..這就是錯誤是抱怨你的代碼應該是哪個ReportController.groovy:148 – Vahid
@vahid at第148行「reportSMS.generateReport(」PDF「,false,null,fileDest);」...那個url「org/pentaho/reporting/engine/classic/report_email.prpt」在grails上工作2.1.1 – akiong
我得到這個錯誤..「關鍵數據不能爲空」 – akiong