レポート サーバー上のレポートに RDCE を使用しています。レポートを機能させるには、"UsedInQuery" パラメータを true に設定する必要があります。デフォルトでは false です。ただし、これは設計時に設定できるパラメータではありません。パラメータは、デプロイ後に手動で構成する必要があります。
これを行う理由の 1 つは、最初にレポートを見つけて、レポート サーバー データベース ディレクトリを操作することです。
select ItemID
,Path,Name,Description
,cast(Property as xml) as Property
,cast(Parameter as xml) as Parameter
from dbo.Catalog
where name like 'list of databases%'
次に、変更されたパラメーター値でレポートパラメーターを更新します
update Catalog
set Parameter='
<Parameters>
<UserProfileState>0</UserProfileState>
<Parameter>
...
<UsedInQuery>True</UsedInQuery>
...
</Parameter>
</Parameters>'
where ItemID='someID'
これですべてがうまく機能しますが、毎回そのようにデータベースを操作しなければならないのは良くありません。そのため、レポーティング サービスの Web サービスで何ができるかを調べています。
私の質問は、データベースを直接操作する以外の方法でレポート パラメータを変更することは可能ですか? できれば、Reporting Services から提供される Web サービスを使用します。
私が見つけたのは、この方法が私が望むものに近いということです:
SetItemParameters(path, parameters)
基本的に、上記のメソッドは、 UsedInQuery パラメータを設定できる場合に必要なことを実行します。しかし、上記の行でパラメーターを変更しようとすると、何も変更されません。ここで何が間違っているのかわかりません。
これが私のコードの一部です。Borland C++ で書かれていることに注意してください。
NS_ReportService2010::ItemParameter *itemPar = new NS_ReportService2010::ItemParameter();
itemPar->Name = "language";
itemPar->QueryParameter = System::True;
// itemPar->AllowBlank = true;
NS_ReportService2010::ArrayOfItemParameter *itemParameters = new NS_ReportService2010::ArrayOfItemParameter();
itemParameters->set_length(1);
itemParameters->operator [](0) = itemPar;
ReportingService->SetItemParameters("/myreport", *itemParameters);
アップデートで何か間違ったことをしていますか?
編集:
Ron5504 の返信の後、ログ ファイルを調べたところ、次のようになりました。
runningrequests!ReportServer_0-2!6b4!07/30/2013-13:57:39:: v VERBOSE: SoapAction: "http://schemas.microsoft.com/sqlserver/reporting/2010/03/01/ReportServer/SetItemParameters"
library!ReportServer_0-2!6b4!07/30/2013-13:57:39:: v VERBOSE: Constructed Stream Factory 'StreamFactory:19aa4462-dc7a-4a19-a505-1d0a96ce7fc4' of type 'Microsoft.ReportingServices.Library.MemoryThenFileStreamFactory'
library!ReportServer_0-2!6b4!07/30/2013-13:57:39:: i INFO: Call to GetItemTypeAction(/TestReport).
library!ReportServer_0-2!6b4!07/30/2013-13:57:39:: i INFO: Call to GetItemTypeAction completed. Returns 2.
library!ReportServer_0-2!6b4!07/30/2013-13:57:39:: i INFO: Call to SetReportParametersAction(/TestReport).
library!ReportServer_0-2!6b4!07/30/2013-13:57:39:: v VERBOSE: Transaction begin.
library!ReportServer_0-2!6b4!07/30/2013-13:57:39:: i INFO: Call to SetReportParametersAction completed.
library!ReportServer_0-2!6b4!07/30/2013-13:57:39:: v VERBOSE: Transaction commit.
rshost!rshost!6b4!07/30/2013-13:57:39:: v VERBOSE: HttpPipelineCallback::EndOfRequest(): continue pipeline=0x00000002781A5AF0.
rshost!rshost!b5c!07/30/2013-13:57:39:: v VERBOSE: ThreadContinuePipeline: processing request on pipeline=0x00000002781A5AF0, state=2, IOError=0, node=0.
rshost!rshost!828!07/30/2013-13:57:43:: v VERBOSE: HttpPipeline::DisconnectCallback: releasing pipeline=0x00000002781A5AF0.
rshost!rshost!b5c!07/30/2013-13:57:43:: v VERBOSE: ThreadContinuePipeline: processing request on pipeline=0x00000002781A5AF0, state=0, IOError=2250, node=0.
rshost!rshost!b5c!07/30/2013-13:57:43:: v VERBOSE: State machine disconnected pipeline=0x00000002781A5AF0, state=4 ...
rshost!rshost!b5c!07/30/2013-13:57:43:: v VERBOSE: HttpPipeline::DoStateDisconnected: releasing pipeline=0x00000002781A5AF0.
rshost!rshost!b5c!07/30/2013-13:57:43:: v VERBOSE: HttpPipeline::ReleaseOnce: releasing pipeline=0x00000002781A5AF0.
rshost!rshost!b5c!07/30/2013-13:57:43:: v VERBOSE: Destroying pipeline=0x00000002781A5AF0, callback=0x0000000278138720 ...
library!WindowsService_0!224!07/30/2013-13:57:46:: v VERBOSE: Starting database version check timer.
library!WindowsService_0!224!07/30/2013-13:57:46:: v VERBOSE: Verifying DB version.
library!WindowsService_0!224!07/30/2013-13:57:46:: v VERBOSE: Database version check timer executed.
library!WindowsService_0!122c!07/30/2013-13:58:46:: v VERBOSE: Starting database version check timer.
library!WindowsService_0!122c!07/30/2013-13:58:46:: v VERBOSE: Verifying DB version.
library!WindowsService_0!122c!07/30/2013-13:58:46:: v VERBOSE: Database version check timer executed.
さらに、デザイナーモードでそれを行う方法を見つけたことを付け加えたいと思います。レポート パラメーターの [詳細設定] タブに移動します。次に、「パラメーターが変更されたときにデータを更新する:」を「常に更新する」にします。それにもかかわらず、私の質問はまだ残っています。SetItemParameters メソッドを使用して可能かどうかを知りたいです。