Сегодня мы займёмся интеграцией служб Reporting Services в приложения, и в качестве примера давайте, интегрируем их в Access 2003, т.е. в конечном итоге у нас будет возможность формировать отчеты, которые располагаются на сервере отчетов SSRS, из Microsoft Access 2003.
Продолжаем изучать SQL Server Reporting Services на примере версии 2008 R2, и сейчас мы узнаем, каким образом можно интегрировать службы Reporting Services в приложения. Ранее мы с Вами уже рассмотрели установку SSRS, а также научились создавать отчеты в среде BIDS, поэтому, конечно же, подразумевается, что у Вас уже установлены и настроены службы Reporting Services и есть опубликованные отчеты.
Для начала мы рассмотрим способы интеграции служб Reporting Services, а затем, используя один из этих способов, интегрируем SSRS в Microsoft Access 2003.
Способы интеграции служб Reporting Services
Существует несколько способов интеграции служб Reporting Services в приложения, если быть точнее 3, каждый из которых хорош по-своему и имеет свои особенности. Давайте рассмотрим эти способы.
Интеграция с помощью WEB-службы (API SOAP)
Данный способ заключается в предоставление доступа к web службе по протоколу SOAP, другими словами, у служб Reporting Services есть API-интерфейс SOAP. С помощью него можно получить доступ ко всем функциональным возможностям сервера отчетов, т.е. не только выполнять отчеты, но и полностью управлять ими (доступны все административные функции диспетчера отчетов). Этот способ предпочтительней использовать тогда, когда Вам необходимо интегрировать полной набор функций управления служб Reporting Services, а не только просмотр (выполнение) отчетов.
Интеграция с помощью элементов управления ReportViewer (Visual Studio)
В среде программирования Microsoft Visual Studio (сейчас доступна уже версия Visual Studio 2015) есть специальный элемент управления ReportViewer, который обеспечивает возможность просмотра отчетов, т.е. с помощью него происходит интеграция средств просмотра отчетов в приложения. Он реализован как для приложений Windows Forms, так и для приложений Web Forms.
Интеграция с помощью доступа по URL-адресу
На этом способе давайте остановимся более подробней, так как именно его мы будем использовать для интеграции служб Reporting Services в приложение, разработанное в Access 2003.
Данный способ позволяет получать доступ к отчетам с помощью URL-адреса, т.е. мы можем сформировать URL-адрес отчета и обратиться по этому адресу, тем самым выполнить отчет. Его использовать лучше тогда, когда Вам необходимо просто и быстро интегрировать только возможность просмотра отчетов, т.е. с помощью него нельзя осуществлять управление отчетами. В пользу этого способа по сравнению с протоколом SOAP кроме простоты выступает еще и производительность, т.е. он немного, но быстрей, так как не выполняет упаковку и передачу SOAP-запросов, получаемых и отправляемых сервером.
Интегрировать средства просмотра отчетов с помощью доступа по URL-адресу можно как в веб-приложения, так и в приложения Windows.
Для интеграции средств просмотра отчетов в веб-приложение можно использовать обычные прямые ссылки, для примера допустим, что на сервере отчетов есть отчет TestReport, который лежит в папке Test и принимает один параметр @price, и для того чтобы его вызвать мы делаем ссылку следующего вида (вместо server подставляете свой адрес сервера отчетов)
<a href="http://server/ReportServer?/Test/TestReport&rs:Command=Render&price=100" target="_blank">Открыть отчет с ценой >=100</a>
В итоге у нас откроется отчет в новом окне.
Также можно использовать форму, для того чтобы пользователь мог сам вводить значение параметров, например:
<FORM action="http://server/ReportServer?/Test/TestReport" method="post" target="_blank"> <INPUT type="hidden" name="rs:Command" value="Render"> <INPUT type="text" name = "price"></br> <INPUT type="submit" value="Открыть отчет"> </FORM>
Интеграция служб Reporting Services в приложения Windows с помощью доступа по URL-адресу происходит с использованием средств веб-браузера. Возможно два варианта, первый — это использовать запуск Internet Explorer для просмотра отчетов, и второй — это использование объекта WebBrowser.
При использовании Internet Explorer возможностей будет больше, но если Вы хотите внедрить отчет в форму, то необходимо использовать элемент WebBrowser. Мы для интеграции отчетов SSRS в Access 2003 будем использовать Internet Explorer, но это мы рассмотрим чуть ниже.
В примерах выше мы использовали всего один параметр сервера отчетов rs:Command со значением Render и один пользовательский параметр price, но на самом деле параметров сервера отчетов гораздо больше. Давайте перечислим несколько полезных параметров, которые могут Вам пригодиться (более подробно можете посмотреть в электронной документации по SQL Server).
Параметры с префиксом rc
С данным префиксом идут команды для управления средством просмотра HTML-страницы.
Название параметра | Описание | Возможные значения | Пример |
Toolbar | Показывает или скрывает панель инструментов. По умолчанию имеет значение true, т.е. показывать. | True/False | rc:Toolbar=False |
Parameters | Показывает или скрывает область параметров. По умолчанию имеет значение true, т.е. показывать. Значение Collapsed, означает, что область параметров не отображается, но может быть сделана видимой самим пользователем. | True, False, Collapsed | rc:Parameters=False |
Zoom | Масштаб отображения отчета в виде целого числа процентов или строковой константы. По умолчанию имеет значение 100. | Whole Page — Вся страница; Page Width — По ширине; Целое число. | rc:Zoom=70 |
Section | Указывает, какую страницу отчета необходимо отобразить. По умолчанию имеет значение 1. | Целое число. Номер страницы. | rc:Section=5 |
Параметры с префиксом rs
С префикс rs посылаются команды серверу отчетов.
Название параметра | Описание | Возможные значения | Пример |
Format | Формат данных, в котором необходимо подготовить отчет. По умолчанию HTML. | HTML3.2, HTML4.0, MHTML, IMAGE, EXCEL, WORD, CSV, PDF, XML и NULL. | rs:Format=EXCEL |
ParameterLanguage | Указывает язык передаваемых в URL-адресе параметров. Значение по умолчанию — язык браузера. | Язык параметров | rs:ParameterLanguage=en-us |
Также есть команды с префиксом rv, они используются для настройки веб-части средства просмотра отчетов в случае, если SSRS интегрирован с SharePoint.
Интеграция SSRS в приложение Access 2003
С теорией немного познакомились, теперь переходим к практике. Допустим, у Вас есть приложение, реализованное в Access 2003, скажем в виде adp или ade проекта в связке с MS SQL сервером. И стандартного функционала Access для создания отчетов Вам не хватает или просто Вы захотели развернуть систему, с помощью которой можно формировать отчеты и корректно выгружать их в разные форматы (как Вы знаете сложные отчеты в Access 2003 даже в Excel и в Word выгружаются не совсем корректно) или встала задача создать систему отчетности, которая могла бы быть доступна из приложения, и в то же время функционировать без него.
Что мы будем делать, мы на форму добавляем все параметры, которые будем использовать в том или ином отчете, это относится как к пользовательским параметрам, так и к параметрам, которые мы рассмотрели чуть Выше.
Для примера давайте использовать все тот же отчет TestReport, который лежит в папке Test и принимает один параметр @price, естественно я сейчас говорю о сервере отчетов.
В моем случае я на форму добавляю поле price для указания пользовательского параметра и кнопку OpenReport для вызова отчета, а также добавлю еще 5 полей со списком для параметров, которые можно будет использовать для настройки отображения отчета. Допустим report_format, report_section, report_zoom, report_toolbar и report_parameters.
Все выпадающие списки в данном случае я реализую просто через указания списка значений, например, для report_parameters вот так:
Более подробно о выпадающих списках в Access 2003 мы с Вами говорили вот здесь.
В итоге у меня макет формы получился следующий:
Теперь осталось написать код вызова отчета.
В код формы вставляем следующий код, я его, конечно же, прокомментировал:
'Процедура формирования отчета. Первый параметр - путь к отчету, второй - параметры отчета Private Sub GetReport(report As String, settings As String) On Error GoTo Error_GetReport Dim IE As Object Dim URL As String Dim ServerAddr As String 'URL адрес сервера отчетов ServerAddr = "http://server/Reportserver?" 'Создаем объект Internet Explorer Set IE = CreateObject("InternetExplorer.Application") 'Формируем адрес отчета URL = ServerAddr & report & "&rs:Command=Render" & settings 'Отключим Toolbar, строку состояния, адресную строку и меню у Internet Explorer IE.toolbar = False IE.StatusBar = False IE.AddressBar = False IE.MenuBar = False 'Осуществляем переход к отчету IE.Navigate URL 'Делаем видимым объект Internet Explorer IE.Visible = True 'Очищаем объект Set IE = Nothing Exit_GetReport: Exit Sub Error_GetReport: 'В случае каких-либо ошибок выведем сообщение и закроем объект MsgBox Err.Description IE.Quit Set IE = Nothing Resume Exit_GetReport End Sub 'Функция получения параметров с формы Private Function GetSettings() As String Dim settings As String 'Цена If Nz(Me.price.value, "") <> "" Then settings = "&price=" & Me.price.value End If 'Параметры отчета------------------------------------------------------------------------- 'Формат If Nz(Me.report_format.value, "") <> "" Then settings = settings & "&rs:Format=" & Me.report_format.value End If 'Номер страницы If Nz(Me.report_section.value, "") <> "" Then settings = settings & "&rc:Section=" & Me.report_section.value End If 'Масштаб If Nz(Me.report_zoom.value, "") <> "" Then settings = settings & "&rc:Zoom=" & Me.report_zoom.value End If 'Панель инструментов If Nz(Me.report_toolbar.value, "") <> "" Then settings = settings & "&rc:Toolbar=" & Me.report_toolbar.value End If 'Область параметров If Nz(Me.report_parameters.value, "") <> "" Then settings = settings & "&rc:Parameters=" & Me.report_parameters.value End If GetSettings = settings End Function 'Код кнопки "Сформировать отчет" Private Sub OpenReport_Click() 'Вызываем нужный нам отчет с параметрами Call GetReport("/Test/TestReport", GetSettings) End Sub
Проверяем
Заметка! Профессиональные видеокурсы по T-SQL.
Как видим, все работает, на этом все, удачи!