0

prpt 内で (dbconntion + クエリとパラメーターを渡す) を事前に構成し、それを Java から呼び出すことで、真のレポートを生成できます。それはうまくいっています。

問題:report.setQuery("dummyQuery","SELECT NAME,ID FROM test.person");//some queryレポートを動的に生成しようとしています。これは可能ですか?

同じクエリで report.setQuery を使用すると、レポートで空白の pdf が生成されます。これを実現するには、HQL データソースを構成する必要があると思います。

pre-config PRPT - NAME と ID の 2 つの値を表示しています。

パラメータを渡すことで、この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
        }

    }
4

2 に答える 2

0

PRPT ファイルからレポートを読み込んでいます。では、Report-Designer で SQL-Data-Source を追加して (メニュー: [データ] -> [データ ソースの追加] -> [SQL])、クエリを事前に定義しないのはなぜですか?

次に、IDValue でフィルター処理する場合、クエリを (コードではなく PRD 内で) 次のように設定します。

SELECT ID FROM test.person WHERE ID = ${IDValue}
于 2013-03-24T12:12:24.557 に答える