Как мне обрабатывать большие наборы результатов в Crystal Reports, используя Java? - PullRequest
1 голос
/ 10 сентября 2010

Определение проблемы

У меня проблема с производительностью при отображении большого / огромного набора данных в отчете Crystal.Отчет занимает около 4 минут или более в зависимости от размера набора результатов.

Как обрабатывать большие наборы результатов в Crystal Reports без проблем с производительностью?

Среда

Crystal Reports XI

Apache WebSvr 2.X

Jboss 4.2.3

Struts

Java Reporting Component (JRC)

Crystal Report Viewer (CRV)

Firefox

Подробности

Я использую CRXIтолстый клиент для создания моего отчета (.rpt), а затем использовать его в моем веб-приложении (webapp) под Jboss.

Пользователь задает критерии фильтра для создания отчета (диапазон дат и т. д.) и отправляет запрос в веб-приложение.,Webapp запрашивает базу данных, получает «набор результатов».

Я инициализирую JRC и CRV в соответствии со всеми спецификациями и, наконец, вызываю метод «processHttpRequest» Crystal Report Viewer для отображения отчета в браузере.

Итак .....

  • Получен запрос на создание отчета с критериями фильтра

  • Запрос БД для получения набора результатов

  • Инициализация JRC и CRV

  • , наконец, отобразить отчет, вызвав

    reportViewer.processHttpRequest (request, response, request.getSession () .getServletContext (), null);

Проблема производительности находится на последнем шаге.Я поместил логи везде и заметил, что запрос к базе данных не занимает слишком много времени, чтобы вернуть набор результатов.Все обрабатывается довольно быстро, пока я не вызываю processHttpRequest из CRV.Этот метод просто долго зависает перед отображением отчета в браузере.

CRV работает довольно быстро, когда набор результатов меньше, но для большого набора результатов это занимает много времени.

Даиметь подчиненные отчеты и использовать формулы отчетов Crystal в отчетах.Некоторые из них также используются для группировки.Но я не думаю, что Subreports является настоящим виновником здесь.Потому что у меня есть некоторые другие отчеты, которые не имеют никаких подотчетов, и они тоже очень медленно отображают большие наборы результатов.

Решения?

Так что, очевидно, мне нужно хорошее решение дляэта общая проблема «Как вы обрабатываете большие наборы результатов в Crystal Reports?»

Я подумал о некоторых недоделанных идеях.

A) Используйте внешнюю нумерацию страниц и извлекайте данные только для текущей страницыотображаетсяНо для этого CRXI должен позволить мне создавать свои собственные кнопки (предыдущая, следующая, последняя), чтобы я мог управлять событием щелчка и соответствующим образом получать данные.Я попытался захватить события, зарегистрировав обработчик событий "addToolbarCommandEventListener" CRV.Но мой слушатель вызывается "после" завершения метода processHttpRequest, что не помогает.

Некоторые способы, которыми я должен иметь возможность управлять пользовательским интерфейсом, добавляя мою собственную предыдущую страницу, следующую страницу, кнопки последней страницы и контролируя его нажатие.События.

B) Пусть CRXI использует функциональность типа jquery, чтобы разрешить навигацию по страницам в браузере.Поэтому, возможно, в первый раз для отображения отчета потребуется 5 минут, но после его отображения пользователь сможет перейти на любую страницу, не отправляя запрос обратно на сервер.

C) Попробуйте использовать Crystal Reports 2008. IЯ открыт для использования этой версии, но я не могу понять, есть ли у нее какие-либо функции, которые могут мне помочь.

D) Используйте BIRT или JasperReports, поскольку они, очевидно, имеют возможность обрабатывать большие наборы данных, кэшируя частьнабора данных на диске и т. д. ...

E) Поможет ли использование серверов Crystal Reports, таких как сервер кеша, сервер приложений и т. д.?Я немного читал о Crystal Page Viewer, Interactive Viewer, Part Viewer и т. Д. ... но я не уверен, что что-то из этого решит проблему.

Буду признателен, есликто-то может указать мне правильное направление.

...