以编程方式操作SSRS订阅
本文演示了如何在不使用 SSRS 界面ng的情况下,动态处理 SQL Server Reporting Services 订阅。
引言
SQL Server Reporting Services 允许以编程方式处理各种报表订阅。您可以读取特定的订阅并在代码隐藏中按需进行更改。我假设您已经了解 Reporting Services 中的订阅机制。对于不了解的各位,Reporting Services 中的订阅只不过是由您定义和设置的自动化服务(SQL Server 作业),用于在特定时间或特定事件发生时传递报表。您还可以定义报表将以何种格式呈现给用户。现在,您设置的任何订阅属性都将存储在报表服务器数据库中。Schedule、Subscriptions 和 ReportSchedule 表包含所有这些信息。
实现
您可以下载本文提供的代码。在本文中,我将不讨论全部代码,而是更侧重于关键点。
首先,创建一个 Windows 或 Web 应用程序。为 ReportingService2006 添加 Web 引用。如果 SSRS 已安装在您的系统上,您可以在以下 URL 中轻松找到 ReportService2006.asmx
http://servername/_vti_bin/ReportServer/ReportService2006.asmx
请注意,servername 必须替换为实际的报表服务器 URL。如果报表服务器未安装在您的系统上,您可以使用上述 URL(必须替换服务器名称)在远程报表服务器上找到此 Web 服务。
ActiveState active = null;
ParameterValueOrFieldReference[] extensionParams = null;
ExtensionSettings extSettings = null;
ParameterValue[] values; a
string desc = string.Empty;
string eventType = string.Empty;
string matchData = string.Empty;
通过传递需要更改的订阅的订阅 ID 来调用 ReportingService2006 Web 服务的 GetSubscriptionProperties
方法
ReportingService2006 rs = new ReportingService2006();
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
rs.GetSubscriptionProperties(txtSubscriptionID.Text.Trim(), out extSettings,
out desc, out active, out status, out eventType, out matchData, out values);
此方法的不同参数详情如下:
- 订阅 ID:需要修改的订阅的唯一 ID。
- 扩展设置:报表传递扩展及其可配置的设置。这是一个输出参数。
- 描述:包含一些有意义的描述,将显示给用户。这是一个输出参数。
- ActiveState:返回指定订阅的
ActiveState
。这是一个输出参数。 - Status:订阅的状态,是一个输出参数。
- EventType:返回触发订阅的事件类型。这是一个输出参数。
- MatchData:返回特定于报表执行和传递调度过程的 XML 数据。这是一个输出参数。
- ParameterValue[]:报表不同参数的集合。这也是一个输出参数。
要获取 Web 服务返回的所有扩展设置,您可以使用以下代码
ParameterValueOrFieldReference[] extensionParams = extSettings.ParameterValues;
foreach (ParameterValueOrFieldReference extensionParam in extensionParams)
{
if (((ParameterValue)extensionParam).Name.Equals("TO"))
{
txt_TO.Text = ((ParameterValue)extensionParam).Value;
}
if (((ParameterValue)extensionParam).Name.Equals("CC"))
{
txt_CC.Text = ((ParameterValue)extensionParam).Value;
}
if (((ParameterValue)extensionParam).Name.Equals("BCC"))
{
txt_BCC.Text = ((ParameterValue)extensionParam).Value;
}
if (((ParameterValue)extensionParam).Name.Equals("ReplyTo"))
{
txt_ReplyTo.Text = ((ParameterValue)extensionParam).Value;
}
if (((ParameterValue)extensionParam).Name.Equals("Subject"))
{
txt_Sub.Text = ((ParameterValue)extensionParam).Value;
}
if (((ParameterValue)extensionParam).Name.Equals("Comment"))
{
txt_Comment.Text = ((ParameterValue)extensionParam).Value;
}
if (((ParameterValue)extensionParam).Name.Equals("Priority"))
{
txt_Priority.Text = ((ParameterValue)extensionParam).Value;
}
}
正如我之前所写,matchdata
参数返回 XML 字符串,需要先解析才能更改或修改。您始终可以在报表服务器数据库的 Subscription 表中执行 select
语句来查看 matchdata
列的样子。但前提是,您必须先创建一个报表订阅。理解不同调度期间的匹配数据的 XML 定义,然后根据您的要求解析并绑定到不同的控件。
在检索了 ReportingService2006 的所有信息并进行绑定后,就轮到您根据要求更改数据了。现在,要保存订阅,请注意,您需要再次创建一个 XML 字符串,其中包含修改后的报表调度定义。最后,调用 ReportingService2006 Web 服务的 SetSubscriptionProperties
方法。
rs.SetSubscriptionProperties(subscriptionID, extSettings, desc,
eventType, xmlScheduling, values);
这将更新报表服务器数据库中的订阅定义。需要特别注意的是,动态生成的 matchdata
必须与确切的定义一致。有五种类型的调度期间:一次性、每小时、每日、每小时、每周和每月。对于每种不同的调度期间,XML 架构或多或少都不同。因此,我建议您不要在不了解不同调度期间的 matchdata
格式的情况下使用 SetSubscriptionProperties
方法来更改订阅。否则,报表订阅可能会因不正确的 matchdata
而损坏。
附注与参考
以下链接在实施过程中可能非常有用:http://technet.microsoft.com/en-us/library/reportservice2006.reportingservice2006_members.aspx。
您可以访问我的技术博客:http://tech-motive.blogspot.com。