Как отправить письма с подпиской SSRS? - PullRequest
0 голосов
/ 12 ноября 2018

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

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Я использовал подход, аналогичный тому, который опубликовал Hannover Fist, но с другим подходом к повторному запуску подписок:

SELECT
     S.ScheduleID AS SQLAgent_Job_Name,
     SUB.Description AS Sub_Desc,
     SUB.DeliveryExtension AS Sub_Del_Extension,
     C.Name AS ReportName,
     C.Path AS ReportPath,SUB.LastStatus
FROM ReportSchedule RS
     INNER JOIN Schedule S ON (RS.ScheduleID = S.ScheduleID)
     INNER JOIN Subscriptions SUB ON (RS.SubscriptionID = SUB.SubscriptionID)
     INNER JOIN [Catalog] C ON (RS.ReportID = C.ItemID AND SUB.Report_OID = C.ItemID)

WHERE LEFT (SUB.LastStatus, 12) Like 'Failure%' or LEFT (SUB.LastStatus, 12) Like 'Error%'
      order by reportname

     USE msdb 
    EXEC sp_start_job @job_name = <SQLAgent_Job_Name>

Одно из больших отличий состоит в том, что мина захватывает оба «отказа»и статусы «Ошибка».

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

0 голосов
/ 13 ноября 2018

Нет автоматического способа сделать это.

Вы можете получить список отчетов вместе с идентификаторами подписки, которые не удалось выполнить, запросив таблицу подписок в базе данных ReportServer.Затем присоедините его к таблице каталога, чтобы показать подробности отчета.

SELECT Sub.SubscriptionID,
       Sub.InactiveFlags,
       Sub.ExtensionSettings,
       Sub.Description,
       Sub.LastStatus,
       Sub.EventType,
       Sub.MatchData,
       Sub.LastRunTime,
       Sub.Parameters,
       Sub.DeliveryExtension,
       Cat.Path,
       Cat.Name,
       Cat.Description,
       Cat.Hidden,
       Cat.Parameter,
       Cat.ExecutionFlag,
       Cat.ExecutionTime
FROM [ReportServer].[dbo].[Subscriptions] as Sub
LEFT OUTER JOIN [ReportServer].[dbo].[Catalog] as Cat on
Sub.Report_OID = ItemID
WHERE LastStatus LIKE 'Failure%'

Затем можно использовать идентификатор подписки для запуска подписки для каждого отчета с помощью функции AddEvent.

EXEC dbo.AddEvent @EventType = 'TimedSubscription', @EventData = @SUBSCRIPTION_ID;

Можно создать хранимую процедуру для циклического перемещения по таблице изапустить подписки.

...