迁移 SQL Reporting Service 项目的辅助对象






4.67/5 (9投票s)
一个助手对象库,用于自动化将 SQL RS 项目从开发服务器迁移到生产服务器。
引言
解决方案中有两部分主要代码:一个助手对象 (maSQLReport
),以及一个用于执行其工作的测试窗体。请注意,测试应用程序(可以作为 EXE 下载)几乎没有异常处理,而且非常粗糙。其功能仅是为了让我在集成到我们现有的迁移工具之前进行测试。
背景
我们公司支持一个 ASP/ASP.NET 业务应用程序。目前,该应用程序使用 Crystal Reports 进行报表,但我们正在研究 SQL Reporting。我们的开发流程是将开发和单元测试放在开发服务器上,迁移和验收测试放在暂存服务器上,生产和培训分别放在专用服务器上。
我们已经编写了一个工具,可以将每个开发问题的 ASP 页面、SQL 存储过程和 Crystal .RPT 文件沿着迁移路径进行移动。此对象的目的是使用 Reporting Services SOAP API 来集成类似的 SQL Reports 迁移。因此,maSQLReport
的一些公共接口选择是基于我们在该应用程序中的需求而定的,例如以树状结构公开可用项目。
使用测试应用程序
演示只是测试助手对象的公共接口。它可以作为将该对象集成到您自己工作的指南。
使用方法
- 在“源”和“目标”输入框中设置报表服务器的 WSDL 路径。我已预先填充了默认位置和名称的示例。
- 单击“SetURL”按钮。(如果您正在编译代码,并且更改了默认值,则不需要此操作。)
- 单击“Load Tree”。这将显示您源服务器根目录中的所有项目。(请注意,通过 Web 服务遍历文件夹树 **很慢** - 如果您有很多嵌套文件夹,这可能需要一段时间。您可能需要更改
getReportTree
调用以从子文件夹开始。) - “Select”按钮会将选定的树项移动到下面的
ListView
中,“DeSelect”按钮会从ListView
中移除选定的项。 - 单击“Migrate”按钮会将项目从源服务器移动到目标服务器。
- 如果存在,共享数据源和链接报表将不会被覆盖。
- 大多数父项将被创建(如果不存在),例如:
- 链接报表的源报表
- 共享数据源
- 执行、历史记录或快照的共享计划
- **不** 迁移安全性
- **不** 迁移订阅
- 如果报表设置为从快照渲染,但没有快照计划,则会创建一个快照。
- 如果报表包含子报表,则子报表 **不会** 自动迁移。
- 输出结果将显示在右侧的
ListBox
中。您可以使用“Clear”按钮将其清除。
使用助手对象
首先,实例化该对象的一个实例。如果您希望在运行时设置路径,只需将其设置为空字符串;只要在调用之前设置了属性,就可以正常工作。
Dim maSQLRep As New maSQLReport.Reports("", "", "", "", 1, 2, 3, 4, 5, 6)
这需要以下输入:
DevURL As String, StageURL As String, TrainURL As String, _
LiveURL As String, ResourceImageIndex As Integer, ReportImageIndex As Integer, _
DataSourceImageIndex As Integer, LinkReportImageIndex As Integer, _
ClosedFolderImageIndex As Integer, OpenfolderImageIndex As Integer
xxxURL
String
是每个服务器的 WSDL 路径。ImageIndex
是 ImageList
对象中用于在程序中定义的 TreeView
的图像索引。
maSQLReport
公开助手对象 Reports
,以及实际的 SOAP API,作为 SQLReportingServices
。
对象定义
maSQLReport.Reports
公开了四个公共接口、四个属性、一个 Enum
和一个类。它们是:
- 属性与
New
的前四个参数相同。DevURL
StageURL
TrainURL
LiveURL
- 该
Enum
SeverityLevels
- 定义迁移输出的错误消息的严重性。
- 类
RSItemNode
-Windows.Forms.TreeNode
的重载版本。这是getTreeNode
方法返回的内容。- 除了常规的
Treenode
方法/属性外,它还公开了:Item
- 是节点基于的SQLReportingServices.CatalogItem
。Tag
- 填充了一个ListViewItem
,其中包含路径、类型描述以及源 URL 作为SubItem
。
- 方法
getReportTree
- 接受起始路径和一个可选的String
作为根NodeName
。MigrateDev2Stage
- 接受一个完全限定的项目路径,并将该项目从devURL
定义的服务器移动到StageURL
定义的服务器。MigrateStage2Train
- 与上面相同,从StageURL
移动到TrainURL
。MigrateStage2Live
- 与上面相同,从StageURL
移动到LiveURL
。
示例用法
从文本框设置 URL
maSQLRep.DevURL = txtSourceURL.Text
maSQLRep.StageURL = txtDestinationURL.Text
将源服务器的内容获取为 TreeNode
'Assume TreeView1 is a TreeView, that has an imageList set
'returned nodes will have imageindexs set to match the defined indexes from object
'instantiation.
TreeView1.Nodes.Add(maSQLRep.getReportTree("/"))
'If path specified, would start there
使用所选 TreeNode 的信息
'Populating a listview - if it is in detail mode, and has 3 columns
'with subitem information already loaded
'
ListView1.Items.Add(TreeView1.SelectedNode.Tag)
'Could also read any of the CatalogItem properties by casting to RSItemNode
Dim rsNode As maSQLReport.Reports.RSItemNode = TreeView1.SelectedNode
Dim path As String = rsNode.Item.Path
迁移项目并显示结果
Dim warnings As New ArrayList
'All Items in a listview, place output in a listbox
For Each item As ListViewItem In ListView1.Items
warnings.AddRange(maSQLRep.MigrateDev2Stage(item.Text))
If Not warnings Is Nothing Then
For Each warning As maSQLReport.SQLReportingServices.Warning In warnings
ListBox1.Items.Add(warning.Message)
Next
End If
warnings.Clear()
Next
'A single item found from casting example
warnings = maSQLRep.MigrateDev2Stage(path)
看点
目前,没有提供迁移服务器设置的选项,例如角色/项目安全性或订阅。我们的需求只是移动实际的 Catalog 项目。
如果有兴趣,我将发布一篇后续文章,介绍实际的对象代码。
历史
版本 1.0 - 文章基于此。