SSRS RDL以编程方式映射数据源

时间:2013-04-18 13:12:20

标签: deployment ssrs-2008 reporting-services rdl

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

作为DataSource,共享数据集和RDL驻留在不同的文件夹中。部署RDL后,RDL与共享数据集和共享数据集之间的映射将被删除。

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

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

有些机构可以根据我的要求提供一些代码吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

  4. 该脚本包含以下代码:

    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
    

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

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

    SetItemDataSources更新数据源

    SetItemReferences更新数据集

    这是针对一个报告,因此您需要将代码包装在部署脚本的子例程中,但希望这可以帮助您。