2015-05-28 12 views
8

Czy istnieje sposób wyzwalania subskrypcji SSRS (opartej na czasie) w przypadku wystąpienia zdarzenia takiego jak plik utworzony w folderze udostępnionym? Czy możemy to zrobić z powershell lub C#?Jak wyzwolić subskrypcję SSRS na podstawie zdarzenia?

Czy w usłudze SSRS dostępna jest funkcja "out of box" (chociaż nie sądzę, że istnieje)?

Używam programu SQL Server 2008 R2.

Odpowiedz

6

Tak, robimy coś takiego tutaj. Możesz użyć funkcji FireSubscription usług sieciowych Reporting Services, aby wyzwolić subskrypcję. Oto szczegółowe wyjaśnienie, w jaki sposób ustawić:

Firing a Reporting Services Subscription

Można używać FileSystemWatcher powiedzieć, kiedy plik jest odrzucany, a następnie ogień subskrypcję off. Jest asynchroniczny, więc nie otrzymujesz powiadomienia, jeśli raport został wysłany pomyślnie ... tylko że został pomyślnie umieszczony w kolejce. Poza tym najpierw modyfikujesz parametry subskrypcji przed jej uruchomieniem, więc musisz upewnić się, że nie masz więcej niż jednego programu, który wyzwoli subskrypcję, lub może się to potknąć.

Innym nieco bardziej skomplikowanym sposobem, aby to zrobić, jest użycie funkcji Renderowanie w celu wygenerowania raportu, a następnie poproś program o zarządzanie pocztą e-mail.

Render Function

W ten sposób nie trzeba tworzyć obojętne subskrypcji i będziesz natychmiast wiedzieć, czy została wysłana z odpowiednimi parametrami.

Ostatnia uwaga ... jeśli masz Enterprise Edition (czego zapewne nie), pochodzi z danych Driven Raport zapisów, które można użyć do uruchomienia subskrypcję:

Creating a Data-Driven Subscription

+0

Mam skrypt powershell za pomocą funkcji renderowania, aby uzyskać plik XML z powrotem do analizowania raportu SCCM dla nazw komputerów powiązanych z parametrem nazwa użytkownika. Jeszcze się nie udało i wydaje się być solidne i niezawodne. – ssaviers

+0

Brian, Dzięki za tonę. To było rodzaj rozwiązania, którego szukałem. Użyłem pierwszej sugestii, aby uruchomić subskrypcję poprzez SSIS. – AJ01

1

Tutaj użyłem terminowej subskrypcji, musiałem wygenerować raport na niektórych kliknięciach przycisku, więc stworzyłem subskrypcję, która uruchomi się po minucie i wygeneruje raport PDF. I mam wszelką pomoc z tego artykułu: http://odetocode.com/articles/114.aspx

Trzeba dodać odniesienie webservices z usługa dostarczonych przez SSRS http://mymachine/ReportServer/ReportService2010.asmx

Tutaj @ „\ MyMachineName \ share” jest ścieżka gdzie mój pdf przechowywano (ŚCIEŻKA: Ścieżka do folderu lub ścieżka udostępniania pliku UNC, do której ma zostać zapisany raport: https://msdn.microsoft.com/en-us/library/ms154020.aspx)

Możesz więc wywołać generowanie subskrypcji zgodnie z potrzebą utworzenia pliku.

 using Test_WebProject.ReportService2010; 
     private static ExtensionSettings GetExtensionSettings() 
     { 
      ParameterValue[] extensionParams = new ParameterValue[7]; 

      for (int i = 0; i < extensionParams.Length; i++) 
       extensionParams[i] = new ParameterValue(); 

      extensionParams[0].Name = "FILENAME"; 
      extensionParams[0].Value = "[email protected]"; 

      extensionParams[1].Name = "FILEEXTN"; 
      extensionParams[1].Value = "true"; 

      extensionParams[2].Name = "PATH"; 
      extensionParams[2].Value = @"\\MyMachineName\Share"; 

      extensionParams[3].Name = "RENDER_FORMAT"; 
      extensionParams[3].Value = "PDF"; 

      extensionParams[4].Name = "WRITEMODE"; 
      extensionParams[4].Value = "None"; //"Overwrite ";// "AutoIncrement"; 

      extensionParams[5].Name = "USERNAME"; 
      extensionParams[5].Value = "gmd"; 

      extensionParams[6].Name = "PASSWORD"; 
      extensionParams[6].Value = "password123"; 

      ExtensionSettings extensionSettings = new ExtensionSettings(); 
      extensionSettings.Extension = "Report Server FileShare"; // EXTENSION_FILESHARE; 
      extensionSettings.ParameterValues = extensionParams; 

      return extensionSettings; 
     } 
     static void generateSubscription() 
     { 
      string report = @"/MyReports/TestSSRSSubscrptionReport"; 

      string description = "My Test subscription2010"; 
      string eventType = "TimedSubscription"; 

      ExtensionSettings extSettings = GetExtensionSettings(); 


      List<ReportService2010.ParameterValue> parameters = new List<ReportService2010.ParameterValue>();    
      parameters.Add(new ReportService2010.ParameterValue() { Name = "EmployeeKey", Value = "9" }); 
      parameters.Add(new ReportService2010.ParameterValue() { Name = "SelectedColumn", Value = "EmployeeKey" }); 

      parameters.Add(new ReportService2010.ParameterValue() { Name = "ParamSelectedColumns", Value = "FirstName" }); 
      parameters.Add(new ReportService2010.ParameterValue() { Name = "ParamSelectedColumns", Value = "LastName" }); 

      NetworkCredential credentials = new NetworkCredential("gmd", "password123"); 
      ReportService2010.ReportingService2010 rs = new ReportService2010.ReportingService2010(); 
      rs.Credentials = credentials; // System.Net.CredentialCache.DefaultCredentials; 

      DateTime topDatetime = DateTime.Now; 
      topDatetime = topDatetime.AddMinutes(1); 
      string scheduleXml = "<ScheduleDefinition><StartDateTime>"; 
      scheduleXml += topDatetime.ToShortDateString() + " " + topDatetime.ToShortTimeString(); 
      scheduleXml += "</StartDateTime></ScheduleDefinition>"; 

      string sid = rs.CreateSubscription(report, extSettings, description, eventType, scheduleXml, parameters.ToArray()); 
     } 
Powiązane problemy