4

1台のサーバーにSSRSをインストールしたSQLServer2008と、新しいサーバーにSSRSをインストールしたSQL Server2008R2があります。SSRS WebサービスAPIを使用して、200以上のレポートと、いくつかの共有スケジュールおよびいくつかのデータソースを最初のサーバーから2番目のサーバーに移行したいと思います。簡単にするために、共有データソースは2つしかないため、先に進み、レポートマネージャーインターフェイスを使用してそれらを作成しました。

残念ながら、私の前に来た人は、各レポートにデータソース情報(接続文字列、ログイン、パスワードなど)を埋め込みました。共有データソースを指すようにこれらを変更するのに最適な時期だと思いました。これにより、レポートごとに1つずつ行う必要がなくなります。CreateCatalogItemを使用して新しいサーバーでレポートを問題なく作成できますが、埋め込みデータソースから共有データソースに適切に変更する方法を判断できないようです。

これまで、両方のSetItemReferencesを試しました。

itemRef.Reference = "/Data Sources/TMS";
itemRef.Name = "TMS";
itemRef.Reference = "/Data Sources/TMS";

rs2010.SetItemReferences(catItem.Path, new ReportService2010.ItemReference[] { itemRef });

およびSetItemDataSources:

ReportService2010.DataSourceReference dataSourceRef = new ReportService2010.DataSourceReference();
dataSourceRef.Reference = "/Data Sources/TMS";

ReportService2010.DataSource dataSource = new ReportService2010.DataSource();
dataSource.Name = "TMS";
dataSource.Item = dataSourceRef;

rs2010.SetItemDataSources(catItem.Path, new ReportService2010.DataSource[] { dataSource });

どちらの方法でも、データソースが埋め込まれたレポートで試行すると「NotFoundException」が発生しますが、共有データソースを既に指しているレポートではどちらも問題なく機能します。

さらに、Google全体とStackOverflowで解決策を検索しましたが、何も見つかりませんでした。誰かが私をここで正しい方向に向けることができますか?

4

1 に答える 1

5

それで、私はSetItemReferencesメソッドを使い続けて、うまくいくという素晴らしいアイデアを思いつきました。私が使用した最終的なコードは次のとおりです。

List<ReportService2010.ItemReference> itemRefs = new List<ReportService2010.ItemReference>();
ReportService2010.DataSource[] itemDataSources = rs2010.GetItemDataSources(catItem.Path);

foreach (ReportService2010.DataSource itemDataSource in itemDataSources)
{
    ReportService2010.ItemReference itemRef = new ReportService2010.ItemReference();
    itemRef.Name = itemDataSource.Name;
    itemRef.Reference = "/Data Sources/TMS";
    itemRefs.Add(itemRef);
}

rs2010.SetItemReferences(catItem.Path, itemRefs.ToArray());

問題は、レポートの.rdlファイルで見つかったものと同じデータソース名を使用していなかったことです。GetItemDataSourcesメソッドを使用して、名前を決定することができました。このメソッドは配列を返し、その配列に複数のアイテムが含まれる可能性があるため、複数のItemReferenceが存在する場合は、それをループして複数のItemReferenceを作成しました。

于 2012-10-31T15:09:57.227 に答える