Интеграция BIRT в существующее веб-приложение - PullRequest
6 голосов
/ 24 января 2012

Я хотел бы добавить механизм отчетов BIRT в существующее веб-приложение в Tomcat. Мне не нужен просмотрщик BIRT, я действительно хочу иметь возможность запускать отчеты с URL-адреса, например http://localhost:8080/birt/output?__report=test.rptdesign&sample=my+parameter, и использовать различные параметры экспорта pdf, xls, doc, html.

Руководства по интеграции, которые я нашел до сих пор, включают в себя программу просмотра и написание собственных сервлетов для работы с различными форматами.

Я надеялся, что кто-то просто знал, какие сопоставления сервлетов мне нужны из файла report-engine web.xml и какие jar-файлы мне нужно будет включить из каталога lib для этой базовой реализации BIRT в существующем веб-приложении.

Ответы [ 2 ]

17 голосов
/ 25 января 2012

Я надеялся, что кто-то просто знал, какие отображения сервлетов из Мне нужен файл report-engine web.xml и какие jar-файлы мне понадобятся включить из каталога lib для этой базовой реализации BIRT в существующем веб-приложении.

Я не обязательно хотел писать свой собственный сервлет. Я просто хотел интегрировать существующую среду выполнения отчетов из собственного автономного веб-приложения ( здесь под кнопкой "Runtime") в мое существующее веб-приложение, чтобы Мне не нужно распространять 2 веб-приложения для поддержки запуска отчетов BIRT. Извините, если не ясно.

Я решил это, хотя и самым простым способом, на случай, если у кого-то возникнет аналогичный вопрос (с использованием среды выполнения BIRT 3.7.1):

  1. Все, что вам нужно, это следующее отображение сервлета, добавленное к вашему webapp\web-inf\web.xml файлу:

    <!-- 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. Включите все банок из каталога web-inf\lib среды выполнения в ваш собственный каталог webapp\web-inf\lib.

После этого вы можете запускать файлы .rptdesign, используя URL-адрес отчета output BIRT из своего собственного веб-приложения и указывая любой формат, который вам нужен, например ::

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
1 голос
/ 25 января 2012

Насколько я понимаю, вы пытаетесь сгенерировать отчет о birt из сервлета, где у вас есть * .rptdesign в каком-то месте.

Хорошо, посмотрите на следующий код

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

Как вы можете видеть первым делом, вы должны подготовить механизм birt, а затем получить экземпляр отчета с типом IReportRunnable, чтобы вы могли после этого установить местоположение выходных данных с помощью параметра therender, который будет изменен в зависимости от вашего запроса. .

У вас есть несколько вариантов, HTMLRenderOption, PDFRenderOption и другие.

Я надеюсь, что это послужит вам.

Спасибо.

...