我们使用rs.exe将RDL部署到ReportServer。
作为DataSource,共享数据集和RDL驻留在不同的文件夹中。部署RDL后,RDL与共享数据集和共享数据集之间的映射将被删除。
我必须手动将每个RDL映射到相应的DataSet和DataSource。我有200个RDL,手动很难。
我需要在部署RDL后将RDL映射到数据集的代码
有些机构可以根据我的要求提供一些代码吗?
答案 0 :(得分:3)
我创建了一个执行以下操作的rs.exe脚本:
根据文件 Report.rdl 部署报告。该报告有一个对共享数据源的引用和一个对共享数据集的引用。该报告将部署到报告服务器/目录。
将报表的数据源设置为报表服务器上的现有共享数据源。数据源部署为 /数据源/ DS 。
将报表的DataSet设置为报表服务器上的现有Shared DataSet。数据源部署为 / 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
听起来您已经成功部署了报告。
因此,需要注意的主要事项是更新数据源引用和DataSet引用的代码片段。需要注意的方法是:
SetItemDataSources更新数据源。
SetItemReferences更新数据集。
这是针对一个报告,因此您需要将代码包装在部署脚本的子例程中,但希望这可以帮助您。