Вызов сборки .Net из отчета служб отчетов SQL Server 2005?
-
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