2012-01-24 27 views
6

Me gustaría agregar el motor de informes BIRT a una aplicación web existente en Tomcat. No necesito el visor BIRT, realmente solo quiero poder ejecutar los informes desde una url como http://localhost:8080/birt/output?__report=test.rptdesign&sample=my+parameter y usar las diferentes opciones de exportación pdf, xls, doc, html.Integrar BIRT en la aplicación webapp existente

Las guías de integración que he encontrado hasta ahora incluyen el visor y la escritura de mis propios servlets para manejar diferentes formatos.

Esperaba que alguien supiera simplemente qué asignaciones de servlet del archivo web.xml del motor de informes que necesitaba y qué jarras necesitaría incluir desde el directorio lib para esta implementación BIRT barebones en la aplicación web existente.

Respuesta

17

Yo estaba esperando que alguien sabía, simplemente, que las asignaciones de servlet desde el archivo web.xml informe-motor que necesitaba y lo que los frascos que tendrían que incluyen desde el directorio lib para esta aplicación BIRT barebones en aplicación web existente.

yo no necesariamente quiero escribir mi propio servlet sólo quería integrar el tiempo de ejecución de informes existentes desde su propia aplicación web independiente (here bajo el botón "tiempo de ejecución") en mi aplicación web existente, de modo que yo no' Tengo que distribuir 2 webapps para admitir la ejecución de informes BIRT. Lo siento si eso no fue más claro.

Yo resolver esto, sin embargo, de la manera más sencilla posible, por si alguien tiene una pregunta similar (usando BIRT tiempo de ejecución 3.7.1):

  1. Todo lo que necesita es la siguiente correlación de servlet añadió a webapp\web-inf\web.xml su propio archivo:

    <!-- 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. Incluir todos los frascos desde el directorio de la web-inf\libruntime en su propia webapp\web-inf\lib dir ectory.

continuación, puede ejecutar .rptdesign archivos utilizando el informe url output BIRT desde su propia aplicación web, y especificando cualquier formato que desee, por ejemplo:

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

Fantástica respuesta, un crédito para Stack Overflow. Completo y exactamente lo que se solicitó. Bien hecho. – MystikSpiral

+0

revisited - funciona para 4.2.2 también – Geronimo

+0

Esto funciona para BIRT 4.3.2 en Tomcat 7. No funcionó en Jetty para 3.7.1 o 4.3.2. – Ryan

1

Como te entiendo, estás tratando de generar un informe de birt de un servlet en el que tienes * .rptdesign en algún lugar.

Bueno, mira el código

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(); 

siguiente Como se puede ver la primera cosa que debe preparar el motor Birt y luego obtener una instancia del informe del tipo IReportRunnable, por lo que puede después de eso establecer la ubicación de la salida utilizando la opción therender que se modificará en función de su solicitud.

Tiene múltiples opciones, HTMLRenderOption, PDFRenderOption y otras.

Espero que te sirva.

Gracias.

+0

Gracias por esto, yo estaba tratando principalmente para integrar el tiempo de ejecución existente en mi propia aplicación web. Lo siento si esto no fue más claro.Tengo esto resuelto a continuación. – Geronimo

+0

+1 para mostrar cómo funcionan las cosas detrás del BirtEngineServlet – dragon66

Cuestiones relacionadas