Начнем, как водится, с постановки задачи.
- Google Web Toolkit - http://code.google.com/webtoolkit/gettingstarted.html
- JasperReports - http://www.jaspersoft.com/
- Gwt (Gwt-Ext) приложение :)
Далее файл отчета компилируется, и на выходе получаем файлы *.jasper.
JasperCompileManager.compileReportToFile("WebappReport.jrxml");
В некоторых случаях это удобно, так как дает возможность в эксплуатации поставлять клиентам готовый отчет, а не исходники его.
После этого отчет запускается с помощью JasperFillManager.fillReport() в результате получаем JasperPrint объект, также возможно сохранить в файл.
В конце используя один из классов JexcelApiExporter, JexcelApiExporterNature, JexcelApiExporterParameter, JRCsvExporter, JRGraphics2Dexporter, JRHtmlExporter, JRPdfExporter, JRPrintServiceExporter, JRRtfExporter, JRTextExporter, JRXlsExporter, JRXmlExporter можем экспортировать отчет в любой из данных форматов.
Прототип приложения
Для примера взят протип приложения GWT-Ext Showcase2, переделанный в рамках требований клиента.
Когда мы кликаем “Logined users”, информация разворачивается в новом табе, показывая детали. Пока все просто и ясно? Теперь все по порядку.
Первый шаг
Итак, перво-наперво поработаем с Jasper и создадим сам отчет
- Имеем jasperreports-3.1.2-project.zip, разархивируем его в C:\demo\jasper. Находим в директории “demo\samples\webapp” (отличный пример для запуска отчетов под web) отчет WebappReport.jrxml
- Далее используя iReport подправляем отчет под наши нужды, заменяем заголовок отчета, а также настраиваем JDBC DataSource и Report Query.
- Слегка меняем исходники в директории “demo\samples\webapp\WEB-INF\classes\servlets” – делаем возможность запуска отчета используя параметр reportfile: String rp = req.getParameter(“reportfile”); String reportFileName = context.getRealPath("/reports/”+rp+”.jasper");
“demo\samples\webapp” для тестирования – в HTML все линки прописываем название отчета “?reportfile=WebappReport”;
- В корневом каталоге “ demo\samples\webapp” запускаем ANT.
Итак, после настройки Tomcat, копируем содежимое “demo\samples\webapp” в Tomcat ”webapps\jasper”, и запускаем его.
Открываем браузер вводим туда ссылку ниже (Внимание у вас может отличаться порт!).
http://localhost:8887/jasper/
Здесь же и проверяем отчет.
Второй шаг
Итак, отчет у нас работает, теперь приступаем к GWT. При нажатии на “Logined users”, открывается пустой таб:
Осталось интегрировать Jasper.
Создаем простейший ReportManager class со статическим методом:
public class ReportManager {
public static String getExportReportURL(String report, String exptype){
return "http://localhost:8887/jasper/servlets/"+exptype+"?reportfile=" + report;
};
Далее создаем панель:
Panel centerPanel = new Panel();centerPanel.setLayout(new BorderLayout());
centerPanel.setTitle("Sessions");
…
String rep_url = ReportManager.getExportReportURL("WebappReport","html");
final Frame frame = new Frame(rep_url);
centerPanel.add(frame, new BorderLayoutData(RegionPosition.CENTER));
Toolbar toolbar = new Toolbar();
toolbar.addFill();
ToolbarButton toolbarButton = new ToolbarButton("PDF", new ButtonListenerAdapter() {
public void onClick(Button button, EventObject e) {
frame.setUrl(ReportManager.getExportReportURL("WebappReport","pdf"));
}
});
…
Запускаем проект в Host Mode, нажимаем на “Logined users” и .... получаем
При нажатии PDF – мы увидим отчет уже в Pdf формате:
Теперь осталось дождаться клиента и за чашечкой кофе рассказать о будущих перспективах :)