Лучший способ автоматически отправлять по электронной почте отчеты Sql Server Reporting Service, управляемые данными? - PullRequest
2 голосов
/ 12 мая 2011

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

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

Очень просто запланировать управляемую данными подписку для отчета о затратах, который получает X его отчета, и, очевидно, нет способа пометить запись X-Y как «Больше не отправлять этот отчет».

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

И да, мы могли бы, и в некоторых случаях, написали свои собственные маленькие сервисы / приложения для чтения БД, захвата отчета, отправки его по электронной почте и повторного обновления базы данных, но это похоже на то, что не стоит не так сложно, как есть.

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

Ответы [ 3 ]

2 голосов
/ 13 мая 2011

Предупреждение: у меня есть доступ только к SQL Server 2005 и 2008 R2 Standard.Мне не повезло иметь доступ к версиям Enterprise.

Однако я знаю, что вы можете проверить поля LastStatus и LastRunTime в таблице Subscriptions базы данных ReportServer (япредположим, что управляемые данными подписки будут по-прежнему хранить данные подписки в таблице подписок).

При этом вы можете создать и запланировать сохраненный процесс, который проверяет состояние и время последней отправки подписки (подписей), и еслиего нужно отправить снова, вы можете передать GUID для подписки в sp_start_job сохраненный процесс, который отправит подписку как обычно.Возможно, вам придется настроить подписку, чтобы она не отправлялась сама по себе - только при запуске из запланированного хранимого процесса.

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

0 голосов
/ 13 мая 2011

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

0 голосов
/ 12 мая 2011

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

Крис `

использовать [msdb]

GO

выберите

Получатели , copy_recipients , blind_copy_recipients ,предмет тело , file_attachments , sent_status , конвертировать (varchar, sent_date, 109) как Date_Sent

из dbo.sysmail_sentitems `

...