Вызов сборки .Net из отчета служб отчетов SQL Server 2005? - PullRequest
2 голосов
/ 16 сентября 2008

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

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

Есть предложения?

Ответы [ 5 ]

5 голосов
/ 16 сентября 2008

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

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

2 голосов
/ 10 октября 2009

Мне было очень больно от этого, поэтому я надеюсь, что это кому-нибудь поможет. Вы можете получить это из статьи 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"  

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

Если он будет построен, скорее всего, вы уже в пути.

За исключением ...

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

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

Над чем я сейчас работаю.

1 голос
/ 16 сентября 2008

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

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

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

1 голос
/ 16 сентября 2008

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

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

0 голосов
/ 16 сентября 2008

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

...