web-dev-qa-db-ja.com

動的URLを使用してSSRSレポートに画像を追加するにはどうすればよいですか?

レポートに画像を追加しようとしています。 image src urlは IHttpHandler であり、いくつかのクエリ文字列パラメーターを取ります。次に例を示します。

<img src="Image.ashx?item=1234567890&lot=asdf&width=50" alt=""/>

Imageをセルに追加してから、SourceをExternalに設定し、 Valueを次の式に変換します。

="Image.ashx?item="+Fields!ItemID.Value+"&lot="+Fields!LotID.Value+"&width=50"

しかし、レポートを表示すると、画像のhtmlが次のようにレンダリングされます。

<IMG SRC="" />

何が足りないのですか?

更新

Valueを "image.jpg"に設定しても、空のsrc属性がレンダリングされます。違いがあるかどうかはわかりませんが、リモート処理モードのVS 2008ReportViewerコントロールでこれを使用しています。

更新

絶対パス( http:// server/path/to/http/handler )を使用して、レポートデザイナー(VS 2005)に表示する画像を取得できました。ただし、レポートマネージャーのWebサイトには表示されませんでした。外部URLにアクセスできる 無人実行アカウント も設定しました。

15
jrummell

職場でサポートしているサイトのユーザーの国に関する情報を表示するSSRSレポートがあります。これは、IISログデータに基づいています。このレポートでは、表の最初の列に、各国の旗の小さな.gifを保持する画像フィールドがあります。上記の質問で説明したのとまったく同じ問題です。外部画像へのパスは、国コードに基づいてレポートのクエリで計算されました。最初に、次のようなものを指すようにURLを設定しました http://www.mystaticcontent。 com/fotwimg/us.gif 米国の旗など。私が得たのは、レポートに表示された赤いXの壊れた画像だけでした。その後、 このMSDNの記事 それが光を放っていました。私にとっての問題について。

これは、レポートを機能させるためにレポートで行ったことです。

  1. すべてのgifを含むfotwimgフォルダーを、静的コンテンツサーバーからローカルSSRSマシンに移動しました。このマシンでは、Webサーバーも実行されています。
  2. ローカルSSRSマシンのデフォルトのWebサイトに仮想ディレクトリをセットアップしますIIS Manager。
  3. 次に、レポートクエリを変更して、ローカルSSRSマシンのイメージを、次のようにマシン名で参照するようにしました http://mylocalssrsmachine/fotwimg/us.gif
  4. 出来上がり、それは機能します…または少なくとも私にとっては機能しました。
4

完全修飾パスを使用してみましたか?

http://<servername>/images/image1.jpg

詳細

2
jimconstable

私もこの問題を抱えています。

SSRSエラーログとIISサーバーログを確認しました。いくつかの調査結果:

  1. 静止画像へのURLを持つ外部画像が機能します。 (例 http://intranet/site/logo.jpg
  2. 静止画像のURLにパラメーターを追加できますが、それでも機能します。 (例 http://intranet/site/logo.jpg?foo = 1 )パラメータは無視され、画像が表示されます。これは、SSRSが?を窒息させていないことを示しています。
  3. パラメータのないレポートを返すASPXページに外部画像をリンクしても(例: http://intranet/site/image.aspx )、それでも機能しません。
  4. IISログには、レポートサーバーがイメージを要求し、200OKの応答を取得していることが示されます。
  5. レポートサーバーのログはこれを示しています:

    webserver!ReportServer_0-116!14cc!01/09/2012-12:20:29 :: i情報:処理されたレポート。 Report = '/ Path/ReportName'、Stream = '' ui!ReportManager_0-115!7b8!01/09/2012-12:20:29 ::未処理の例外:System.Web.HttpException:ファイルが存在しません。 System.Web.StaticFileHandler.GetFileInfo(String virtualPathWithPathInfo、StringphysicalPath、HttpResponse response)で
    at System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context)at System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context、AsyncCallback callback、Object state)atSystem.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication。 System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)のIExecutionStep.Execute()

つまり、(1)SSRSは/Page.aspxをダウンロードします。これは、コンテンツタイプの画像を提供します:image/jpg; (2)SSRSは、これをtempname.aspx.jpgのようなファイル名で一時フォルダーに保存します。 (3)SSRSは、画像をレポートに組み込むためにtempname.aspxを探します。 (4)エラー

コードビハインドで.jpgリクエストを処理することで、これをテストできると思います...残念ながら、現時点ではASPXのスキルを超えています。

2
John Fouhy

私の場合:製品のコードに応じてローカルホストからロードします。

Image.Source = "http:// [〜#〜] localhost [〜#〜]/IMG /" + Fields!CODE.value + ".jpg"

問題:ファイルが拡張子「.png」でアップロードされることがあります。したがって、FileExistsの検証が必要です。

解決策:1)補助テーブルを追加します

PRODUCT_PHOTO_EXTENSION

id(FKはPRODUCTを参照)拡張子(varchar)

2)ストアドプロシージャを作成します。 SQLでFileExists検証を実行し、PRODUCT_PHOTO_EXTENSION.extensionにある拡張子を保存します。

insert into PRODUCT_PHOTO_EXTENSION 
SELECT A.id,'.JPG' FROM PRODUCT A LEFT JOIN PRODUCT_PHOTO_EXTENSION AF ON A.id=AF.id WHERE AF.id IS NULL AND Matriz is null and dbo.FileExists('D:\directory\' + code + '.jpg')=1
 insert into PRODUCT_PHOTO_EXTENSION 
SELECT A.id,'.PNG' FROM PRODUCT A LEFT JOIN PRODUCT_PHOTO_EXTENSION AF ON A.id=AF.id WHERE AF.id IS NULL AND Matriz is null and dbo.FileExists('D:\directory\' + code + '.jpg')=1

3)このフィールドを使用して画像ファイルをロードします。 (SSRS; image.source式)

Iif(Fields!EXTENSION.Value<>"", "http://LOCALHOST/IMG/" & Fields!CODE.Value & Fields!EXTENSION.Value, "" )

4)結果:拡張子に従って画像をロードします。その赤い「x」は避けてください。

それが役に立てば幸い

0
RonaldPaguay