2009-12-02 13 views
15

Sto tentando di aggiungere un'immagine a un rapporto. L'URL immagine src è un IHttpHandler che accetta alcuni parametri di stringa di query. Ecco un esempio:Come aggiungere un'immagine a un rapporto SSRS con un URL dinamico?

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

ho aggiunto un immagine ad una cellula e quindi impostare Fonte per esterno e valore alla seguente espressione:

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

Ma quando ho vista la relazione , restituisce l'immagine html come:

<IMG SRC="" /> 

Cosa mi manca?

Aggiornamento

Anche se ho impostato valore a "image.jpg" rende ancora un attributo src vuota. Non sono sicuro se faccia la differenza, ma lo sto utilizzando con un controllo ReportViewer VS 2008 in modalità di elaborazione remota.

Aggiornamento

sono stato in grado di ottenere le immagini da mostrare nella Progettazione report (VS 2005) con un percorso assoluto (http://server/path/to/http/handler). Ma non sono stati visualizzati sul sito Web di Gestione report. Ho persino creato uno Unattended Execution Account che ha accesso agli URL esterni.

+0

Se si aggiunge una nuova casella di testo sul rapporto e farlo per visualizzare il risultato della stessa espressione (debugging on-line !!) Che cosa mostra? – BIDeveloper

+0

Buona idea, ma visualizza l'url corretto. – jrummell

+0

Sono presenti ssrs e iis per l'immagine nella stessa casella? – jimconstable

risposta

4

Ho un rapporto di SSRS che visualizza le informazioni sui paesi degli utenti di un sito che sosteniamo al lavoro. Questo si basa sui dati del registro di IIS. In questo rapporto, nella prima colonna della tabella c'è un campo immagine che contiene un piccolo .gif della bandiera per ogni paese. Stavo incontrando lo stesso esatto problema descritto nella domanda sopra. Il percorso dell'immagine esterna è stato calcolato nella query del report in base al codice paese. Inizialmente ho impostato l'URL per indicare qualcosa come http://www.mystaticcontent.com/fotwimg/us.gif per una bandiera degli Stati Uniti e così via. Tutto quello che ho ottenuto era un'immagine X spezzata rossa visualizzata nel rapporto. Poi ho trovato this MSDN article che ha fatto luce sul problema per me.

Questo è quello che ho fatto con la relazione per farlo funzionare:

  1. Spostata la cartella fotwimg che ha tutte le gif dal server contenuto statico alla macchina SSRS locale, che ha anche un web server in esecuzione su di essa.
  2. Impostare una directory virtuale sul sito Web predefinito nel gestore locale di SSRS Gestione IIS.
  3. Poi ho cambiato la query report per fare riferimento all'immagine nella macchina SSRS locale, il nome della macchina, come questo http://mylocalssrsmachine/fotwimg/us.gif
  4. Voila, funziona ... o almeno ha funzionato per me.
+0

Grazie per la risposta! Stavo cercando di evitare di inserire le immagini sul server di report. Volevo visualizzare le miniature collegate alle immagini a dimensione intera, ma alla fine ho utilizzato l'azione del collegamento ipertestuale su un normale campo di testo. Dovrò ricordarlo per la prossima volta che verrà fuori. – jrummell

+0

In SQL Server 2008, Report Server non utilizza più IIS. Ragazzi, sapete come/dove installare le immagini sul server di report? – Johann

2

Hai provato a utilizzare un percorso completo?

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

More Info

+0

Sì, sono riuscito a visualizzare le immagini nella Progettazione report (VS 2005) con un percorso assoluto. Ma non sono stati visualizzati sul sito Web di Gestione report. – jrummell

2

Ho anche questo problema ..

Ho guardato i log degli errori SSRS, ed i log del server IIS. Alcuni risultati:

  1. Le immagini esterne con immagini statiche funzionano. (ad esempio http://intranet/site/logo.jpg)
  2. Posso aggiungere parametri a URL di immagini statiche e funziona ancora. (ad esempio http://intranet/site/logo.jpg?foo=1) Il parametro verrà ignorato e l'immagine verrà visualizzata. Questo suggerisce che SSRS non soffoca sul?.
  3. Se collego l'immagine esterna di una pagina ASPX che restituisce un rapporto senza parametri (ad esempio http://intranet/site/image.aspx), che ancora non funziona.
  4. I registri IIS mostrano il server di report che richiede l'immagine e ricevono 200 risposte OK.
  5. i log del server di report mostrano questo:

    webserver ReportServer_0-116 14cc 01/09/2012-12:!!! 20: 29 :: i INFO: report elaborato. Rapporto = '/ percorso/ReportName', Stream = '' ui ReportManager_0-115 7b8 01/09/2012-12:!!! 20: 29 :: Eccezione non gestita: System.Web.HttpException: Il file non esiste. a System.Web.StaticFileHandler.GetFileInfo (String virtualPathWithPathInfo, String physicalPath, HttpResponse risposta)
    a System.Web.StaticFileHandler.ProcessRequestInternal (HttpContext contesto) a System.Web.DefaultHttpHandler.BeginProcessRequest (HttpContext contesto, AsyncCallback callback, oggetto di stato) a System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() a System.Web.HttpApplication.ExecuteStep (IExecutionStep passo, booleano & completedSynchronously)

mi chiedo se SSRS è doi ng qualcosa con la testa di ossa come aggiungere l'estensione di file "corretta" prima di salvare il file?

vale a dire una cosa del genere (1) SSR download /Page.aspx, che fornisce un'immagine con Content-Type: image/jpg; (2) SSRS lo salva in una cartella temporanea con un nome di file come tempname.aspx.jpg; (3) SSRS cerca tempname.aspx per incorporare l'immagine nel report; (4) Errore

suppongo che si possa verificare questo la gestione delle richieste .jpg in code-behind ... Purtroppo questo è di là delle mie capacità ASPX al momento.

+0

hai mai trovato la soluzione a questo? La mia immagine esterna ha funzionato per 6 mesi. e ora ottengo il tag IMG onerror = this.errored = true; rrored = "true" – BobNoobGuy

+0

@BobNoobGuy Spiacente, no. –

0

Il mio caso: caricare da localhost in base al codice del prodotto.

Image.Source = "http: // LOCALHOST/IMG /"! + I campi CODE.value + ".jpg"

Problema: A volte file viene caricato con l'estensione" .png "; quindi è necessaria una convalida di FileExists.

Soluzione: 1) Aggiungere auxiliar tavolo

PRODUCT_PHOTO_EXTENSION

id (FK riferimenti PRODUCT) estensione (varchar)

2) Create Procedure Store. Fare la convalida FileExists su SQL e memorizzare l'estensione trovata in 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) file d'immagine di carico utilizzando questo campo. (SSRS; espressione image.source)

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

4) risultati: immagine di carico secondo l'estensione; evita quella "x" rossa.

Speranza che aiuta

Problemi correlati