Отправка электронной почты из SSRS repor 2008 - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть следующие данные о поставщиках в отчете SSRS 2008.

ID    Name    Details    Email
1     abc      d1       rob.b@gmail.com
2     def      d2       pat@gmail.com
3     ghi      d3       golf@gmail.com
4     dft      d4       rob.b@gmail.com 

Мне нужно отправить соответствующие данные на каждый идентификатор электронной почты.Например, в приведенных выше данных мне нужно отправить всю запись с идентификаторами 1 и 4 на rob.b@gmail.com.Есть ли способ отправить только соответствующие детали на электронные письма, указанные в отчете.Может кто-нибудь, пожалуйста, посоветуйте.

1 Ответ

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

Да - вы можете использовать Управляемую данными подписку , чтобы сделать это в SSRS - если у вас есть версия SQL Server для предприятий.

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

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

Свойства управляемой данными подписки: Data Driven Subscription

К сожалению, оба метода слишком велики для обсуждения в ответе.

MSDN - управляемые данными подписки

MSSQLTips.com - моделирование-отчетов-служб-управляемых данными-подписок

Вот SP, который я создал для создания нескольких электронных писем:

ALTER PROCEDURE [dbo].[RECORD_REVIEW_GENERATION]

AS
DECLARE @SUBSCRIPTION_ID AS VARCHAR(100) = (SELECT SETTING_VALUE FROM WORKING_STORAGE.dbo.SETTINGS WHERE SETTING_NAME = 'REVIEW_SUBSCRIPTION')
DECLARE @SUBJECT VARCHAR(200) 
DECLARE @COMMENT VARCHAR(500) 
DECLARE @REVIEW_ID VARCHAR(50) 
DECLARE @EXTENSION_SETTINGS XML
DECLARE @PARAMETERS XML
DECLARE @RECORD_ID AS INT 
DECLARE @MAX_RECORD_ID AS INT 
DECLARE @END_DATE AS DATE = GETDATE() - DATEPART(WEEKDAY, GETDATE())    --PREVIOUS SUNDAY
DECLARE @START_DATE AS DATE = DATEADD(DAY, -6, @END_DATE)   --PREVIOUS MONDAY
DECLARE @DATE VARCHAR(500) = CONVERT(VARCHAR(8), @END_DATE, 112)



SELECT @EXTENSION_SETTINGS = ExtensionSettings, @PARAMETERS = [Parameters]
FROM ReportServer.dbo.Subscriptions
WHERE SubscriptionID = @SUBSCRIPTION_ID;



IF OBJECT_ID('tempdb..#REVIEWS') IS NOT NULL DROP TABLE #REVIEWS 

CREATE TABLE #REVIEWS(ReviewID VARCHAR(50), ProviderName VARCHAR(250), SiteIDNo VARCHAR(20), 
                        ReviewDate VARCHAR(12), UserName VARCHAR(250), VisitPurpose VARCHAR(250), 
                        NoOfPhysicians INT, NoOfRecords INT, RECORD_ID INT IDENTITY(1,1)
                    )
INSERT INTO #REVIEWS(ReviewID, ProviderName, SiteIDNo, ReviewDate, UserName, VisitPurpose, NoOfPhysicians, NoOfRecords)
SELECT ReviewID, ProviderName, SiteIDNo, ReviewDate, UserFirstName + ' ' + UserLastName AS UserName, VisitPurpose, NoOfPhysicians, NoOfRecords 
FROM KHSSQLODSPRD.QI_SITE_REVIEW.dbo.RecordHeader 
WHERE ExportDate BETWEEN @START_DATE AND @END_DATE
ORDER BY ReviewDate


SET @RECORD_ID = 1
SET @MAX_RECORD_ID = (SELECT ISNULL(MAX(RECORD_ID), 0) FROM #REVIEWS)


    WHILE @RECORD_ID <= @MAX_RECORD_ID 
    BEGIN

        SELECT @REVIEW_ID = ReviewID, 
                @SUBJECT = 'Review - ' + ProviderName, 
                @COMMENT = CAST(@RECORD_ID AS VARCHAR(10)) + ' of ' + CAST(@MAX_RECORD_ID AS VARCHAR(10)) 
                            + ' Review Surveys for the week ending ' + RTRIM(CONVERT(VARCHAR(12), @END_DATE, 110)) + '.' 
                            + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) + ProviderName + ' [' + SiteIDNo + '] - Reviewed ' + RTRIM(CONVERT(VARCHAR(12), ReviewDate, 110)) 
                            + '. Review ID ' + ReviewID  
                            + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) + VisitPurpose + ' visit for ' + CAST(CAST(NoOfPhysicians AS INT) AS VARCHAR(20)) + ' physicians with ' 
                            +  CAST(CAST(NoOfRecords AS INT) AS VARCHAR(20)) + ' records by ' + UserName + '.'
        FROM #REVIEWS 
        WHERE RECORD_ID = @RECORD_ID


        SET @REVIEW_ID = LOWER(@REVIEW_ID)  

        --SET EXTENSION OPTIONS
        SET @EXTENSION_SETTINGS.modify('replace value of (/ParameterValues/ParameterValue[Name="Subject"]/Value/text())[1] with sql:variable("@SUBJECT")');
        SET @EXTENSION_SETTINGS.modify('replace value of (/ParameterValues/ParameterValue[Name="Comment"]/Value/text())[1] with sql:variable("@COMMENT")');

        --SET REPORT PARAMETERS
        SET @PARAMETERS.modify('replace value of (/ParameterValues/ParameterValue[Name="SITE_ID"]/Value/text())[1] with sql:variable("@REVIEW_ID")');


        --UPDATE SUBSCRIPTION PARAMETERS 
        UPDATE dbo.Subscriptions
        SET ExtensionSettings = CAST(@EXTENSION_SETTINGS AS VARCHAR(8000)), 
            [Parameters]      = CAST(@PARAMETERS AS VARCHAR(8000))
        WHERE SubscriptionID = @SUBSCRIPTION_ID


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


        --WAIT WHILE REPORT GENERATES 
        WAITFOR DELAY '00:00:03.000';

        --IF REPORT IS STILL EXECUTING, WAIT SOME MORE
        WHILE EXISTS (SELECT TOP 1 'X' FROM dbo.Event WHERE EventData = @SUBSCRIPTION_ID ) OR EXISTS (SELECT TOP 1 'X' FROM dbo.Notifications WHERE SubscriptionID = @SUBSCRIPTION_ID)
                        BEGIN
                            WAITFOR DELAY '00:00:01.000';
                            PRINT 'Waiting for subscription to finish'
                        END


        SET @RECORD_ID = @RECORD_ID + 1

    END  --END OF LOOP 

--      SET @FLAG = 1

Вы бы добавили адрес TO так же, как обновляется Комментарий . @Review_ID передается в отчет в качестве параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...