Добавление отчетов профессионального качества в приложение пользователя в Visual Studio

       

Web-службы для XML-отчетов


Теперь можно рассмотреть, как используется технология XML Web Services в Crystal Reports for Visual Studio .NET. Значительным достижением в этой области является удачная разработка достаточно сложных функций с легко реализуемыми преимуществами; например, отчеты могут публиковаться как Web-службы и использоваться в качестве ReportSource для элемента управления CrystalReportViewer.

Чтобы создать Web-службу для XML-отчетов из файла CustomersBasic.rpt, откройте Visual Studio .NET и создайте новый проект ASP.NET Web Service под именем MSDNCrystalWebService. Удалите файл Service1.asmx, который добавляется к проекту по умолчанию, и вместо него добавьте CustomersBasic.rpt. Затем щелкните правой кнопкой мыши по CustomersBasic.rpt в Solution Explorer и выберите в контекстном меню пункт Publish as Web Service (см. Рисунок 10).

Рис. 10.

В результате в проект будет добавлен файл Web-службы, CustomersBasicService.asmx. Теперь будем компоновать проект. Вернитесь в приложение Windows Forms и установите для cvwMain.ReportSource URL-адрес Report Web Service согласно следующей строке текста программы:

cvwMain.ReportSource = "http://localhost/MSDNCrystalWebService/" _
& "CustomersBasicService.asmx"

В качестве альтернативы вы можете добавить веб-ссылку для этого asmx-файла в проекте и затем указать cvwMain.ReportSource в экземпляре класса Web Service.

cvwMain.ReportSource = New localhost.stomersBasicService()

Можно ли создать интерфейс XML Web Services в Crystal Reports так же легко, как и Web-службу? Внимательно изучите программу файла класса, который расположен с небольшим отступом под файлом CustomersBasic.rpt (чтобы увидеть файл, щелкните по кнопке Show All Files в Solution Explorer). В программе этого файла содержатся два класса: CustomersBasic и CachedCustomersBasic.

CustomersBasic является первичным классом, который необходим для реализации строго типизированного отчета; если вы посмотрите на процедуры атрибутов этого отчета, то увидите его со всеми разделами, которые наследуются из ReportClass и охватывают элементы коллекции ReportDefinition.Sections.
В свою очередь, CachedCustomersBasic реализует интерфейс IcachedReports для создания кешированного отчета и в своем методе CreateReport создает экземпляр CustomersBasic (первый класс). С помощью интерфейса, подобного интерфейсу IcachedReports и использующего WebMethods, можно вывести отчет в виде XML Web Service.

Теперь взгляните на программу файла класса, который расположен под файлом CustomersBasicService.asmx. Этот файл также содержит два класса, но, в отличие от предыдущего файла, в нем один класс вложен в другой. CustomersBasicService наследуется из класса ReportServiceBase, который, в свою очередь, открывает веб-методы, необходимые для публикации отчета в виде XML Web Service. CustomersBasicService содержит класс CachedWebCustomersBasic, который, по своему существу, имеет точно такую же реализацию, что и уже рассмотренный класс CachedCustomersBasic. Различие можно найти в конструкторе:

Public Sub New(ByVal webServiceParam As CustomersBasicService)
Me.webService = webServiceParam
End Sub

Этот конструктор вызывается из конструктора CustomersBasicService, чтобы указать в нем атрибут webService кешированного отчета:

Public Sub New()
Me.ReportSource = New CachedWebCustomersBasic(Me)
End Sub

Подведем итоги: ReportClass в Crystal Report создает возможные строго типизированные отчеты; интерфейс IcachedReports позволяет создавать кешированные экземпляры ReportClass; и, наконец, ReportServiceBase создает интерфейс Web Services для строго типизированных отчетов, который благодаря атрибуту webService совместим с интерфейсом IcachedReports.

Кстати, вы не забыли о компоненте ServerFileReport, который я создал, перетащив из Server Explorer? В нем также задействуется технология Web Services. Если вы вернетесь в проект Windows Form, то заметите, что у sfrCustomersBasic имеется атрибут WebServiceURL указывающий на .asmx-файл общего вида. Адрес URL будет выглядеть примерно следующим образом: localhost/crystalreportwebformviewer/ServerFileReportService.asmx. Несмотря на то, что этот URL-адрес стандартен, атрибут ReportPathProperty класса sfrCustomersBasic, указывая на \MSDN\ CustomersBasic.rpt, задает относительный путь и имя отчета, который требуется запустить.



С первого взгляда кажется странным, что компонент ServerFileReport требует запуска отчета через соединение HTTP/SOAP с локальным компьютером. Однако, благодаря этому вы можете легко запустить отчеты Crystal Reports for Visual Studio .NET, существующие на удаленном компьютере: просто щелкните правой кнопки мыши по узлу Servers в окне Server Explorer и выберите Add Server, затем подключитесь к любому серверу в ваших сетях LAN/WAN и запустите на удаленном компьютере требуемые отчеты Crystal Reports for Visual Studio .NET. Данная возможность позволяет легко развертывать отчеты по всему предприятию: для этого установите среду Visual Studio .NET на сервере и скопируйте rpt-файлы в соответствующую папку, после чего эти rpt-файлы без какой-либо специальной программы станут доступны для всей организации (по протоколу SOAP). В этом случае вам даже не потребуется такой относительно простой процесс, как выбор пункта "Publish as Web Service", который выполняется после щелчка правой кнопки мыши по отчету в проекте ASP.NET, поскольку все, что вам будет нужно сделать, так это скопировать файл в соответствующую папку.

Недостаток использования операции перетаскивания объектов в Server Explorer заключается в том, что в нем можно просматривать только те объекты сервера, которые постоянно находятся в сетях LAN/WAN разработчика, а не за брандмауэром. Но тут есть одна хитрость: пока известны адрес URL и значение атрибута ReportPath при подключенном к сети Internet сервере (с брандмауэром или нет), вы сможете создать новый экземпляр CrystalDecisions.ReportSource.ServerFileReport и задать в нем значения этих атрибутов, указав их в программе.

Интерфейс SOAP так удобен и прост, что Crystal Reports for Visual Studio .NET применяет его в качестве оболочки программ сортировки для своего более раннего продукта, сервера Crystal Enterprise. Узел Crystal Enterprise под Crystal Services в Server Explorer можно использовать для просмотра отчетов, содержащихся на любом сервере Crystal Enterprise в сети LAN/WAN, а также для использования этих отчетов в качестве допустимых значений ReportSources для элемента управления CrystalReportViewer при повторном применении SOAP.В этом случае отчеты Crystal Enterprise будут доступны для любых подключенных к сети Internet генераторов отчетов Crystal Reports for Visual Studio .NET с правильным адресом URL и идентификатором объекта.


Содержание раздела