如何根据事件触发 SSRS 订阅?
How to trigger a SSRS Subscription based on an event?
有什么方法可以在共享文件夹中创建文件等事件时触发 SSRS 订阅(基于时间)?我们可以用 powershell 或 C# 来做吗?
SSRS 中是否有开箱即用的功能(虽然我认为没有)?
我正在使用 SQL Server 2008 R2。
您可以创建一个使用 FileSystemWatcher
(https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher%28v=vs.110%29.aspx) 的 windows 服务,然后在更改的事件上触发您的作业。
是的,我们在这里做这样的事情。您可以使用 Reporting Services Web 服务的 FireSubscription 功能来触发订阅。以下是如何设置的详细说明:
Firing a Reporting Services Subscription
您可以使用 FileSystemWatcher 来判断您的文件何时被删除,然后关闭订阅。虽然它是异步的,所以如果报告发送成功您不会收到通知......只有它已成功排队。此外,您在启动订阅之前首先要修改订阅的参数,因此您必须确保您没有超过一个程序来触发订阅,否则它可能最终会自己绊倒。
另一种稍微复杂的方法是使用 Render 函数生成报告,然后让您的程序管理电子邮件。
这样您就不必创建虚拟订阅,并且您会立即知道它是否使用正确的参数成功发送。
最后一点……如果您有企业版(您可能没有),它带有数据驱动报告订阅,您可以使用它来触发订阅:
这里我使用了及时订阅,我有生成报告的需求
单击某个按钮,因此我创建了订阅,该订阅将在一分钟后触发并生成 PDF 报告。
我从这篇文章中得到了所有帮助:
http://odetocode.com/articles/114.aspx
您需要添加SSRS提供的webservice的webservice引用
http://mymachine/ReportServer/ReportService2010.asmx
这里@"\MyMachineName\Share", 是我的pdf存放的路径
(路径:要将报告保存到的文件夹路径或 UNC 文件共享路径。
https://msdn.microsoft.com/en-us/library/ms154020.aspx)
因此您可以根据需要在创建的文件上调用生成订阅。
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());
}
有什么方法可以在共享文件夹中创建文件等事件时触发 SSRS 订阅(基于时间)?我们可以用 powershell 或 C# 来做吗?
SSRS 中是否有开箱即用的功能(虽然我认为没有)?
我正在使用 SQL Server 2008 R2。
您可以创建一个使用 FileSystemWatcher
(https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher%28v=vs.110%29.aspx) 的 windows 服务,然后在更改的事件上触发您的作业。
是的,我们在这里做这样的事情。您可以使用 Reporting Services Web 服务的 FireSubscription 功能来触发订阅。以下是如何设置的详细说明:
Firing a Reporting Services Subscription
您可以使用 FileSystemWatcher 来判断您的文件何时被删除,然后关闭订阅。虽然它是异步的,所以如果报告发送成功您不会收到通知......只有它已成功排队。此外,您在启动订阅之前首先要修改订阅的参数,因此您必须确保您没有超过一个程序来触发订阅,否则它可能最终会自己绊倒。
另一种稍微复杂的方法是使用 Render 函数生成报告,然后让您的程序管理电子邮件。
这样您就不必创建虚拟订阅,并且您会立即知道它是否使用正确的参数成功发送。
最后一点……如果您有企业版(您可能没有),它带有数据驱动报告订阅,您可以使用它来触发订阅:
这里我使用了及时订阅,我有生成报告的需求 单击某个按钮,因此我创建了订阅,该订阅将在一分钟后触发并生成 PDF 报告。 我从这篇文章中得到了所有帮助: http://odetocode.com/articles/114.aspx
您需要添加SSRS提供的webservice的webservice引用 http://mymachine/ReportServer/ReportService2010.asmx
这里@"\MyMachineName\Share", 是我的pdf存放的路径 (路径:要将报告保存到的文件夹路径或 UNC 文件共享路径。 https://msdn.microsoft.com/en-us/library/ms154020.aspx)
因此您可以根据需要在创建的文件上调用生成订阅。
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());
}