レポートで定義されたすべてのパラメータをループして、パラメータ名と値の表示文字列を作成できるようにしたいと考えています。次に、レポートに結果を表示して、ユーザーがその特定の実行に使用されたパラメーターを把握できるようにします。唯一の問題は、Parameters コレクションをループ処理できないことです。Parameters コレクションにはインデクサーがないようで、IEnumerable を実装しているようにも見えません。誰もこれを達成できましたか?SSRS 2005 を使用していますが、レポート コード内に実装する必要があります (つまり、外部アセンブリはありません)。ありがとう!
3 に答える
残念ながら、これを行う簡単な方法はないようです。詳細については、 http://www.jameskovacs.com/blog/DiggingDeepIntoReportingServices.aspxを参照してください。その投稿のコメントを見ると、これを回避する方法がいくつかありますが、あまりエレガントではありません。最も単純な解決策では、レポート コードのどこかにレポート パラメーターのリストを含める必要がありますが、これは明らかにDRYの原則に違反していますが、最も単純な解決策が必要な場合は、それを受け入れる必要があるかもしれません。
外部アセンブリを使用する方がはるかに簡単だと思われるため、外部アセンブリがないという制約を再考することをお勧めします。または、レポートがあまり変わらない場合は、パラメーター名と値のリストを手動で作成できます。
私があなたの質問を理解している場合は、私がしていることを実行してください: レポートにテキストボックスをドロップし、レポートを設定している間に次を挿入します: ="Parameter1: " + Parameters!Parameter.Label + ", Parameter2: " + パラメータ!パラメータ 2.ラベル...
確かに、それは最も美しいものではありませんが、私たちのアプリではうまく機能します.
また、日時の値があるため、値の代わりにラベルを使用しています。ユーザーは短い日付または月と年 (状況に応じて) のみを気にし、パラメーターの設定でその書式設定作業を既に行っています。 .
これを行うには、少なくとも 2 つの方法が考えられます。最初のものはうまくいくかもしれませんが、2番目のものは間違いなくうまくいくでしょう。
Web サービスを使用します。パラメータのコレクションを取得するための API を見たと確信しています。直接アクセスできない場合でも、常に標準コレクションを作成し、foreach ループで ReportParameter オブジェクトを 1 つのオブジェクトから別のオブジェクトにコピーしてから、ReportParameter インスタンスを逆参照することで個々のパラメーター プロパティを使用して Count にアクセスできます。
レポートは RDL です。RDL は XML です。XmlDocument を作成し、RDL ファイルをロードしてから、DOM を使用して、既定値の設定や接続文字列の書き換えなど、好きなことを行います。
アプリが RDL ファイルへのファイル システム アクセスを持たない場合は、Web サービス経由で取得できます。