2

我们使用 rs.exe 将 RDL 部署到 ReportServer。

由于 DataSource,Shared DataSet 和 RDLs 位于不同的文件夹中。部署 RDLs 后,RDL 到 Shared DataSets 和 Shared DataSets 到 DataSource 之间的映射被删除。

我必须手动将每个 RDL 映射到相应的 DataSet 和 DataSource。我有 200 个 RDL,手动操作真的很难。

部署 RDL 后,我需要将 RDL 映射到数据集的代码

一些机构可以帮助我提供一些代码来满足我的要求吗?

4

1 回答 1

3

我创建了一个执行以下操作的 rs.exe 脚本:

  1. 基于文件Report.rdl部署报告。该报表有一个对共享数据源的引用和一个对共享数据集的引用。报表部署到报表服务器/目录。

  2. 将报表的数据源设置为报表服务器上的现有共享数据源。数据源部署为/Data Sources/DS

  3. 将报表的数据集设置为报表服务器上的现有共享数据集。数据源部署为/Datasets/DataSet

该脚本包含以下代码:

Public Sub Main()
    Dim definition As [Byte]() = Nothing
    Dim warnings As Warning() = Nothing

    'Read report from file on disk
    Dim stream As FileStream = File.OpenRead("Report.rdl")
    definition = New [Byte](stream.Length - 1) {}
    stream.Read(definition, 0, CInt(stream.Length))
    stream.Close()

    'Deploy report
    'ItemType, name, folder, overwrite, definition, properties 
    rs.CreateCatalogItem("Report", "Report", "/", True, definition, Nothing, warnings)

    'Update existing report Data Souce reference to Shared Data Source on server
    Dim dataSourceRefs(0) As DataSource
    Dim dsr As New DataSourceReference
    dsr.Reference = "/Data Sources/DS"
    Dim ds As New DataSource
    ds.Item = CType(dsr, DataSourceDefinitionOrReference)
    ds.Name = "DS"
    dataSourceRefs(0) = ds

    rs.SetItemDataSources("/Report", dataSourceRefs)

    'Update existing report DataSet reference to Shared DataSet on server   
    Dim dataSetRefs(0) as ItemReference
    Dim dset as New ItemReference
    dset.Name = "DataSet"
    dset.Reference = "/Datasets/DataSet"
    dataSetRefs(0) = dset

    rs.SetItemReferences("/Report", dataSetRefs)

End Sub

听起来您已经成功部署了报告。

因此,主要需要注意的是更新数据源引用和数据集引用的代码片段。需要注意的方法有:

SetItemDataSources更新数据源

SetItemReferences来更新DataSet

这是针对一份报告的,因此您需要将代码封装在部署脚本的子例程中,但希望这会对您有所帮助。

于 2013-04-19T14:35:12.147 回答