2014-01-08 2 views
2

솔직히 이것이 가능하지 않다고 생각하지만 적어도 시도해보고 싶었습니다. 매일 매일 독점 프로그램에서 수행하는 거래를 기반으로 SSRS 전자 메일 구독을 통해 다양한 사람들에게 발송되는 보고서가 매일 생성됩니다. 언젠가 실제로는 트랜잭션이 없으므로 빈 엑셀 파일을 보냅니다. 나는 그것이 기본적으로 지원된다고 생각하지 않는다. 그래서 엑셀 파일에 데이터가 없다면 해킹으로 "오늘 트랜잭션이 없다"라는 메시지를 이메일에 추가하는 방법이 있을까요? 며칠 동안 "첨부 된 Excel 파일의 트랜잭션"과 같은 말을합니다.이메일 구독의 본문을 매일 바꿀 수 있습니까?

누군가가 확인할 수 있습니다. 이것이 가능한가? 아니면 안돼?

답변

2

실제로 이것은 기본적으로 가능하며 정말 좋습니다! 당신이 찾고있는 것은 데이터 기반 구독입니다. 보고서의 관리 페이지 아래에있는 구독 탭으로 이동하여 보고서를 만듭니다. 구독 만들기 및 데이터 기반 구독 만들기의 두 가지 옵션이 있습니다. Create Data-Driven Subscription을 클릭하십시오.

나는 여기에서 길이에 대해 사과하지만 이것들에 대해서 너무 많이 말하고있다!

내가 원하는대로 설정할 수있는 심층적 인 과정이기 때문에 여기에 모든 단계를 자세히 설명 할 수는 없습니다. 선택의 폭이 있습니다! Here은 데이터 기반 구독에 대한 MSDN 기사입니다.하지만 최소한의 도움이 될 것입니다. Here은 TechNet 자습서를 작성하는 방법에 대한 것이지만, 사용자가 갈길만큼 깊이 파고 들지 않는다는 것을 알게 될 것입니다. 방금 시행 착오를 통해 모든 것을 배웠습니다.

이런 것들에 대해 말할 것도 없지만 기본적으로 데이터의 일부를 평가하는 SQL 쿼리를 작성하면 결과적으로 "메모"(html로 작성된 전자 메일), "Include Report"(true/false) 및 "Render Format"등이 있습니다.

쿼리가 반환하는 각 줄마다 하나의 전자 메일이 전송된다는 점에 유의해야합니다. 따라서 거래 보고서 전자 메일 세 개를 보내려면 쿼리가 모든 적절한 데이터가 포함 된 세 개의 행을 반환하는지 확인해야합니다.

귀하의 이익을 위해 다음은 보고서를 작성하는 내 검색어 중 수정 된 사본입니다. 코멘트 필드는 html로 작성해야하므로 상당히 길다는 것을 알 수 있습니다. 그러나 SQL은 긴 문자열을 제대로 처리 할 수있는 한 매우 긴 문자열을 처리 할 수 ​​있습니다.

따라서 거래가 없을 때 Include_Report를 false로 설정하고 보고서가 첨부되지 않은 이유에 대한 설명을 적절한 메시지로 변경하고자 할 수 있습니다.

이 쿼리의 목적은 서버 문제를 찾고 문제가 발견되면 최종 사용자에게 나중에 제공 될 것이라고 알리는 전자 메일 (보고서가 첨부되지 않음)을 발송하는 것입니다. (필자는 서버 성능을 담당하지 않으며 시간에 맞추지 못하는 사람들이 많습니다.)

모든 입력 변수에 대해 SSRS 가입 필드가 있음을 알게 될 것입니다. 이 방법을 통해 나는 내가 상상할 수있는 스크립트를 기반으로 보고서가 전자 메일로 보내지는 방법을 제어 할 수 있습니다. 또한 설정이 좀 더 쉬워집니다. 또한 구독을 테스트 할 수있는 빠른 방법으로 구축하여 최종 사용자에게 전달하지 않고도 재생할 수 있으며 최종 사용자에게 이동하도록 변경하는 데 몇 초가 걸립니다.

/*********************************************************/ 
/*  Change @Testing to 'TEST' to have all emails  */ 
/*    sent to Christopher Brown    */ 
/*********************************************************/ 
/*  Change @Testing to 'PROD' to have all emails  */ 
/*    sent to normal recipients.    */ 
/*********************************************************/ 

Declare @Testing varchar(4) = 'TEST'; 

With Problems as (

/*Script that looks for hardware failures or anything that would 
cripple the accuracy of the report.*/ 

) 

Select Case 
     When @Testing = 'TEST' 
     Then '[email protected]' 
      When @Testing = 'PROD' 
      Then '[email protected]' 
     Else '[email protected]' 
     End as 'To' 
    , Case 
     When @Testing = 'TEST' 
     Then '[email protected]' 
      When @Testing = 'PROD' 
      Then '[email protected]' 
     Else '[email protected]' 
     End as 'CC' 
    , '' as 'BCC' 
    , '[email protected]' as 'Reply-To' 
    , Case 
     When @Testing = 'TEST' 
      Then '***TEST***' 
      Else '' 
     End + 
     Case 
     When /*Problems Indicated*/ 
      Then '@ReportName - Report Delayed' 
      Else '@ReportName for ' + CONVERT(varchar(10),getdate(),101) 
     End as 'Subject' 
    , 'Normal' as 'Priority' 
    , Case 
     When /*Problems Indicated*/ 
      Then 'False' 
      Else 'True' 
     End as 'Include_Report' 
    , 'PDF' as 'Render_Format' 
    , Case 
     When /*Problems Indicated*/ 
      Then 'High' 
      Else 'Normal' 
     End as Priority 
    , 'false' as 'Include_Link' 
    , Case 
     When /*Problems Indicated*/ 
      Then '<html><Body><Font Face="Constantia","Times New Roman"><p>This Report could not be created at this time. We will send out an updated Report once the server issues have been resolved. If you have questions, please contact us.</p></Font></body></html>' 
      Else '<html><Body><Font Face="Constantia","Times New Roman"><p>Attached is the Report. When the report is run on a Monday, it does one thing.</p><p>Every other weekday, the report does something slightly different. Please note that the report is scheduled to run every weekday, Monday through Friday, regardless of holiday schedules.</p><p>If you have questions about the report, please contact us.</p><p>If the attached report is empty or missing vital information, click <a href="mailto:[email protected]?Subject=Problem%20with%20Report">here</a> to notify us.</p></Font></body></html>' 
     End as 'Comment' 

From Problems 
+1

확실하지 않은 경우 ... 테스트 변수를 사용하여 이메일이 전송되기 전에 이메일을 보내고 있습니다.이 작업을 수행하는 좋은 이유는 별도의 TEST 및 PROD 서버에서 작업 할 때 두 서버에서 원하는대로 서브 스크립 션이 작동하는지 확인하기 위해서입니다. 내가하는 일은 PROD에 Testing = 'TEST'로 배포하는 것입니다. 모두 잘되면, 나는 Testing = 'PROD'를 바꾼다. –

관련 문제