Определение проблемы
У меня проблема с производительностью при отображении большого / огромного набора данных в отчете 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 и т. Д. ... но я не уверен, что что-то из этого решит проблему.
Буду признателен, есликто-то может указать мне правильное направление.