Comment déclencher un Abonnement SSRS basé sur un événement?
est-ce qu'il y a un moyen par lequel je peux déclencher un abonnement SSRS (basé sur le temps) chaque fois qu'il y a un événement comme un fichier créé dans un dossier partagé? On peut le faire avec powershell ou C#?
Est-il hors de la zone de fonctionnalité disponible dans SSRS (bien que je ne pense pas qu'il y est tout)?
J'utilise SQL Server 2008 R2.
3 réponses
oui, on fait quelque chose comme ça ici. Vous pouvez utiliser la fonction "inscription" des services de Reporting pour déclencher un abonnement. Voici une explication détaillée de comment le configurer:
Tir d'un Reporting Services d'Abonnement
vous pouvez utiliser FileSystemWatcher pour dire quand votre fichier est abandonné et ensuite virer l'abonnement. Il est cependant asynchrone, de sorte que vous ne recevez pas de notification si le rapport a été envoyé avec succès... seulement qu'elle a été mise en file d'attente avec succès. De plus, vous modifiez d'abord les paramètres de l'abonnement avant de le lancer, de sorte que vous devez vous assurer que vous n'avez pas plus d'un programme pour déclencher l'abonnement ou il pourrait finir par tomber sur lui-même.
un Autre un peu plus compliqué façon de le faire est d'utiliser la fonction Rendu pour générer un rapport et ensuite votre programme gérer l'emailing.
de Cette façon, vous vous n'avez pas à créer un abonnement fictif et vous saurez immédiatement s'il a été envoyé avec succès avec les paramètres corrects.
Une note finale... si vous avez L'édition Enterprise (ce que vous ne faites probablement pas), elle est livrée avec des abonnements à des rapports basés sur des données, que vous pouvez utiliser pour déclencher un abonnement:
ici, j'ai utilisé l'abonnement en temps opportun , j'ai eu besoin de générer le rapport sur un certain clic de bouton, ainsi j'ai créé l'abonnement qui va tirer après une minute et générer rapport PDF. Et j'ai eu toute l'aide de cet article : http://odetocode.com/articles/114.aspx
vous devez ajouter webservice de référence de webservice fourni par SSRS http://mymachine/ReportServer/ReportService2010.asmx
ici @ "\Mymachinename\Share", est le chemin où mon pdf a été stocké (Chemin:le chemin du dossier ou le chemin de partage de fichier UNC vers lequel sauvegarder le rapport. https://msdn.microsoft.com/en-us/library/ms154020.aspx)
ainsi vous pouvez appeler générer l'abonnement selon votre besoin sur le fichier créé.
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 = "Test1@TimeStamp";
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());
}
Vous pouvez créer un service windows qui utilise FileSystemWatcher
(https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher%28v=vs.110%29.aspx) et puis il suffit de déclencher votre travail sur l'événement modifié.