Бинь Чжоу, разработчик ПО, IBM & Дороти Ву, Web-редактор, IBM
Перед началом работы
Аналитические данные системы WebSphere Commerce лучше всего представляются в визуальном формате с помощью стандартного инструмента для создания отчётов. В идеале, разрабатывать такие отчёты несложно, применяя для этого интегрированную среду разработки (IDE), например WebSphere Commerce и Rational Application Developer (RAD) V6. В настоящее время среда отчётов, встроенная в WebSphere Commerce, используется как для аналитических (business intelligence reports), так и для рабочих отчётов (operational reports). В этой среде данные отображаются в виде таблиц, а не в графическом формате, что не очень удобно для корпоративных пользователей, которым требуется визуализация результатов в ходе анализа.
В этом руководстве мы выберем рабочий отчёт под названием Order Status Report (отчёт о ходе выполнения заказа) и используем встроенные инструменты Crystal Report для реализации отчёта с помощью IDE. Во встроенном инструменте Crystal Report имеется плагин RAD, помогающий завершить проектирование, разработку и тестирование отчёта в WebSphere Commerce Toolkit.
В руководстве демонстрируется реализация отчёта о ходе выполнения заказа для WebSphere Commerce с помощью инструментов Crystal Report, а также вкратце рассматриваются преимущества каждого инструмента для работы с отчётами. Кроме того, объясняется, как можно с помощью одних и тех же операций расширять существующие отчёты и создавать новые.
В среду разработки WebSphere Commerce входят инструменты, необходимые для создания пользовательского кода и выполнения задач, связанных с Web-разработкой. Она работает поверх Rational Application Developer, основной среды разработки IBM. Она помогает оптимизировать и упростить разработку приложений для платформы Java™ 2 Platform Enterprise Edition (J2EE) и Web-сервисов, предлагая оптимальные методики, шаблоны, генерацию кода, и является самой универсальной средой разработки в своём классе. В этой IDE имеется встроенная поддержка Java-компонентов, корпоративных компонентов, сервлетов, JSP-файлов, HTML, XML и Web-сервисов, и всё это - в одной среде разработки.
Среда разработки отчётов WebSphere Commerce предоставляет функциональность для создания стандартных, настраиваемых отчётов для сайта WebSphere Commerce. Среда генерирует отчёты на основе информации, содержащейся в производственной базе данных, и отображает отчёты в реальном времени. Среда состоит из стандартной управляющей команды, компонента данных и стандартного представления, выводящего результат. Можно настраивать среду, добавляя допустимые SQL-запросы и определяя JSP-файлы, используемые для запроса и отображения сгенерированных отчётов.
Доступ к отчётам можно получить при помощи WebSphere Commerce Accelerator. Следовательно, для каждого отчёта требуются несколько связанных ресурсов. Хотя сам отчёт состоит из данных, представленных в табличном формате, лежащие в его основе ресурсы состоят из идентификатора отчёта, SQL-запроса, элементов управления доступом и т. д. При запросе отчёта на сервере запускается управляющая команда. Управляющая команда вызывает задачи для создания стандартного представления, если только в отчёте не указано какое-то другое представление. Команда также задаёт необходимые переменные и возвращает эти данные для заполнения ReportDataBean в целевом JSP-файле. Контроль доступа для отчётов задаётся в представлениях, запрашивающих (input) и отображающих (output) отчёт. Результаты, возвращённые из базы данных, хранятся в компоненте данных как вектор хэш-таблицы. Наконец, JSP-файл выводит результат. Если отчёт пустой, JSP-файл отображает стандартную текстовую строку.
У каждого отчёта есть входное и выходное представления. Цель у всех входных JSP-файлов одна и та же. Выглядят они все примерно одинаково и запрашивают различные критерии ввода у общего пула входных виджетов. С другой стороны, выходные представления имеют общую структуру и форматы. Исходя из сущности отчётов, все компоненты многократного использования JSP-файлов отчёта создаются как компоненты совместного использования.
Среда отчётов также поддерживает множество типов реляционных баз данных (RDB). Разработчики могут указать SQL, использовавшийся для генерации данных отчёта универсального типа, после этого среда отчётов формирует SQL в соответствии с определённым типом базы данных, а затем выводит окончательный SQL-оператор, который и исполняется. На рисунке 1 показано, как среда отчётов выводит отчёт.
Рисунок 1. Среда отчётов WebSphere Commerce
Как показано на рисунке 1, пользователь вводит критерии запроса во входное представление отчёта. Центр управления отчётами получает входной параметр из входного представления и считывает, анализирует и форматирует xml-файл, определяющий содержимое текущего отчёта. Центр управления отчётами генерирует SQL-оператор в соответствии с пользовательским вводом и типом текущей базы данных, а затем передает этот SQL-оператор базе данных. Наконец, центр управления отчётами вводит результат, возвращённый базой данных, в компонент данных отчёта, анализирует его и передаёт в выходное представление. Выходное представление отображает содержимое отчёта в табличном формате.
Crystal Reports - популярный инструмент для работы с отчётами. Он предназначен для работы со многими источниками данных и помогает пользователям анализировать и интерпретировать важную информацию. Crystal Reports облегчает пользователям создание простых отчётов; также в нём имеются универсальные визуальные инструменты, необходимые для создания сложных или специализированных отчётов.
RAD предлагает функции для встраивания отчётов Crystal Reports в Java-приложения. Встроенный сценарий для работы с отчётами использует Java Reporting Component (JRC) и Crystal Reports Viewers Java SDK, что позволяет пользователям просматривать и экспортировать отчёты в Web-браузер. Они предоставляют функциональность, которая создаёт и настраивает объект средства просмотра отчётов, обрабатывает отчёт, а затем переводит его в DHTML. JRC обеспечивает полностью внутреннюю обработку отчётов на сервере Java-приложений. JRC позволяет обрабатывать файлы отчётов Crystal Reports (.rpt) внутри самого приложения, без использования внешних серверов отчётов. У такого решения имеются следующие преимущества:
- Этом решение полностью основано на Java.
- Данные времени исполнения динамически помещаются в отчёт.
- Размещение базы данных для отчёта изменяется программным путём.
- Файлы отчётов Crystal Reports (.rpt) экспортируются в форматы RTF и PDF.
В этом разделе обсуждается, как конвертировать рабочий отчёт WebSphere Commerce в отчёт Crystal Report. Каждый отчёт WebSphere Commerce имеет соответствующий xml-файл, определяющий SQL, который исполнялся для запроса данных для отчёта. Для поддержки различных баз данных и обеспечения гибкости этот SQL, который мы называем "необработанный SQL", невозможно выполнить напрямую, поскольку в нём имеются некоторые самоопределяемые функции, например "$Date()" или "$Time()". Эти самоопределяемые функции заменяются настоящими функциями конкретной базы данных в среде отчётов в зависимости от текущего типа базы данных. В необработанном SQL также имеется несколько переменных, заменяемых реальными значениями в соответствии с пользовательским вводом. Перед извлечением данных из базы данных среда отчётов заменяет все переменные и самоопределяемые функции и формирует окончательный SQL, исполняемый в базе данных.
Для конвертирования отчёта WebSphere Commerce в отчёт Crystal Report необходимо создать rtp-файл для Crystal Report при помощи необработанного SQL из отчёта WebSphere Commerce. В результате у этих отчётов будут одинаковые столбцы и формат. Затем необходимо извлечь окончательный SQL из среды отчётов и выполнить запрос, а также задать набор результатов из базы данных в качестве нового источника данных Crystal Report. В результате динамический контент отчётов Crystal Report и WebSphere Commerce будет одинаковым.
По умолчанию среда отчётов не предоставляет публичного интерфейса для возвращения окончательного SQL, поэтому необходимо настроить среду отчётов и добавить интерфейс для возвращения окончательного SQL-оператора.
Также необходимо выполнить окончательный SQL-оператор из среды отчётов и получить содержимое отчёта из базы данных. Это можно сделать при помощи одного из новых компонентов данных, CrystalReportDataBean.
Наконец, нужно задать набор результатов, возвращённый из CrystalReportDataBean в качестве нового источника данных для Crystal Report. Это можно реализовать, вызвав API JRC (Java Reporting Component). Код выглядит следующим образом:
DatabaseController.setDataSource(java.sql.ResultSet data,
java.lang. String oldTableAlias, java.lang.String newTableName)
|
Этот метод обновляет источник данных, используемый Crystal Report, указанным набором данных java.sql.ResultSet. На рисунке 1 показан динамический список, который используется для отображения списка определённых субсидий.
Рисунок 2. Решение по конвертированию отчёта WebSphere Commerce в отчёт Crystal Report
На рисунке 2 показано, как среда отчётов WebSphere Commerce и среда WebSphere Commerce Toolkit работают со встроенными инструментами Crystal Report, и как они конвертируют отчёты WebSphere Commerce в отчёты Crystal Reports.
Голубая стрелка показывает процесс генерации отчётов WebSphere Commerce, как описано в разделе Обзор среды отчётов WebSphere Commerce.
Зелёные стрелки показывают процесс получения встроенными инструментами Crystal Report необходимой информации, например окончательного SQL из среды отчётов, и генерации соответствующих отчётов Crystal Reports. Компонент CrystalReportDataBean получает окончательный SQL-оператор из центра управления отчётами (Report Control Center), а затем выполняет запрос в базе данных. Набор результатов выводится в JSP-файл, который использовался для отображения отчёта Crystal Report, мы определили его в качестве нового источника данных для текущего отчёта. Затем инструментальная среда показывает отчёт Crystal Report в WebSphere Commerce Accelerator.
Конвертирование рабочего отчёта в отчёт Crystal Report
Ниже перечислены основные шаги по конвертированию рабочего отчёта в отчёт Crystal Report:
- Войдите в WebSphere Commerce Accelerator.
- Выберите AdvancedB2BDirect store.
- Выведите все имеющиеся рабочие отчёты, нажав Sales - Operational Reports.
- Выберите Order Status Report, введите даты начала и окончания генерации отчёта, а затем нажмите OK. Будет выведен рабочий отчёт о ходе выполнения заказа (order status).
- Нажмите Show Crystal Report. Будет выведен сконвертированный отчёт Crystal Report.
Предварительные требования
Убедитесь, что установлены нижеперечисленные продукты и выполнены указанные настройки:
- Rational Application Developer с соответствующим пакетом исправлений для RAD и WebSphere 6.0
- Инструментальная среда WebSphere Commerce
- Выбрана база данных DB2, а не WebSphere Commerce Toolkit
- В таблице Orders имеются данные приложения
Настройка встроенного инструмента для работы с отчётами Crystal Reports в RAD
- Откройте RAD и перейдите в перспективу данных (data perspective).
- Правой кнопкой мыши щёлкните в представлении Database Explorer, а затем нажмите New Connection, как показано на рисунке 3.
Рисунок 3. Создание подключения к базе данных
- Появится мастер создания подключения к базе данных, показанный на рисунке 4.
Рисунок 4. Мастер создания подключения к базе данных
- Примите все значения по умолчанию и нажмите Next.
Рисунок 5. Создание подключения к базе данных
- В поле Alias введите имя экземпляра базы данных WebSphere Commerce (в данном руководстве используется имя MALL60), после этого введите соответствующие имя пользователя и пароль к базе данных, а затем нажмите Test Connection. Если подключение к базе данных будет успешным, появится диалоговое окно, показанное на рисунке 6.
Рисунок 6. Сообщение об успешном подключении к базе данных
- Нажмите OK и оставьте окно нового подключения к базе данных открытым.
- Отредактируйте конфигурационный файл Crystal Report. По умолчанию конфигурационный файл называется CRDB_JavaServer.ini и расположен по адресу C:\Program Files\Common Files\Crystal Decisions\2.5\bin. Откройте файл и выполните следующие шаги:
- Отредактируйте свойство PATH, указав в качестве его значения имеющийся каталог JVM. Задайте версию JDK ниже 1.4.2; в противном случае при попытке подключения к базе данных из встроенного инструмента для работы с Crystal Report вы получите ошибку.
- Скопируйте строку, указанную в поле Class Location в окне Connection Creation и добавьте её в свойство CLASSPATH.
- Задайте для свойства IORFileLocation любой существующий каталог.
- Задайте для свойства JDBCURL строку, указанную в поле Connection URL в окне Connection Creation.
- Задайте для свойства JDBCDriverName строку, указанную в классе JDBC-драйвера. Сохраните изменения. Файл CRDB_JavaServer.ini теперь выглядит следующим образом:
[Common]
PATH = C:\Program Files\Java\j2re1.4.1\bin
CLASSPATH = "C:\Program Files\Common Files\Crystal Decisions2.5\bin\CRDBJavaServer.jar";"C:\Program Files\Common Files\Crystal
Decisions\2.5\java\lib\external\CRDBXMLExternal.jar";"D:\IBM\SQLLIB
\java\db2jcc.jar";"D:\IBM\SQLLIB\java\db2jcc_license_cisuz.jar"${CLASSPATH}
IORFileLocation = ${TEMP}
JavaServerTimeout = 1800
JVMMaxHeap = 64000000
JVMMinHeap = 32000000
[CRDB_JDBC]
CacheRowSetSize = 100
JDBCURL = jdbc:db2:MALL60
JNDIURL =
JDBCUserName = db2admin
JDBCDriverName = com.ibm.db2.jcc.DB2Driver
JNDIUserName = weblogic
JNDIConnectionFactory =
JNDIInitContext = /
GenericJDBCDriverBehavior = DB2
[CRDB_XML]
PREREADNBYTE = 5000
CacheRowSetSize = 100
XMLLOCALURL =
SCHEMALOCALURL =
XMLHTTPURL =
SCHEMAHTTPURL =
USETEMPFile = TRUE
[CRDB_JavaBeans]
JavaBeansClassPath =
|
Мы закончили настройку встроенного инструмента для работы с отчётами Crystal Report.
Создание шаблона Crystal Report в RAD
Теперь создадим новый отчёт о ходе выполнения заказа в среде WebSphere Commerce Toolkit. Поскольку необходимо перейти к новому отчёту Crystal Report в WebSphere Commerce Accelerator, создайте соответствующий ресурс Crystal с помощью пункта меню Web project WebSphere Commerce Accelerator под названием "CommerceAccelerator".
- В RAD откройте перспективу J2EE. В представлении Project Explorer в элементе Dynamic Web Projects правой кнопкой мыши нажмите на проект CommerceAccelerator, как показано на рисунке 7.
Рисунок 7. Создание нового отчёта Crystal Report
- Выберите New > Crystal Report. Появится мастер создания отчётов Crystal Report, показанный на рисунке 8.
Рисунок 8. Ввод имени Crystal Report
- Введите или выберите существующую папку для файла отчёта, введите
OrderStatusReport
в качестве имени файла нового отчёта Crystal Report, а затем нажмите Finish.
Рисунок 9. Выбор типа и метода создания нового отчёта Crystal Report
- Выберите Using the Report Wizard and Standard и нажмите OK, как показано на рисунке 9.
Рисунок 10. Выбор JDBC в качестве источника данных отчёта Crystal Report
- Нажмите на элемент JDBC (JNDI) в разделе Create New Connection, как показано на рисунке 10.
Рисунок 11. Конфигурация JDBC
- Поля Connection URL и Database Classname были заполнены в соответствии с раннее сделанными в файле CRDB_JavaServer.ini настройками. Так как вы протестировали эти значения, примите их, а затем нажмите Next.
Рисунок 12. Подключение к базе данных с помощью JDBC
- Введите имя пользователя и пароль и нажмите Finish. Будут выведены все имеющиеся схемы и таблицы, как показано на рисунке 13.
Рисунок 13. Список со схемами базы данных и таблицами
- Выберите Add Command и нажмите на правую стрелку.
Рисунок 14. Ввод SQL-команды для отчёта
- Можно ввести SQL-оператор, используемый ранее для генерации отчёта. Он был определён в среде отчётов WebSphere Commerce. Файл определения отчёта находится в папке <toolkit_dir>\ xml\tools\reporting\OrderStatusReport.xml. Поскольку необходимо определить шаблон для отчёта, а не точные данные, нужно ввести только SQL, не используя конструкцию where. Создаётся условие запроса и динамически разбирается в Crystal Report для создания точных данных. Введите нижеприведённый SQL:
select orders.orders_id, orders.status, date (orders.lastupdate), orders.totalproduct,
orders.totaladjustment, orders.totaltax, orders.totalshipping, orders.totaltaxshipping
from orders
|
- Нажмите OK, чтобы вернуться к мастеру создания отчётов, а затем нажмите Next.
Рисунок 15. Выбор полей для отображения
- Вы можете отобразить все поля в SQL определения отчёта, для этого выберите все поля в списке слева и нажмите на правую стрелку. Нажмите Next.
Рисунок 16. Выбор полей для группировки
- В этом окне (Рисунок 16) можно указать, по какому столбцу в отчёте будет осуществляться группировка. Выберите состояние заказа (status of the order), затем - Command.STATUS, добавьте этот пункт на правую панель, нажав на правую стрелку, а затем нажмите Next.
Рисунок 17. Выбор итоговых полей
- Вам будет предложено определить итоговые поля. Выберите в качестве итоговых поля TOTALADJUSTMENT, TOTALTAX, TOTALSHIPPING и TOTALXSHIPPING и добавьте их к списку справа, как показано на рисунке 17. Нажмите Next.
Рисунок 18. Выбор типа группы
- Примите все значения по умолчанию и нажмите Next.
Рисунок 19. Выбор типа диаграммы и ввод заголовка диаграммы
- Выберите Bar Chart (линейчатая диаграмма) в качестве шаблона диаграммы для отчёта, как показано на рисунке 19, введите заголовок для этой диаграммы, а затем нажмите Next.
Рисунок 20. Выбор полей фильтрации
- Мы не будем определять поля фильтрации, поэтому нажмите на кнопку Next.
Рисунок 21. Выбор стиля отчёта
- В качестве стиля отчёта выберите Standard и нажмите Finish. Появится окно редактирования Crystal Report, и при необходимости вы сможете продолжить редактирование ваших отчётов, как показано на рисунке 22.
Рисунок 22. Редактирование отчёта Crystal Report
Мы закончили определение отчёта Crystal Report о ходе выполнения заказа.
Разработка отчёта Crystal Report, отображающего рабочий отчёт WebSphere Commerce
В этом разделе мы займёмся разработкой JSP-файла для отображения только что созданного отчёта Crystal Report о ходе выполнения заказа.
- В элементе CommerceAccelerator Web project правой кнопкой мыши нажмите на папку WebContent. Выберите New > JSP File, как показано на рисунке 23.
Рисунок 23. Создание нового JSP-файла для отображения Crystal Report
Появится окно, показанное на рисунке 24.
Рисунок 24. Ввод имени JSP-файла
- В поле File Name введите
orderStatusCrystalReport
в качестве нового имени JSP-файла, а затем нажмите Finish.
- Отредактируйте файл orderStatusCrystalReport.jsp, введя следующий код:
<%@ page import="com.crystaldecisions.report.web.viewer.*" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.data.*" %>
<%@ page import="com.crystaldecisions.reports.sdk.ReportClientDocument" %>
<%@ page import="com.ibm.commerce.tools.reporting.reports.crystal.*" %>
<%
try{
//пытаемся получить исходный объект отчёта из сеанса
Object reportSource = null;
ReportClientDocument reportClientDoc=null;
//инициируем исходный объект отчёта, если в сеансе его не существует
//указываем файл идентификации отчёта
String report = "/reports/orderStatusReport.rpt";
reportClientDoc = new ReportClientDocument();
reportClientDoc.open(report, 0);
//получаем исходный объект отчёта
reportSource = reportClientDoc.getReportSource();
//добавляем его к сеансу
//задаём информацию о подключении к базе данных, чтобы не нужно было каждый раз
вводить имя пользователя и пароль
ConnectionInfos connInfos = new ConnectionInfos();
IConnectionInfo connInfo1 = new ConnectionInfo();
connInfo1.setUserName("db2admin");
connInfo1.setPassword("passw0rd");
connInfos.add(connInfo1);
//выводим содержимое отчёта
CrystalReportViewer viewer = new CrystalReportViewer();
viewer.setReportSource(reportSource);
viewer.setDatabaseLogonInfos(connInfos);
viewer.setOwnPage(true);
viewer.processHttpRequest(request, response,
getServletConfig().getServletContext(), null);
}
catch(Exception e){
e.printStackTrace();
}
%>
|
- Сохраните изменения. Теперь можно проверить Crystal Report, запустив его на тестовом сервере WebSphere Commerce. Правой кнопкой мыши нажмите orderStatusCrystalReport.jsp и выберите Run > Run on server. Появится следующее окно (см. рисунок 25).
Рисунок 25. Выбор сервера
- Выберите WebSphere Commerce Server и нажмите Finish. Подождите, пока не запустится тестовый сервер и не будет показан orderStatusCrystalReport.jsp (см. рисунок 26).
Рисунок 26. Предварительный просмотр отчёта Crystal Report в JSP-файле
Мы создали JSP-файл и вывели отчёт Crystal Report о ходе выполнения заказа в среде разработки WebSphere Commerce.
Отображение отчёта Crystal Report в инструментальной среде
В этом разделе мы будем настраивать среду отчётов WebSphere Commerce Report Framework для конвертирования рабочих отчётов WebSphere Commerce в отчёты Crystal Reports. Мы добавим кнопку, при нажатии на которую отчёт Crystal Reports будет отображаться на странице с результатами отчёта WebSphere Commerce.
- Откройте файл <toolkit_dir>\ xml\tools\reporting\OrderStatusReportOutputDialog.xml и введите следующий код для добавления новой кнопки:
<button name="ReportOutputViewCrystalReport"
action="CONTENTS.viewCrystalButton()"/>
|
- ReportOutputViewCrystalReport - это имя свойства, определяющего текст, который будет выводиться на этой кнопке. Чтобы присвоить этому свойству значение, откройте файл <toolkit_dir>\properties\com\ibm\commerce\tools\reporting\properties\Reports_en_US.properties и добавьте следующей код:
ReportOutputViewCrystalReport=View Crystal Report
|
- Выполнив вышеперечисленные шаги, вы увидите новую кнопку на странице с результатами отчёта Order Status Report, что показано на рисунке 27.
Рисунок 27. Добавление кнопки в инструментальную среду
- Теперь создадим новое представление, включающее в себя JSP-файл отчёта Crystal Report о ходе выполнения заказа и отображающее этот отчёт в инструментальной среде WebSphere Commerce.
- Создайте новый JSP-файл с именем
orderStatusOutputCrystalView.jsp
, в который входит файл orderStatusCrystalReport.jsp в папке <toolkit_dir>\workspace\CommerceAccelerator\WebContent\tools\reporting. Код будет выглядеть следующим образом:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ include file="../common/common.jsp" %>
<html>
<HEAD>
<link rel=stylesheet href=/wcs/tools/common/centre_en_US.css type="text/css">
<TITLE></TITLE>
<script type="text/javascript">
document.onmousemove=initializeState();
function getResultBCT() {
return "result bct";
}
function initializeState(){
parent.setContentFrameLoaded(true);
}
function savePanelData(){
return true;
}
function validatePanelData(){
return true;
}
function okButton(){
top.goBack();
}
</script>
</HEAD>
<BODY name="mainBoday"">
<%@ include file="/storeReport.jsp" %>
</BODY>
|
- Отредактируйте конфигурационный файл struts, чтобы этот JSP-файл обрабатывался средой struts framework. Отредактируйте файл struts-config-ext.xml и создайте новое определение действий (action mapping), как показано на рисунке 28.
Рисунок 28. Настройка определения действий для нового представления
- В разделе Action Mapping attributes, в поле Type, введите
com.ibm.commerce.struts.BaseAction
. Затем задайте конфигурацию Global Forwards для этого представления, как показано на рисунке 29.
Рисунок 29. Настройка Global Forwards для нового представления
- В разделе Foward Attributes, в поле Path, введите полный путь ко вновь созданному jsp-файлу,
/tools/reporting/orderStatusOutputCrystalView.jsp
. Добавьте новое свойство с именем resourceClassName
и присвойте ему значение com.ibm.commerce.tools.command.ToolsForwardViewCommandImpl
.
- Сохраните изменения файла struts-config-ext.xml.
- Создайте в инструментальной среде новое диалоговое представление. Создайте новый xml-файл с именем OrderStatusReportOutpuCrystaltDialog.xml в папке <toolkit_dir>\xml\tools\reporting и добавьте следующий код:
<dialog resourceBundle="reporting.reportStrings"
windowTitle="OrderStatusReportOutpuCrystaltViewTitle"
finishURL="" >
<panel name="report"
url="orderStatusOutputCrystalView"
passAllParameters="true"
hasFinish="NO"
hasCancel="NO"
helpKey="MC.reporting.OrderStatusReportOutputView.Help" />
<button name="ReportOutputViewOkTitle"
action="CONTENTS.okButton()" />
</dialog>
|
- Наконец, следует реализовать JavaScript-метод viewCrystalButton () в OrderStatusOutputView и вызвать это новое диалоговое представление. Код выглядит следующим образом:
function viewCrystalButton(){
var url = "/webapp/wcs/tools/servlet/DialogView?XMLFile=reporting.
OrderStatusReportOutpuCrystaltDialog";
url += "&status=" + "new";
if (top.setContent){
top.setContent('<%=UIUtil.toJavaScript((String)reportsRB.get
("OrderStatusReportOutpuCrystaltViewTitle"))%>',url, true);
}else{
parent.location.replace(url);
}
}
|
- При нажатии на кнопку View Crystal Report отчёт Crystal Report о ходе выполнения заказа будет выведен в WebSphere Commerce Accelerator, как показано на рисунке 30.
Рисунок 30. Предварительный просмотр отчёта Crystal Report в инструментальной среде
Настройка среды отчётов
Содержимое вышеупомянутого отчёта, показанное на рисунке 30, генерируется при помощи SQL, введённого при определении Crystal Report. Этот SQL не содержит никаких конструкций с условиями запроса. Это значит, что фильтрация данных отчёта в соответствии с определёнными статистическими критериями не производится. В реальной ситуации для генерации SQL-операторов запроса некоторые критерии применяются. В примере отчёта о ходе выполнения заказа в качестве критериев пользователь может ввести срок действия заказа, ход выполнения заказа и валюту. Среда отчётов WebSphere Commerce формирует SQL-оператор в соответствии с этими условиями запроса и генерирует данные отчёта. Для отображения нужной информации в соответствии с пользовательским вводом получите этот SQL из среды отчётов и проанализируйте его в Crystal Report.
Необходимо настроить среду отчётов и добавить интерфейс для возвращения окончательного SQL-оператора, который использовался для генерации данных отчёта. Реализовать это можно, настроив классы ReportControlCenter и ReportDataBean.
- Добавьте следующий метод для возвращения динамического SQL-оператора:
private String sql=null
public String getSqlString(){
return sql;
}
|
- В <toolkit_dir>\workspace\CommerceAccelerator\WebContent\tools\reporting\OrderStatusReportOutputView.jsp получите SQL-оператор и поместите его в объект сеанса, добавив следующий код:
request.getSession().setAttribute("sqlString", aReportDataBean.getSqlString());
|
- Теперь создадим новый класс с именем CrystalReportDataBean. В этом компоненте данных извлекаются данные в соответствии с проанализированным SQL-оператором и возвращается объект ResultSet для Crystal Report, чтобы сгенерировать динамические данные. Основной метод называется fetchData(String queryString), а код выглядит так:
public ResultSet fetchData(String queryString){
ResultSet result =null;
try{
this.makeConnection();
PreparedStatement ps=this.getPreparedStatement(queryString);
result=ps.executeQuery();
}
catch(Exception e){
e.printStackTrace();
}
return result;
}
|
- Отредактируем файл orderStatusCrystalReport.jsp, получим SQL из объекта сеанса и динамически сгенерируем данные Crystal Report, как показано ниже:
CrystalReportDataBean reportDataBean=null;
try{
String sqlString =(String)request.getSession().getAttribute("sqlString");
//пытаемся получить исходный объект отчёта из сеанса
Object reportSource = null;
ReportClientDocument reportClientDoc=null;
//инициируем исходный объект отчёта, если в сеансе его не существует
//указываем файл идентификации отчёта
String report = "/reports/orderStatusReport.rpt";
reportClientDoc = new ReportClientDocument();
reportClientDoc.open(report, 0);
reportDataBean=new CrystalReportDataBean();
//извлекаем алиас all table
Tables allTables = reportClientDoc.getDatabaseController().
getDatabase().getTables();
String tableName=allTables.getTable(0).getName();
//задаём источник данных для текущего отчёта
в соответствии с новым извлечённым ResultSet
reportClientDoc.getDatabaseController().setDataSource
(reportDataBean.fetchData(sqlString),tableName,tableName);
//получаем исходный объект отчёта
reportSource = reportClientDoc.getReportSource();
//добавляем его к сеансу
//задаём информацию о подключении к базе данных, чтобы не нужно было каждый раз
вводить имя пользователя и пароль
ConnectionInfos connInfos = new ConnectionInfos();
IConnectionInfo connInfo1 = new ConnectionInfo();
connInfo1.setUserName("db2admin");
connInfo1.setPassword("passw0rd");
connInfos.add(connInfo1);
//выводим содержимое отчёта
CrystalReportViewer viewer = new CrystalReportViewer();
viewer.setReportSource(reportSource);
viewer.setDatabaseLogonInfos(connInfos);
viewer.setOwnPage(true);
viewer.processHttpRequest(request, response, getServletConfig().
getServletContext(), null);
}
catch(Exception e){
e.printStackTrace();
}
|
Теперь Crystal Report может динамически извлекать данные в соответствии с введёнными пользователем критериями.
Заключение
В данном руководстве демонстрировались следующие типичные шаги по конвертированию рабочих или аналитических отчётов WebSphere Commerce в Crystal Reports:
- Использование встроенных инструментов Crystal Report для создания шаблонов Crystal Report и .rtp-файлов.
- Разработка JSP-файлов для отображения отчётов Crystal Report.
- Создание новых представлений и отображение отчётов Crystal Report в инструментальной среде WebSphere Commerce.
- Создание нового компонента данных для получения окончательного SQL из среды отчётов и переопределения источника данных для Crystal Report.
В руководстве также показано, как создать новый отчёт Crystal Report, выполняя шаги, аналогичные вышеперечисленным. Единственная разница состоит в том, что в этом случае невозможно получить SQL многократного использования из среды отчётов. Следовательно, на Шаге 4 следует создать SQL для извлечения самих данных отчёта, а не для получения окончательного SQL из среды отчётов.