2013-03-12 2 views
0

저는 pentaho를 통해 pdf 보고서를 작성하려고합니다. 나는 pentho RD에 처음이에요.Pentaho report.setQuerty

나는하여 진정한 보고서를 생성 할 수있어 사전 구성하는 (dbconntion + 쿼리 및 매개 변수를 전달)을 PRPT 내에서 자바에서 호출. 괜찮습니다.

문제 : ("test.person FROM NAME, ID 선택", "dummyQuery") report.setQuery를 사용하는 트링하고; // 일부 쿼리가 동적으로 보고서를 생성 할 수 있습니다. 가능한 경우 ..? 내가 같은 쿼리 report.setQuery를 사용하는 경우

, 내 보고서는 빈 PDF를 생성? HQL 데이터 소스를 구성해야한다고 생각합니다.이 작업을 수행하려면?

사전 구성 PRPT - 싸이 2 개 값 NAME 및 ID를 표시.

매개 변수 전달을 통해이 pdf를 동적으로 생성 할 수 있습니다.
이 pdf를 동적으로 생성하는 데 도움을주십시오 setQuery 또는 "setQuery 사용 방법".
나는 pentaho pdf 보고서를 생성하는 것을 정말로 배우고 싶다.

package com.report; 

    import java.io.File; 
    import java.io.IOException; 
    import javax.servlet.ServletException; 
    import javax.servlet.annotation.WebServlet; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 

    import org.pentaho.reporting.engine.classic.core.ClassicEngineBoot; 
    import org.pentaho.reporting.engine.classic.core.MasterReport; 
    import org.pentaho.reporting.engine.classic.core.modules.output.pageable.pdf.PdfReportUtil; 
    import org.pentaho.reporting.libraries.resourceloader.Resource; 
    import org.pentaho.reporting.libraries.resourceloader.ResourceManager; 

    /** 
    * Servlet implementation class Generate 
    */ 
    @WebServlet("/Generate") 
    public class Generate extends HttpServlet { 
     private static final long serialVersionUID = 1L; 

     /** 
     * @see HttpServlet#HttpServlet() 
     */ 
     public Generate() { 
      super(); 
      // TODO Auto-generated constructor stub 
     } 

     /** 
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 
     *  response) 
     */ 
     protected void doGet(HttpServletRequest request, 
       HttpServletResponse response) throws ServletException, IOException { 
      // TODO Auto-generated method stub 
      try{ 
      response.reset(); 
      response.setContentType("application/pdf"); 
      ClassicEngineBoot.getInstance().start(); 
      ResourceManager manager = new ResourceManager(); 
      manager.registerDefaults(); 
      String PrptPath ="C:\\Users\\3692902\\Desktop\\pentahoTest.prpt"; 


      //generate report through pre-configured prpt (db connection + query) 
      Resource res = manager.createDirectly(new File(PrptPath), MasterReport.class); 
      MasterReport report = (MasterReport) res.getResource(); 
      report.getParameterValues().put("IDValue",101); 

      //generate report through query????? 
      //report.setQuery("SELECT ID FROM test.person"); 

      PdfReportUtil.createPDF(report,response.getOutputStream()); 
      } 
      catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 

     /** 
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 
     *  response) 
     */ 
     protected void doPost(HttpServletRequest request, 
       HttpServletResponse response) throws ServletException, IOException { 
      // TODO Auto-generated method stub 
     } 

    } 

답변

0

PRPT 파일에서 보고서를로드하고 있습니다. 그렇다면 SQL-Data-Source (메뉴 : 데이터 -> 데이터 소스 추가 -> SQL)를 추가하여 Report-Designer에서 쿼리를 미리 정의하지 않는 이유는 무엇입니까? 엔진이 내장 된보고를 통해 보고서를 생성 할 수있는 "어려운"방법이다

SELECT ID FROM test.person WHERE ID = ${IDValue} 
0

: 당신이, 당신이 (PRD, NOT 코드 내부)에 쿼리를 설정합니다 IDValue에 의해 필터링 할 가정 그리고

, 자바에서.

사용중인 엔진의 버전과 일치하는 Pentaho Report Designer (예 : Pentaho Report Designer 5.4, Pentaho Reporting Engine 5.4)를 다운로드하십시오.

보고서 디자이너에서 새 보고서를 만들고 보고서 (1. Creating your first report)를 작성하여 연결 (또는 필요한 데이터 소스)을 만들고 쿼리를 만들고 매개 변수를 정의하십시오.

마지막으로,이 서블릿에서 보고서를 호출하고 표시하기 위해 위의 코드를 사용합니다.

는 모든 보고서에 필요한, 그럼 그냥 매개 변수를 보내고 모든 곳에서 발생 정의 곳 펜타 보고서 디자이너가 기억!