2015-05-28 5 views
8

C'è un modo in cui posso attivare un abbonamento SSRS (basato sul tempo) ogni volta che c'è un evento come il file creato in una cartella condivisa? Possiamo farlo con powershell o C#?Come attivare un abbonamento SSRS in base a un evento?

C'è una funzionalità fuori dalla scatola disponibile in SSRS (anche se non credo che ce ne sia qualcuno)?

Sto usando SQL Server 2008 R2.

risposta

6

Sì, facciamo qualcosa di simile qui. È possibile utilizzare la funzione FireSubscription dei servizi Web di Reporting Services per attivare una sottoscrizione. Ecco una spiegazione dettagliata di come configurarlo:

Firing a Reporting Services Subscription

È possibile utilizzare il FileSystemWatcher di dire quando il file viene eliminato e poi il fuoco la sottoscrizione off. È asincrono, quindi non ricevi notifiche se il rapporto è stato inviato con successo ... solo che è stato accodato correttamente. Inoltre, devi prima modificare i parametri dell'abbonamento prima di attivarlo, quindi devi assicurarti di non avere più di un programma per attivare l'abbonamento o potrebbe finire per inciampare su se stesso.

Un altro modo un po 'più complicato per farlo è quello di utilizzare la funzione di rendering per generare un report e quindi avere il vostro programma di gestione del emailing.

Render Function

In questo modo non c'è bisogno di creare una sottoscrizione fittizio e saprete subito se è stato inviato con successo con i parametri corretti.

Una nota finale ... se avete l'Enterprise Edition (che probabilmente non), si tratta con Data Driven report sottoscrizioni, che è possibile utilizzare per attivare un abbonamento:

Creating a Data-Driven Subscription

+0

Ho uno script PowerShell utilizzando la funzione di rendering per ottenere il file XML di nuovo per l'analisi di un rapporto di SCCM per i nomi di computer associati a un parametro nome utente. Non ha ancora fallito e sembra solido e affidabile. – ssaviers

+0

Brian, grazie mille. Questo era il tipo di soluzione che stavo cercando. Ho usato il primo suggerimento per licenziare l'abbonamento tramite SSIS. – AJ01

1

Qui ho usato abbonamento tempestivo, ho avuto necessità di generare il rapporto su qualche pulsante di scatto, così ho creato sottoscrizione che sarà il fuoco dopo un minuto e generare report PDF. E ho avuto tutto l'aiuto di questo articolo: http://odetocode.com/articles/114.aspx

È necessario aggiungere riferimento webservice di webservice fornito da SSRS http://mymachine/ReportServer/ReportService2010.asmx

Qui @ "\ MyMachineName \ Share", è il percorso in cui il mio pdf è stato conservato (pERCORSO: il percorso della cartella o UNC condivisione file percorso in cui salvare il rapporto https://msdn.microsoft.com/en-us/library/ms154020.aspx.)

così si può chiamare generare abbonamento secondo le vostre necessità sul file creato.

 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()); 
     }