2016-12-02 2 views
0

Я работаю над решением для генерации отчета SSRS в памяти для прикрепления после отправки по электронной почте. Я использую версию 2010 года.Сгенерировать отчет SSRS в памяти

Отчет содержит необходимые параметры, которые должны быть заполнены для правильного отображения отчета.

я нашел несколько решение, как это сделать:

Решение 1

Использование MS родной ReportViewer класс. Мы можем создать экземпляр объекта в памяти, подключение к серверу и сделать отчет в требуемом формате с помощью API управления

report.ServerReport.ReportServerCredentials = new MyCredentials(...); 
report.ServerReport.ReportServerUrl = new Uri("ssrs_url"); 
report.ServerReport.ReportPath = "path-to-report"; 

byte[] reportData = report.ServerReport.Render("excel"); 

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

Так что не может принять это решение в моем случае

Решение 2

Использование сервера отчетов публичный API для доступа к данным, уже в требуемом формате. Я узнал, что это может быть достигнуто, и MS подтверждает это. Вот ссылка https://msdn.microsoft.com/en-us/library/ms154040.aspx

Таким образом, мы можем просто использовать правую сконфигурированный ссылку для доступа к данным: http://myrshost/ReportServer?/myreport&rs:Format=PDF

Это решение лучше всего подходит для моих нужд, но я не знаю, как передать параметры отчета в этом отчете? Также как сначала выполнить аутентификацию с сервером отчетов SSRS?

Может кто-нибудь помочь мне с этим?

+0

Является ли использование службы ReportingServices веб-сервисом? В зависимости от вашей версии SSRS (вы можете включить ее в свой пост), вы можете найти сервис asmx здесь: http: // myrshost: 80/ReportServer/ReportExecution2005.asmx. –

+0

Да, у меня есть все данные. Как передать данные в определенные параметры отчета. У меня есть требуемые свойства, которые нужно заполнить до получения отчета – VadimB

+0

После того, как вы назначили встречу, вы вернетесь к вам позже (если никто не станет быстрее;)) Посмотрите MSDN на услугу в среднем. https://msdn.microsoft.com/en-us/library/ms152787.aspx –

ответ

2

Итак, наконец, чтобы написать ответ.

Прежде всего: К сожалению, я не смог найти способ включить параметры при использовании простого доступа к URL-адресам отчетов. Я еще не работал с этим. Таким образом, может быть другое (лучшее) решение для вашего конкретного случая.

Что касается ваших ограничений, указанных в вашем первом решении: На самом деле я не вижу, что «Рамка» вы используете для этого, но если вы не можете использовать его в любом случае, это не имеет значения.

Что я предлагаю вам, использует SSRS WebServices, как я уже говорил в своих комментариях. Основная информация об этом может быть найдена here. В основном у вас есть только несколько простых шагов, чтобы сделать:

  1. потребляющих WebService (это сервис SOAP), и пусть Visual Studio .NET() сгенерировать прокси-классы для вас. В Интернете существует множество учебных пособий. Например, this one. Я не вижу никаких проблем с зависимостями здесь, потому что это всего лишь WebService.

  2. Тогда вы уже можете позвонить в WebService. Прокси генерировал для вас все необходимые классы.

Следующий пример демонстрирует вызов, а также как параметры передаются в WebService (что, конечно же, легко возможно). Обратите внимание, что пример написан для ReportExecution2005.asmx. В новейшей версии могут быть различия.

var client = new ReportExecutionService(); 
client.Url = "UrlToReportExecutionASMXonYourServer"; 
client.Credentials = yourCredentials // (is of type System.Net.ICredentials) 

client.LoadReport2("RelativePathToYourReportOnServer", null); 

var parameters = new ParameterValue[amountOfYourParameters]; 
parameters[0] = new ParameterValue() { Name = "ParamNameInReport", Value = "Value" }; 
client.SetExecutionParameters(parameters, CultureInfo.CurrentCulture.Name.ToLowerInvariant()); 

string encoding, mimeType, extension, deviceInfo; 
Warning[] warnings; 
string[] streamIDs; 
var result = client.Render("ExportFormatOfDesiredResult", deviceInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs); 

"ExportFormatOfDesiredResult" можно заменить на "Xml", "PDF", "Слово" и т.д., например. i Тогда ваш результат будет потоком байтов, который вы можете вернуть клиенту, прикрепить к почте или тому, что вы хотите с этим сделать.

Надеюсь, это вам поможет. Не стесняйтесь спрашивать о дальнейшей помощи или дайте мне знать, если это не соответствует вашим потребностям по любой причине. (Пожалуйста, добавьте подробное описание вашей архитектуры и его ограничений тогда, поскольку я в настоящее время не понимаю, что именно вам нужно и что вы не можете сделать.)

Смежные вопросы