2016-02-23 35 views
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.javaPentahoReport.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 

爲什麼我得到這個錯誤?

+0

reportSMS.setReportURL(「組織/ Pentaho的/報告/發動機/經典/ report_emai l.prpt「),看起來不像是正確的URL - 看看如何配置這個文件..這就是錯誤是抱怨你的代碼應該是哪個ReportController.groovy:148 – Vahid

+0

@vahid at第148行「reportSMS.generateReport(」PDF「,false,null,fileDest);」...那個url「org/pentaho/reporting/engine/classic/report_email.prpt」在grails上工作2.1.1 – akiong

+0

我得到這個錯誤..「關鍵數據不能爲空」 – akiong

回答

0

Grails的3.x中,你可以把你的文件轉換成的src /主/資源/ <,尤其是圓形的文件 - >

看到this例如..

,如果你把你的文件AAA。 PRPT中的src/main /資源/ aaa.prpt

所以你的代碼必須改變這樣的..

reportSMS.setReportURL("aaa.prpt")