Вызов сборки .Net из отчета служб отчетов SQL Server 2005?

StackOverflow https://stackoverflow.com/questions/71488

  •  09-06-2019
  •  | 
  •  

Вопрос

В настоящее время у меня есть набор отчетов с рядом общих функций, находящихся в блоках кода в файлах .rdl.Это, очевидно, представляет собой проблему с удобством сопровождения, и мне интересно, знает ли кто-нибудь, как эти разные отчеты могут совместно использовать библиотеку общего кода?

В идеале я хотел бы, чтобы к моему проекту служб Reporting Services была прикреплена сборка .Net, к которой все мои отчеты могли бы обращаться и вызывать функции.Это избавит вас от необходимости обновлять и повторно развертывать около 100 отчетов каждый раз, когда необходимо внести изменения в общую функцию.

Какие-либо предложения?

Это было полезно?

Решение

В Visual Studio в свойствах отчета на вкладке «Ссылки» добавьте сведения о сборке, содержащей управляемый код.Этот код можно вызывать из выражений в отчетах, используя указанное имя экземпляра.

Эту сборку можно хранить в каталоге GAC или PrivateAssemblies Visual Studio и развертывать в каталоге «bin» службы отчетов на сервере служб Reporting Services.Для получения дополнительной информации см. Как использовать пользовательские сборки или встроенный код в службах Reporting Services

Другие советы

Мне было очень больно из-за этого, поэтому я надеюсь, что это кому-то поможет.Вы можете получить его из статьи MSDN, но ниже есть несколько пунктов, которые, я думаю, могут помочь кому-то справиться с этим немного быстрее.

Не забудьте добавить это в файл rssrvpolicy.config:

<CodeGroup class="UnionCodeGroup"
   version="1"
   PermissionSetName="FullTrust"
   Name="MyCodeGroup"
   Description="Code group for my data processing extension">
      <IMembershipCondition class="UrlMembershipCondition"
         version="1"
         Url="C:\pathtocustomassembly\customassembly.dll"
       />
</CodeGroup>

Я забыл это сделать и какое-то время ненавидел это.

Кроме того, не забудьте открыть обе следующие папки для 2005 года с вашей новой dll:

Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies 
Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin

Плюс не используйте log4net со своей сборкой.Я не мог заставить это работать.Может быть, кто-то и сможет, но не я.

Кроме того, если вы напортачите, как я, вы не сможете удалить файлы, пока не закроете Visual Studio.

Плюс сделайте ваши методы общими или статическими.Это легче.

Создайте пакетный файл развертывания.Что-то вроде:

@ECHO OFF
REM   Name: SRSDeploy_Local.bat
REM
REM   This batch files copies my custom assembly to my Reporting Services folders.
REM
REM   This is the SQL Server 2005 version:
copy "C:\Projects\Common\lib\SCI.Common.SSRSUtils.dll" "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies"
copy "C:\Projects\Common\lib\SCI.Common.SSRSUtils.dll" "C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin"  

Наконец, создайте отчет перед предварительным просмотром.

Если он строится, вы, вероятно, уже в пути.

Кроме...

Вы не можете развернуть его на рабочем сервере отчетов, поскольку всегда будете получать следующую ошибку:

Ошибка при загрузке модуля кода

Именно над этим я сейчас и работаю.

В следующей статье перечислены практически все различные способы вызова кода .Net из отчета SSRS. Расширение служб отчетов Microsoft SQL Server 2000 с помощью специального кода

Если все эти отчеты выполняются на одном и том же сервере, можно рассмотреть еще один вариант — использовать хранимые процедуры .Net в базе данных для хранения вашего кода.

Большое спасибо, ребята, теперь я могу созвать свою сборку из своих отчетов.

Дополнительный вопрос:Есть ли пространство имен, которое я могу включить при создании сборки, которое информирует ее об объектах в дизайнере отчетов, таких как поля и параметры?Было бы здорово, если бы я мог передать в сборку, скажем, набор полей строго типизированным способом.

И ответ: Пара часов поиска показывает, что добавление \Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\Microsoft.ReportingServices.ProcessingObjectModel.dll в качестве ссылки в мою сборку позволяет мне получить доступ к различным типам служб Reporting Services, таким как поля и параметры.Обратите внимание, что в службах Reporting Services 2008 изменения пространства имен.

Вы должны выполнить развертывание в GAC.http://www.developerdotstar.com/community/node/333

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top