2

ReportServer への RDL の展開に rs.exe を使用しています。

DataSource として、Shared DataSet と RDL は別のフォルダーに存在します。RDL を展開した後、RDL から Shared DataSet へ、および Shared DataSet から DataSource へのマッピングは削除されます。

各 RDL をそれぞれの DataSet と DataSource に手動でマップする必要があります。200 個の RDL がありますが、手動で行うのは非常に困難です。

RDL をデプロイした後、RDL をデータセットにマッピングするためのコードが必要です

私の要件に合わせてコードを手伝ってくれる人はいますか?

4

1 に答える 1

3

以下を実行する rs.exe スクリプトを作成しました。

  1. Report.rdlファイルに基づいてレポートを展開します。レポートには、共有データ ソースへの参照が 1 つと、共有データセットへの参照が 1 つあります。レポートは、レポート サーバー / ディレクトリに配置されます。

  2. レポートのデータ ソースを、レポート サーバー上の既存の共有データ ソースに設定します。データ ソースは/Data Sources/DSとしてデプロイされます。

  3. レポートの DataSet をレポート サーバー上の既存の共有 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

すでにレポートを正常に展開しているようです。

したがって、注目すべき主な点は、Data Source 参照と DataSet 参照を更新するコード スニペットです。注意すべき方法は次のとおりです。

SetItemDataSourcesを使用してData Sourceを更新します。

SetItemReferencesを使用してDataSetを更新します。

これは 1 つのレポートのためのものなので、展開スクリプトのサブルーチンでコードをラップする必要がありますが、これが役立つことを願っています。

于 2013-04-19T14:35:12.147 に答える