65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (9投票s)

2004年9月10日

CPOL

4分钟阅读

viewsIcon

128789

downloadIcon

486

一个助手对象库,用于自动化将 SQL RS 项目从开发服务器迁移到生产服务器。

引言

解决方案中有两部分主要代码:一个助手对象 (maSQLReport),以及一个用于执行其工作的测试窗体。请注意,测试应用程序(可以作为 EXE 下载)几乎没有异常处理,而且非常粗糙。其功能仅是为了让我在集成到我们现有的迁移工具之前进行测试。

背景

我们公司支持一个 ASP/ASP.NET 业务应用程序。目前,该应用程序使用 Crystal Reports 进行报表,但我们正在研究 SQL Reporting。我们的开发流程是将开发和单元测试放在开发服务器上,迁移和验收测试放在暂存服务器上,生产和培训分别放在专用服务器上。

我们已经编写了一个工具,可以将每个开发问题的 ASP 页面、SQL 存储过程和 Crystal .RPT 文件沿着迁移路径进行移动。此对象的目的是使用 Reporting Services SOAP API 来集成类似的 SQL Reports 迁移。因此,maSQLReport 的一些公共接口选择是基于我们在该应用程序中的需求而定的,例如以树状结构公开可用项目。

使用测试应用程序

Sample Image - maSQLReport.jpg

演示只是测试助手对象的公共接口。它可以作为将该对象集成到您自己工作的指南。

使用方法

  1. 在“源”和“目标”输入框中设置报表服务器的 WSDL 路径。我已预先填充了默认位置和名称的示例。
  2. 单击“SetURL”按钮。(如果您正在编译代码,并且更改了默认值,则不需要此操作。)
  3. 单击“Load Tree”。这将显示您源服务器根目录中的所有项目。(请注意,通过 Web 服务遍历文件夹树 **很慢** - 如果您有很多嵌套文件夹,这可能需要一段时间。您可能需要更改 getReportTree 调用以从子文件夹开始。)
  4. “Select”按钮会将选定的树项移动到下面的 ListView 中,“DeSelect”按钮会从 ListView 中移除选定的项。
  5. 单击“Migrate”按钮会将项目从源服务器移动到目标服务器。
    1. 如果存在,共享数据源和链接报表将不会被覆盖。
    2. 大多数父项将被创建(如果不存在),例如:
      1. 链接报表的源报表
      2. 共享数据源
      3. 执行、历史记录或快照的共享计划
      4. **不** 迁移安全性
      5. **不** 迁移订阅
    3. 如果报表设置为从快照渲染,但没有快照计划,则会创建一个快照。
    4. 如果报表包含子报表,则子报表 **不会** 自动迁移。
  6. 输出结果将显示在右侧的 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 路径。ImageIndexImageList 对象中用于在程序中定义的 TreeView 的图像索引。

maSQLReport 公开助手对象 Reports,以及实际的 SOAP API,作为 SQLReportingServices

对象定义

maSQLReport.Reports 公开了四个公共接口、四个属性、一个 Enum 和一个类。它们是:

  1. 属性与 New 的前四个参数相同。
    • DevURL
    • StageURL
    • TrainURL
    • LiveURL
  2. Enum
    • SeverityLevels - 定义迁移输出的错误消息的严重性。
    1. RSItemNode - Windows.Forms.TreeNode 的重载版本。这是 getTreeNode 方法返回的内容。
    2. 除了常规的 Treenode 方法/属性外,它还公开了:
      • Item - 是节点基于的 SQLReportingServices.CatalogItem
      • Tag - 填充了一个 ListViewItem,其中包含路径、类型描述以及源 URL 作为 SubItem
  3. 方法
    • 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 - 文章基于此。

© . All rights reserved.