2012-01-24 28 views
6

Tôi muốn thêm công cụ báo cáo BIRT vào một ứng dụng web hiện có trong Tomcat. Tôi không cần trình xem BIRT, tôi thực sự chỉ muốn có thể chạy các báo cáo từ một url như http://localhost:8080/birt/output?__report=test.rptdesign&sample=my+parameter và sử dụng các tùy chọn xuất pdf khác nhau, xls, doc, html.Tích hợp BIRT trong ứng dụng web hiện tại

Hướng dẫn tích hợp mà tôi đã tìm thấy cho đến nay tất cả đều bao gồm trình xem và viết các servlet của riêng tôi để xử lý các định dạng khác nhau. Tôi đã hy vọng một người nào đó biết đơn giản là ánh xạ servlet nào từ tệp web.xml báo cáo của động cơ báo cáo mà tôi cần và các lọ tôi sẽ cần bao gồm từ thư mục lib để triển khai BIRT barebones này trong webapp hiện có.

Trả lời

17

Tôi đã hy vọng có ai đó biết cách đơn giản mà ánh xạ servlet từ tập tin web.xml báo cáo động cơ tôi cần và đó lọ Tôi sẽ cần phải bao gồm từ thư mục lib cho BIRT thi này barebones trong webapp hiện có.

Tôi không nhất thiết muốn viết servlet của riêng tôi Tôi chỉ muốn tích hợp thời gian chạy báo cáo hiện tại từ webapp độc lập riêng của mình (here dưới nút "runtime") vào webapp hiện tại của tôi, vì vậy mà tôi don' t phải phân phối 2 ứng dụng web để hỗ trợ chạy báo cáo BIRT. Xin lỗi nếu điều đó không rõ ràng hơn.

tôi đã làm việc này ra, mặc dù trong thời trang đơn giản nhất có thể, trong trường hợp bất cứ ai có một câu hỏi tương tự (sử dụng BIRT runtime 3.7.1):

  1. Tất cả bạn cần là ánh xạ servlet sau thêm vào riêng webapp\web-inf\web.xml tập tin của bạn:

    <!-- Engine Servlet --> 
    <servlet> 
        <servlet-name>EngineServlet</servlet-name> 
        <servlet-class>org.eclipse.birt.report.servlet.BirtEngineServlet</servlet-class> 
    </servlet> 
    
    <servlet-mapping> 
        <servlet-name>EngineServlet</servlet-name> 
        <url-pattern>/output</url-pattern> 
    </servlet-mapping> 
    
  2. Bao gồm tất cả lọ từ web-inf\lib thư mục của runtime vào webapp\web-inf\lib dir của riêng bạn ectory.

Sau đó bạn có thể chạy .rptdesign file bằng cách sử dụng url báo cáo BIRT output từ webapp của riêng bạn, và xác định bất cứ định dạng mà bạn muốn, ví dụ:

http://localhost:8080/myOwnWebapp/output?__report=test.rptdesign&__format=pdf 
http://localhost:8080/myOwnWebapp/output?__report=test.rptdesign&__format=html 
http://localhost:8080/myOwnWebapp/output?__report=test.rptdesign&__format=xls 
http://localhost:8080/myOwnWebapp/output?__report=test.rptdesign&__format=doc 
http://localhost:8080/myOwnWebapp/output?__report=test.rptdesign&__format=ppt 
+3

Câu trả lời tuyệt vời, một khoản tín dụng cho Stack Overflow. Hoàn thành và chính xác những gì đã được yêu cầu. Làm tốt lắm. – MystikSpiral

+0

xem lại - hoạt động cho 4.2.2 cũng – Geronimo

+0

Điều này phù hợp với BIRT 4.3.2 trong Tomcat 7. Nó không hoạt động trong Jetty cho 3.7.1 hoặc 4.3.2. – Ryan

1

Khi tôi hiểu bạn, bạn đang cố gắng tạo một biểu mẫu báo cáo birt một servlet nơi bạn có * .rptdesign ở một nơi nào đó.

Tốt, nhìn vào đoạn mã sau

this.bundle = ResourceBundle.getBundle("com.tts.mersal.resources.MersalResources"); 
this.config = new EngineConfig(); 
this.config.setEngineHome(bundle.getString("BIRT_ENGINE_HOME")); 
this.config.setLogConfig(bundle.getString("BIRT_LOGGING_FOLDER_PATH"), Level.ALL); 
Platform.startup(config); 
this.factory = (IReportEngineFactory)Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY); 
this.engine = factory.createReportEngine(config); 
this.engine.changeLogLevel(Level.ALL); 
ContentReader contentReader = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getFileFolderService().getReader(MersalOutboundReportDialogBean.this.dialogReportNode.getNodeRef()); 
IReportRunnable report = MersalOutboundReportDialogBean.this.getEngine().openReportDesign(contentReader.getContentInputStream()); 
ReportDesignHandle designHandle = (ReportDesignHandle)report.getDesignHandle(); 
OdaDataSource source = (OdaDataSource)designHandle.getModule().findDataSource(DATA_SOURCE_NAME); 
source.setProperty(source.getPropertyDefn("FILELIST"), buildUrl((String)source.getProperty(designHandle.getModule(), "FILELIST"))); 
IRunAndRenderTask runAndRenderTask = MersalOutboundReportDialogBean.this.getEngine().createRunAndRenderTask(report); 
HTMLRenderOption render = new HTMLRenderOption(); 
render.setOutputFileName("G:/Render.html"); 
render.setOutputFormat("html"); 
runAndRenderTask.setRenderOption(render); 
runAndRenderTask.run(); 
runAndRenderTask.close(); 

Như bạn có thể thấy điều đầu tiên bạn phải chuẩn bị các động cơ BIRT và sau đó nhận được một thể hiện của báo cáo từ loại IReportRunnable, vì vậy bạn có thể sau đó thiết lập các vị trí của đầu ra bằng cách sử dụng tùy chọn có phần sẽ được thay đổi dựa trên yêu cầu của bạn.

Bạn có nhiều lựa chọn, HTMLRenderOption, PDFRenderOption và các mục khác.

Tôi hy vọng rằng sẽ phục vụ bạn.

Cảm ơn.

+0

Cảm ơn cho điều này, tôi đã được chủ yếu là cố gắng để tích hợp thời gian chạy hiện tại trong webapp của riêng tôi. Xin lỗi nếu điều này không rõ ràng hơn.Tôi đã làm việc này bên dưới. – Geronimo

+0

+1 để hiển thị cách hoạt động của BirtEngineServlet – dragon66

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