Интеграция служб Reporting Services в приложение Access 2003

Сегодня мы займёмся интеграцией служб Reporting Services в приложения, и в качестве примера давайте, интегрируем их в Access 2003, т.е. в конечном итоге у нас будет возможность формировать отчеты, которые располагаются на сервере отчетов SSRS, из Microsoft Access 2003.

Интеграция служб Reporting Services в 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 вот так:

Скриншот 1

Более подробно о выпадающих списках в Access 2003 мы с Вами говорили вот здесь.

В итоге у меня макет формы получился следующий:

Скриншот 2

Теперь осталось написать код вызова отчета.

В код формы вставляем следующий код, я его, конечно же, прокомментировал:

   
   'Процедура формирования отчета. Первый параметр - путь к отчету, второй - параметры отчета
   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

Проверяем

Скриншот 3

Как видим, все работает, на этом все, удачи!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.