2

レポートとデータ ソースをプログラムで管理するためのレポート Web サービス (2010) を使用する MVC アプリケーションを作成しています。

この機能を最初に実装した約 1 か月ほど前に、最初にレポート (.rdl ファイル) をアップロードし、後でそのデータ ソースをアップロードすることができました。その後、Web ページのレポート ビューアー コントロールを使用してレポートを表示できました。

しかし、1 週間ほど前から、このフローが壊れています。つまり、最初にレポートをアップロードしてからデータ ソースをアップロードすると、レポート ビューアー コントロールでレポートがレンダリングされません。次のエラーが発生します。

The report server cannot process the report or shared dataset.
The shared data source 'AW' for the report server or SharePoint site is not valid.
Browse to the server or site and select a shared data source.

データ ソースは、次のように rdl ファイルで定義されている共有データ ソースです。

<DataSources>
  <DataSource Name="AW">
    <DataSourceReference>AW</DataSourceReference>
  </DataSource>
</DataSources>

フローを逆にすると、つまり、最初にデータ ソースをアップロードしてからレポートをアップロードすると、機能し始めます。しかし、100% 確信しています。他のフローは、最初に実装したときに機能していました。

なぜ元の流れが機能しなくなったのか、私は困惑しています。レポートとデータ ソースの両方が特定のフォルダーにアップロードされます。

誰かがこれに光を当ててください。本来の流れは理にかなっていますか?つまり、それはうまくいくはずですか、それとも私は何かを想像していましたか?

ところで、アップロードされたデータソースは次の形式です

<?xml version="1.0" encoding="utf-8"?>
<DataSourceDefinition xmlns="http://schemas.microsoft.com/sqlserver/reporting/2006/03/reportdatasource">
  <Extension>SQLAZURE</Extension>
  <ConnectString>Data Source=xxx;Initial Catalog=AdventureWorks2012</ConnectString>
  <UseOriginalConnectString>false</UseOriginalConnectString>
  <OriginalConnectStringExpressionBased>false</OriginalConnectStringExpressionBased>
  <CredentialRetrieval>Store</CredentialRetrieval>
  <WindowsCredentials>false</WindowsCredentials>
  <ImpersonateUser>false</ImpersonateUser>
  <UserName>user</UserName>
  <Password>pass</Password>
  <Enabled>True</Enabled>
</DataSourceDefinition>

ReportingService2010.CreateCatalogItemレポートとデータ ソースの両方を作成する方法を使用します。

どんな助けでも大歓迎です。

4

1 に答える 1

1

おそらく、私のケースはあなたにとって役立つかもしれません。アプリケーション サーバーが起動する前に、rdl ファイルから SSRS2012 にレポートをアップロードするタスクがありました。rs.exr ではなく、Web サービス API を使用することにしました。CreateCatalogItem クラスのメソッドでレポートを読み込んだ後ReportingService2010、ブラウザでレポートを実行しようとするとエラーが発生しました。SSRS は、読み込まれたレポートの共有データ ソースを見つけることができませんでした。VS2013 からレポートを公開すると、レポートは正常に機能しました。メソッドを使用できませんでしたSetItemDataSources、DataSource クラスのインスタンスとして既存のデータ ソースへの参照を取得できなかったためです。そのため、次の解決策を見つけました。rdl ファイルには共有データ ソースの名前のみが含まれ、パスは含まれないという考え方。そのため、レポートとそのデータ ソースが別のフォルダーにある場合、レポートにはデータ ソースが表示されません。私の場合、データ ソースは「Data Sources」フォルダーにあるため、以下に示すように、アップロードする前に rdl ファイルを修正する必要があります。

Warning[] warnings = null;

string name = "ProductList";

string dsName = "DB_CORE";

string dsFolderPath = "/Data Sources";

byte[] definition = null;

// correct rdl

XmlDocument rdlDoc = new XmlDocument();

rdlDoc.Load(+ name + ".rdl");

XmlNodeList dsRefmodes = rdlDoc.GetElementsByTagName("DataSourceReference");

dsRefmodes[0].InnerText  = dsFolderPath + "/" + dsName;

definition =  Encoding.UTF8.GetBytes(rdlDoc.OuterXml);

// upload

CatalogItem report = rs.CreateCatalogItem("Report", name, "/" + parent,
                            true, definition, null, out warnings);
于 2016-06-29T10:29:56.683 に答える