Гость
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / SSRS автоматическое сохранение отчета по абсолютному пути / 15 сообщений из 15, страница 1 из 1
02.04.2013, 14:38
    #38209178
GlassMorre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
Добрый день, коллеги.

Возникла следующая проблема, не знаю как бы ее поизящнее решить:
Требуется разослать по корпоративной почте отчет из службы SSRS. Рассылка осуществляется агрегатором почты VipNet. Он забирает по маске файлы из определенной папки и рассылает по получателям. Задача следующая: сформировать из ACCESS по требованию пользователя в SSRS группу отчетов и выложить их в определенную папку. В вебе я никак, поэтому пришлось пользоваться гайдами с MSDN. Там я нашел как формировать по URL необходимый мне файл и скачивать его на машинку пользователя. Проблема возникла с выкладыванием файла в папку назначения (сетевая шара для пользователя) - не знаю как указать RS куда складировать файлы. Возможно стоит и подойти с другого краю и искать уже сгенерированные файлы с папки загрузки и копировать их в шару, но как то неспортивно и некрасиво.

Код: vbnet
1.
Transliteration("http://serversql:81/RS_SPID/Pages/ReportViewer.aspx?%2fСправкаЕкатeринбург%2fActTbc&rs:Format=PDF&rs:Command=Render&date1=1990-01-01&date2=2015-01-01&terr=Алапаевск")



Пример запроса, качающего один файлик на машинку пользователя. Функция для браузера, не понимающего русскую кодировку, приводить тут смысла нет (ТМ-взята в соседней ветке). Папка подключается при запуске клиента с вшитыми логином и паролем. т.е. конечная папка вида: "M:\Mailer_Folder\"

Заранее спасибо.

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
02.04.2013, 16:54
    #38209598
Katy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
GlassMorre, зачем так сложно. чем стандартные рассылки RS не устраивают?
...
Рейтинг: 0 / 0
02.04.2013, 17:59
    #38209785
Klick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
GlassMorre,

Как ответили выше SSRS замечательно сам умеет рассылать. Но если у вас какой то хитрый алгоритм рассылки в помощь вам подписки управляемые данными. Там можно "генерить" и пути и имена файлов и значения параметров.
...
Рейтинг: 0 / 0
02.04.2013, 21:07
    #38210044
GlassMorre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
Да, верно, яиспользую рассылки и очень доволен, но дело в том что конкретный отчет - донесения строгой отчетности и оператор хочет получать их из бд сразу по заполнению, контролировать верность данных и рассылать по контрагентам, контролируя получение.
Раньше это делалось так: печатались бумажные копии и рассылались по факсу) гос контора. Теперь по министерству приказ запрещает подобные данные слать открытыми каналами связи в связи с 152 законом. Решили использовать корпоративную защищенную сеть для этих целей. Но поступление информации нестабильное, может несколько дней не приходить ничего а потом прийти скопом, за один день не успевают отработать, поэтому рассылка по расписанию не подходит, можно заморочится с проверками на завершения батча ввода, ввести пакеты поступлений и рассылать по расписанию только пакеты с отметкой о завершении ввода, но никто не пойдет на усложнение процесса и решили дать пользователю возможность жмякнуть на кнопочку и наблюдать как в почте появляются уходящие письма и потом появляются напротив них отметки о прочтении. Но вот загвоздка. Как заставить SSRS складывать файл в определенную папку.

Тут появилась идея воспользоваться скриптом серверным, который будет генерить письма на сервере, если у кого есть пример работающий или хотя бы идею в какую сторону копать - заранее спасибо. На аксе сделаю за 5 минут, но уже выросли из этой платформы и хочется пробовать технологии поновее.
...
Рейтинг: 0 / 0
03.04.2013, 10:08
    #38210450
Klick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
[quot GlassMorre Но вот загвоздка. Как заставить SSRS складывать файл в определенную папку.
[/quot]

Вы не читали ответа моего? Во-первых, можно в подписке настроить сохранение в папку, если она у вас статична. Во-вторых, можно использовать " подписки управляемые данными", если папка не статична и известен алгоритм именования (по годам, по месяцам, по дням). Что еще нужно?
...
Рейтинг: 0 / 0
03.04.2013, 10:43
    #38210521
GlassMorre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
Подписку разве можно выполнить не по расписанию? Подскажите код как выполнить подписку немедленно в любой момент времени. Спасибо.
...
Рейтинг: 0 / 0
03.04.2013, 10:44
    #38210525
GlassMorre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
Скорее это веб сервис с loadreport методом, сейчас копаю в эту сторону, на форуме есть пример через соап отправки, но только на си.
...
Рейтинг: 0 / 0
03.04.2013, 10:47
    #38210534
GlassMorre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
http://msdn.microsoft.com/ru-ru/library/ms159762(v=sql.100).aspx
Ох простите еще вариант.
"Подписка — фиксированный запрос для доставки отчета в определенное время или в ответ на событие"
...
Рейтинг: 0 / 0
05.04.2013, 17:08
    #38214793
GlassMorre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
В общем система получилось довольно извращенной, но работающей.

При запросе отчета параметры отчета передаются в хранимую процедуру на SQLSERVERе, которая с их помощью генерит RSS скрипт во временной папке и запускает его. В скрипте идет обращение к функциям ssrs по формированию отчетов.

В итоге после нажатия на кнопку в аксе через пару секунд отчет уходит адресату, по функциям доставки его можно слать и через поп/смтп сервера и через общие папки. Если кому интересно могу выложить VBA код и ХП.
...
Рейтинг: 0 / 0
06.04.2013, 13:37
    #38215384
Klick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
GlassMorre,

Выкладывайте.
...
Рейтинг: 0 / 0
07.04.2013, 13:21
    #38216020
waszkiewicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
+1
...
Рейтинг: 0 / 0
07.04.2013, 21:23
    #38216344
GlassMorre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
Завтра с работы выложу, может допилим общими усилиями до кондиции)
...
Рейтинг: 0 / 0
08.04.2013, 14:28
    #38217241
GlassMorre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
К сожалению, радовался рано. При проверке на живых данных выяснилась неприятная особенность - при отработке скрипта у него уходит около 20 секунд на формирование отчета, при этом сам отчет строится менее секунды.

Код: sql
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.
USE [hiv_data]
GO
/****** Object:  StoredProcedure [dbo].[repsave]    Script Date: 04/08/2013 15:06:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[repsave](@filename as nvarchar(max), @reportpath as nvarchar(max),@params as nvarchar(max))
AS
begin
SET NOCOUNT ON

declare @tempFileName as nvarchar(max)
select @tempFileName='test'+replace(cast(cast(getdate()as decimal(11,5))  as nvarchar(max)),'.','_')+'.rss'
declare @tempPar as nvarchar(max)
declare @comm1 as varchar(3000)
declare @comm2 as varchar(3000)

select @tempPar='Public Sub Main()
	Dim format as string = "PDF"
	Dim fileName as String = "'+@filename+'.pdf"
	Dim reportPath as String = "'+@reportpath+'"
	Dim historyID as string = Nothing
	Dim deviceInfo as string = Nothing
	Dim extension as string = Nothing
	Dim encoding as string
	Dim mimeType as string
	Dim warnings() AS Warning = Nothing
	Dim streamIDs() as string = Nothing
	Dim results() as Byte
	Dim execInfo As New ExecutionInfo
	Dim execHeader As New ExecutionHeader()
	Dim SessionId As String
	Dim credentials As DataSourceCredentials() = Nothing
	Dim showHideToggle As String = Nothing
	Dim reportHistoryParameters As ParameterValue() = Nothing
	'+ @params +'
	rs.ExecutionHeaderValue = execHeader
	execInfo = rs.LoadReport(reportPath, historyID)
	rs.SetExecutionParameters(parameters, "en-us")
	SessionId = rs.ExecutionHeaderValue.ExecutionID
	results = rs.Render(format,  deviceInfo, extension, mimeType, encoding,  warnings, streamIDs)
	execInfo = rs.GetExecutionInfo()
	Dim stream  As FileStream = File.OpenWrite(fileName)
	stream.Write(results, 0, results.Length)
	stream.Close()

	End Sub'
	
	EXEC	hiv_data.[dbo].[spWriteStringToFile] @tempPar,'c:\test',@tempFileName
	select @comm1='rs -i c:\test\'+@tempFileName+' -s http://192.168.0.2:81/rs_spid -e exec2005 -u ***  -p ***'
	select @comm2='del c:\test\'+@tempFileName
	EXEC xp_cmdshell @comm1,no_output 

	EXEC xp_cmdshell @comm2 ,no_output 
	end




Код: vbnet
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.
82.
83.
Private Sub Кнопка7_Click()
Dim cmd As ADODB.Command
Dim p As ADODB.Parameter
Dim rst As Recordset
Dim con As ADODB.Connection
Dim ctext As String
Dim param As String

Set con = New ADODB.Connection
Set p = New ADODB.Parameter
Set cmd = New ADODB.Command
Set arst = New ADODB.Recordset

con.Open ("Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=true;Data Source=***;User ID=***;password=***;Initial Catalog=***;Data Provider=SQLOLEDB.1;Language=english;App=trash")

cmd.ActiveConnection = con
cmd.CommandTimeout = 3000
cmd.CommandType = adCmdText
ProgressBar1.Min = 1
ProgressBar1.Visible = True
DoEvents

If Поле0 = "000000" Then
ctext = "SELECT dbo_ACTUAL_TERR_UCHET.kod6 FROM (spis2 LEFT JOIN PD ON spis2.pid = PD.PID) LEFT JOIN dbo_ACTUAL_TERR_UCHET ON PD.First_pid = dbo_ACTUAL_TERR_UCHET.pid " & _
" WHERE (((spis2.Ddiagn) >= #" & Format(Поле2, "mm\/dd\/yyyy") & "# And (spis2.Ddiagn) <= #" & Format(Поле4, "mm\/dd\/yyyy") & "#)) " & _
" GROUP BY dbo_ACTUAL_TERR_UCHET.kod6"
Debug.Print ctext
Set rst = CodeDb.OpenRecordset(ctext, dbOpenDynaset, dbSeeChanges)
If rst.RecordCount > 0 Then
Dim i As Integer
rst.MoveLast
        
ProgressBar1.Max = rst.RecordCount + 1
ProgressBar1.Value = 1
        
For i = 1 To rst.RecordCount
ProgressBar1.Value = ProgressBar1.Value + 1
param = ""
param = param & "Dim parameters(2) As ParameterValue" & vbCr
param = param & "parameters(0) = New ParameterValue()" & vbCr
param = param & "parameters(0).NAME = ""terr""" & vbCr
param = param & "parameters(0).Value = """ & rst!kod6 & """" & vbCr
param = param & "parameters(1) = New ParameterValue()" & vbCr
param = param & "parameters(1).NAME = ""d1""" & vbCr
param = param & "parameters(1).Value = """ & Format(Поле2, "mm.dd.yyyy") & """" & vbCr
param = param & "parameters(2) = New ParameterValue()" & vbCr
param = param & "parameters(2).NAME = ""d2""" & vbCr
param = param & "parameters(2).Value =""" & Format(Поле4, "mm.dd.yyyy") & """" & vbCr
text = "EXEC  [dbo].[repsave] 'E:\...\MAIL_LIST\" & rst!kod6 & "_Список_зарегистрированных " & "'" & _
", '/SPID_Reports/REGCGIE','" & param & "'"
Debug.Print ctext
cmd.CommandText = ctext
Set arst = cmd.Execute(, , adAsyncFetch)
DoEvents
rst.MovePrevious
Next i
Else
MsgBox "На указанную дату нет данных."
Exit Sub
End If
Else
ProgressBar1.Max = 1
ProgressBar1.Value = 1
param = ""
param = param & "Dim parameters(2) As ParameterValue" & vbCr
param = param & "parameters(0) = New ParameterValue()" & vbCr
param = param & "parameters(0).NAME = ""terr""" & vbCr
param = param & "parameters(0).Value = """ & Поле0 & """" & vbCr
param = param & "parameters(1) = New ParameterValue()" & vbCr
param = param & "parameters(1).NAME = ""d1""" & vbCr
param = param & "parameters(1).Value = """ & Format(Поле2, "dd.mm.yyyy") & """" & vbCr
param = param & "parameters(2) = New ParameterValue()" & vbCr
param = param & "parameters(2).NAME = ""d2""" & vbCr
param = param & "parameters(2).Value =""" & Format(Поле4, "dd.mm.yyyy") & """" & vbCr
ctext = "EXEC  [dbo].[repsave] 'E:\...\MAIL_LIST\" & Поле0 & "_Список_зарегистрированных " & "'" & _
", '/SPID_Reports/REGCGIE','" & param & "'"
Debug.Print ctext
cmd.CommandText = ctext
Set arst = cmd.Execute()
End If
ProgressBar1.Visible = False
con.Close
End Sub
...
Рейтинг: 0 / 0
11.04.2013, 08:45
    #38221238
GlassMorre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
К сожалению, проблема имеет место быть, скорость работы такого метода ужасна. Пытаюсь придумать обходные маневры. Если кто видит узкие места - подскажите. Заранее спасибо.
...
Рейтинг: 0 / 0
31.07.2013, 10:07
    #38349675
GlassMorre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS автоматическое сохранение отчета по абсолютному пути
Все оказалось до ужаса просто. Выкладываю тут, вдруг кому тоже приспичит.
Код: vbnet
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.
Private Sub Кнопка7_Click()
Dim full_url As String, strFile_path As String, file_name As String
full_url = "http://serversql:81/RS_SPID?/SPID_Reports/REGCGIE&rc:Parametrs=false&rs:Command=Render&rs:format=PDF" & _
"&d1=" & Format(Поле2, "yyyy-mm-dd") & "&d2=" & Format(Поле4, "yyyy-mm-dd") & "&terr=" & Поле0
DoIt full_url, "\\serversql\SoFT_UPDATES\Clinique_N\MAIL_LIST", Поле0 & "_Список_зарегистрированных.pdf"
MsgBox "Из отчета выгружен файл для:" & Поле0.Column(1)
con.Close

End Sub

Sub DoIt(urlname As String, foldername As String, Filename As String)

    Const adTypeBinary = 1
    Const adSaveCreateNotExist = 1
    Const TemporaryFolder = 2
    Dim oStream ' ADODB.Stream
    Dim oFSO    ' Scripting.FileSystemObject
    Dim xml     ' Microsoft.XMLHTTP
    Dim sURL
    Dim oFil
    Dim sImagePath

    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set xml = CreateObject("Microsoft.XMLHTTP")
    Set oStream = CreateObject("Adodb.Stream")
     
    sURL = urlname
    sImagePath = foldername & "\" & Filename
    xml.Open "GET", sURL, False
    xml.send

    oStream.type = adTypeBinary
    oStream.Open
    oStream.write xml.responseBody

    oStream.SaveToFile sImagePath, adSaveCreateOverWrite
    oStream.Close
    Set oFil = oFSO.GetFile(sImagePath)
    Set oStream = Nothing
    Set xml = Nothing
    Set oFSO = Nothing
    Set oFil = Nothing
End Sub
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / SSRS автоматическое сохранение отчета по абсолютному пути / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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