1

ログイン中にセッション変数を設定して、レポートで使用できるようにする方法はありますか?

レポート サービス サーバーがあり、レポート目的でトランザクション システムからデータを移動して非正規化します。ユーザーがトランザクション システムから同じユーザー名とパスワードでログインできるようにするために、カスタム フォーム認証をセットアップしました。さらに、トランザクション システムにアクセスする権限があるため、ユーザー権限の変更はすぐに Reporting Services に反映されます。

ここでの問題は、トランザクション システムのユーザー権限/グループに応じてパラメーターをロックするなど、いくつかの追加機能を追加したいということです。それを行う方法を見つけましたが、それは非効率的です。基本的には、トランザクション システムにクエリを実行してアクセスをチェックするストアド プロシージャがあります。問題は、回答が変わる可能性が低いにもかかわらず、レポート要求ごとにこれらのクエリが実行されることが多いことです。ログイン中に一度設定して、レポートからアクセスできるセッション レベルのデータにアクセスできると便利です。

4

3 に答える 3

1

リフレクションを使用すると、実行中のジョブの HTTPContext にアクセスできます。ここから、Session オブジェクトを取得できます (セットアップによって異なります)。セキュリティに関連する少し異なるシナリオでは、この方法を使用する必要がありました。複数のデータセットを使用するレポートがある場合、最初のデータセットのみが適切なユーザー コンテキストを取得します。このハックにより、HTTPContext を自分で取得できます (カスタム データ レイヤーで使用します)。

MSDNフォーラムの記事からの抜粋:

using System.Reflection;
using Microsoft.ReportingServices.Diagnostics;

// This is declared outside of a method body for improved performance,
// since this reflection bit only needs to run once

private static FieldInfo contextField = 
  typeof(RunningJobContext).GetField("m_optionalWebCtx", 
                   BindingFlags.Instance | BindingFlags.NonPublic);

// Call this in your method
HttpContext context = (HttpContext)contextField.GetValue(Globals.JobContext);
于 2009-02-24T10:34:58.233 に答える
0

アクセスをasp.netサイトに移動し、reportviewerコントロールを使用することで、より柔軟になります。

開発マシンと IIS マシンの両方に同じバージョンのコントロール (VS 2008 のバージョン 9.0.0.0) があることを確認してください。

次に、IIS とレポート サーバーのセットアップの間のアクセス許可/アクセス権を取得する必要がありますが、それほど難しくありません。

その時点で、すべてのパラメーターの設定、非表示、制御、または独自のパラメーター制御の提供をより詳細に制御できます。

于 2009-02-24T10:48:33.943 に答える
0

SSRS から session への直接アクセスはありません。私の提案:

  1. データベースにテーブルを作成してすべての権限/グループ関連情報をホストし、userID をパラメータとしてストアド プロシージャに渡します。発行 - このテーブルの変更をトリガーします。
  2. ASP.NET を SSRS のラッパーとして使用するため、セッション変数に問題はありません。ASP.NET アプリケーションで SQL Reporting Services を開始する
于 2009-02-22T11:08:58.730 に答える