繁体   English   中英

如何根据事件触发SSRS订阅?

[英]How to trigger a SSRS Subscription based on an event?

有没有一种方法可以在共享文件夹中创建文件之类的事件时触发SSRS订阅(基于时间)? 我们可以用PowerShell或C#来做吗?

SSRS中是否有开箱即用功能(虽然我认为没有)?

我正在使用SQL Server 2008 R2。

是的,我们在这里做了类似的事情。 您可以使用Reporting Services Web服务的FireSubscription功能来触发订阅。 以下是如何设置的详细说明:

触发Reporting Services订阅

您可以使用FileSystemWatcher来判断文件何时被删除,然后关闭该订阅。 它是异步的,所以如果报告发送成功,你就不会得到通知......只是它已成功排队。 您也可以在启动之前首先修改订阅的参数,因此您必须确保没有多个程序来触发订阅,否则它可能最终会自行跳过。

另一种稍微复杂的方法是使用Render函数生成报告,然后让程序管理电子邮件。

渲染功能

这样您就不必创建虚拟订阅,并且您将立即知道它是否已使用正确的参数成功发送。

最后一点说明......如果您拥有企业版(您可能没有),它会附带数据驱动的报表订阅,您可以使用它来触发订阅:

创建数据驱动的订阅

在这里,我已经使用了及时订阅,我需要生成一些按钮点击的报告,所以我创建了订阅,一分钟后将触发并生成PDF报告。 我从这篇文章中得到了所有帮助: http//odetocode.com/articles/114.aspx

您需要添加SSRS提供的webservice的webservice引用http://mymachine/ReportServer/ReportService2010.asmx

这里@“\\ MyMachineName \\共享”,是我的PDF格式保存(PATH路径:文件夹路径或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());
        }

您可以创建一个使用FileSystemWatcherhttps://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher%28v=vs.110%29.aspx )的Windows服务,然后只需触发您的工作改变了事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM