2012-05-25 24 views
9

Tôi đã tạo một báo cáo đơn giản lấy một tham số. Tham số này được sử dụng trong truy vấn và thực hiện tốt khi được thực hiện trực tiếp trong trình thiết kế báo cáo. Bằng cách này tôi không sử dụng javascript hoặc bất kỳ kịch bản cho báo cáo này. Tôi đã nhìn thấy một số người cố gắng để vượt qua các thông số bằng cách sử dụng script và/hoặc javascripts cho câu trả lời ở đây, tuy nhiên đây không phải là những gì tôi đang làm. Tôi vượt qua tất cả các thông số của tôi thông qua java. Tiếp tục, trong báo cáo này tôi liệt kê các mục hoạt động/không hoạt động. Tôi chuyển vào 'N' để liệt kê các mục không hoạt động và 'Y' cho các mục đang hoạt động. Khi tôi cố gắng truyền vào một tham số thông qua API, tôi luôn nhận được một danh sách các mục đang hoạt động bất chấp những gì tôi truyền vào. Bằng cách này 'Y' là giá trị mặc định của tham số được truyền vào. (Tôi đang ghi đè các giá trị mặc định trong mã bên dưới) Vấn đề tôi gặp phải là báo cáo dường như không muốn tham số tôi đặt. Có thay đổi giá trị trong biến của tôi được chuyển vào nhưng báo cáo không phản ánh thay đổi. Mã của tôi là dưới đây. Tôi đã cố gắng làm theo lời khuyên của liên kết này và cách thiết lập các tham số.Làm cách nào để bạn đặt và chuyển thông số cho báo cáo BIRT được tạo bởi BIRT Report Designer thông qua API BIRT?

http://www.eclipsezone.com/eclipse/forums/t67723.html

Nếu bạn đi đến liên kết đi xuống # 4 và xem danh sách các nhiệm vụ để làm. Đây là những gì tôi đã cố gắng làm theo. Tôi cảm thấy tôi có thể thiếu một cái gì đó. Nếu bạn đã có điều này đi, bạn có thể cho tôi một số lời khuyên cho những gì tôi đang thiếu? Cảm ơn nhiều!

-Dale

public class ReportGenerator { 
     public static void main(String args[]) throws Exception{ 
     ReportGenerator rg = new ReportGenerator(); 
     rg.executeReport("N"); 
     } 


     @SuppressWarnings({ "unchecked", "deprecation" }) 
     public void executeReport(String activeIndicator) throws EngineException { 

     IReportEngine engine=null; 
     EngineConfig config = null; 

     try{ 
      config = new EngineConfig();    
      config.setBIRTHome("C:\\birt-rcp-report-designer-3_7_2\\ReportEngine"); 
      config.setLogConfig("c:/temp/test", Level.FINEST); 
      Platform.startup(config); 
      IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY); 
      engine = factory.createReportEngine(config);   


      IReportRunnable reportDesign = null; 
      reportDesign = engine.openReportDesign("C:\\workspace\\SimpleReport\\ReportTemplates\\ItemListingReport.rptdesign"); 
      IRunAndRenderTask task = engine.createRunAndRenderTask(reportDesign); 
      IGetParameterDefinitionTask parameterDefinitionTask = engine.createGetParameterDefinitionTask(reportDesign); 
      parameterDefinitionTask.evaluateDefaults(); 
      HashMap<String, String> params = parameterDefinitionTask.getDefaultValues(); 
      params.put("aIndicator", activeIndicator); 
      parameterDefinitionTask.setParameterValues(params); 

      ConnectionHelper connectionHelper = new ConnectionHelper(); 
      task.getAppContext().put("OdaJDBCDriverPassInConnection", connectionHelper.getConnection()); 

      PDFRenderOption options = new PDFRenderOption(); 
      options.setOutputFormat("pdf"); 
      options.setOutputFileName("C:\\workspace\\SimpleReport\\output\\itemListingReport.pdf"); 

      task.setRenderOption(options); 

      task.run(); 
      task.close(); 
      engine.destroy(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } finally { 
      Platform.shutdown(); 
     } 
     } 
    } 

Trả lời

11

Bạn cần phải thiết lập các thông số trên IRunAndRenderTask:

IRunAndRenderTask task = 
    engine.createRunAndRenderTask(reportRunnable); 
Map< String, Object > birtParams = ...; 
task.setParameterValues(birtParams); 
+0

Trong một phiên bản trước (trước khi BIRT 4), tất cả tôi phải làm là mới EngineConfig(). setAppContext (birtParams). –

Các vấn đề liên quan