powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли сохранить отчет SSRS на sql server в отрендеренном виде?
10 сообщений из 10, страница 1 из 1
Можно ли сохранить отчет SSRS на sql server в отрендеренном виде?
    #40020228
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, несколько тупой вопрос, я понимаю, но тем не менее.

Руководство поставило задачу: Некоторые отчеты SSRS - должны быть акцептованы.
Т.е., в отчете должна появиться некая ссылка, кнопка (черт лысый, не важно), при нажатии на которую, в частности, отчет в отрендеренном виде, в виде pdf, tiff или mht - должен сохранится на sql server, в базе, откуда берутся данные для построения отчета, ну, или в какой то другой базе на том же сервере.

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

С какой стороны подойти к проблеме?
...
Рейтинг: 0 / 0
Можно ли сохранить отчет SSRS на sql server в отрендеренном виде?
    #40020236
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
uaggster,

сам не использовал, но нечто похожее:
Создание, изменение и удаление моментальных снимков в журнале отчетов
https://docs.microsoft.com/ru-ru/sql/reporting-services/report-server/create-modify-and-delete-snapshots-in-report-history?view=sql-server-2017
...
Рейтинг: 0 / 0
Можно ли сохранить отчет SSRS на sql server в отрендеренном виде?
    #40020240
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
godsql, интересно, но не то :-(
...
Рейтинг: 0 / 0
Можно ли сохранить отчет SSRS на sql server в отрендеренном виде?
    #40020271
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сохранить чисто технически можно - отправить веб-серверу, где развернут SSRS, get-запрос, получить бинарный ответ, сохранить его куда нужно.
Как формировать запрос:
https://docs.microsoft.com/en-us/sql/reporting-services/pass-a-report-parameter-within-a-url?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/reporting-services/url-access-parameter-reference?view=sql-server-ver15
Пример (простенький отчет, выводящий содержимое sys.objects для указанной в параметре schema_id схемы ):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
class SsrsTest
{
  public static void Test()
  {
    var url = string.Concat(
      "http://myserverurl/myreportname",
      "&rs:Command=Render&rs:Format=PDF&schema_id=1"
    );
    var request = WebRequest.Create(url);
    request.Credentials = CredentialCache.DefaultCredentials.GetCredential(new Uri("http://tempuri.org/"), "Basic");
    request.Timeout = 5 * 60 * 1000;
    request.Method = WebRequestMethods.Http.Get;
    try
    {
      using (var response = (HttpWebResponse)request.GetResponse())
      using (var responseStream = response.GetResponseStream())
      {
        if (responseStream == null)
          throw new ApplicationException("response is null");
        const int bufferSize = 1024;
        var buffer = new byte[bufferSize];
        var tmpFile = @"D:\Trash\456.pdf";
        if (File.Exists(tmpFile))
          File.Delete(tmpFile);
        using (var fs = new FileStream(tmpFile, FileMode.Create))
        using (var writer = new BinaryWriter(fs))
        {
          int count;
          do
          {
            count = responseStream.Read(buffer, 0, buffer.Length);
            if (count == 0) break;
            writer.Write(buffer, 0, count);
          } while (count > 0);
        }
      }
    }
    catch(WebException we)
    {
      var errorStream = we.Response.GetResponseStream();
      if (errorStream == null)
        throw;
      string s;
      using (var sr = new StreamReader(errorStream, Encoding.UTF8))
        s = sr.ReadToEnd();
      if (string.IsNullOrWhiteSpace(s))
        throw;
      Console.WriteLine(s);
      var serverErrors = Prepare500(s); // cos' web exception message here always is 'Internal server error (500)'
      if (string.IsNullOrEmpty(serverErrors))
        throw;
      throw new ApplicationException($"Ошибка получения отчета: {serverErrors}");
    }
    Console.WriteLine("done");
    Console.ReadKey(true);
  }

  static string Prepare500(string errorResponse)
  {
    try
    {
      var xd = new XmlDocument();
      using(var sr = new StringReader(errorResponse))
      using(var xr = XmlReader.Create(sr))
        xd.Load(xr);
      var errors = xd.SelectNodes("/html/body/ul//li/text()");
      if (errors == null)
        return null;
      var sb = new StringBuilder();
      foreach (XmlText xt in errors)
        if (!string.IsNullOrWhiteSpace(xt.Value))
          sb.AppendLine(xt.Value.Trim());
      return sb.Length == 0 ? null : sb.ToString();
    }
    catch(Exception e)
    {
      Console.WriteLine(e);
      return null;
    }
  }
}


- это просто пример-набросок, подобное в допиленном виде у нас используется для получения и пост-обработки одного отчёта, выгружаемого в эксель.
Удастся ли подселить такое хозяйство в CLR SP, и вызвать со страницы отчёта - не знаю.
...
Рейтинг: 0 / 0
Можно ли сохранить отчет SSRS на sql server в отрендеренном виде?
    #40020480
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите в сторону подписок на отчеты
https://docs.microsoft.com/en-us/sql/reporting-services/subscriptions/subscriptions-and-delivery-reporting-services?view=sql-server-ver15
Оно для другого задумано но наверняка есть некий API чтобы оформить подписку без расписания.
...
Рейтинг: 0 / 0
Можно ли сохранить отчет SSRS на sql server в отрендеренном виде?
    #40020563
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

пишите простейшее приложение на C# (ASP.NET) с контролом отчета. Пользователь жмет кнопку, формируется отчет в файл и сохраняется куда захотите.
...
Рейтинг: 0 / 0
Можно ли сохранить отчет SSRS на sql server в отрендеренном виде?
    #40020614
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

можно попробовать решить задачу на другом уровне - сохранять "снимок" отчета просто в таблице (в виде строк)
...
Рейтинг: 0 / 0
Можно ли сохранить отчет SSRS на sql server в отрендеренном виде?
    #40020745
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны, похоже это да, оно.

Коллеги, спасибо! Буду копать в направлении, как Сон Веры Павловны обозначил.
...
Рейтинг: 0 / 0
Можно ли сохранить отчет SSRS на sql server в отрендеренном виде?
    #40020748
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны
Сохранить чисто технически можно - отправить веб-серверу, где развернут SSRS, get-запрос, получить бинарный ответ, сохранить его куда нужно.
Как формировать запрос:
https://docs.microsoft.com/en-us/sql/reporting-services/pass-a-report-parameter-within-a-url?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/reporting-services/url-access-parameter-reference?view=sql-server-ver15


Собственно, CLR, которая умеет отправлять http-запросы - у меня есть.
Задача, получается, сводится к формированию url, который представляет собой запрос: "Сформировать отчет и скачать его в виде pdf".

Есть проблема, что указанный запрос будет исполняться не от имени пользователя, а от имени контекста, в котором выполняется clr-ка (если я правильно понимаю), но это, вроде, пока не важно.
...
Рейтинг: 0 / 0
Можно ли сохранить отчет SSRS на sql server в отрендеренном виде?
    #40020775
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

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

Однако, смысл этих действий не совсем понятен, так как данные, на которых строится отчет, могут быть изменены. Визировать надо и данные (и запрещать из изменение в дальнейшем) и саму форму (версию) отчета, только в этом случае это будет подлинно достоверный отчет.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли сохранить отчет SSRS на sql server в отрендеренном виде?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]