2009-12-02 20 views
15

Estoy tratando de agregar una imagen a un informe. La url de src de la imagen es IHttpHandler que toma algunos parámetros de cadena de consulta. He aquí un ejemplo:¿Cómo agregar una imagen a un informe de SSRS con una url dinámica?

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

que añade un imagen a una celda y luego configure Fuente al exterior y Valor a la siguiente expresión:

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

Pero cuando veo el informe , representa la imagen html como:

<IMG SRC="" /> 

¿Qué me estoy perdiendo?

actualización

Incluso si fijo Valor a "imagen.jpg" todavía rinde un atributo src vacía. No estoy seguro si hace una diferencia, pero estoy usando esto con un control ReportViewer VS 2008 en modo de procesamiento remoto.

actualización

yo era capaz de obtener las imágenes para mostrar en el Diseñador de informes (VS 2005) con una ruta absoluta (http://server/path/to/http/handler). Pero no se muestran en el sitio web del Administrador de informes. Incluso configuré un Unattended Execution Account que tiene acceso a las URL externas.

+0

Si se agrega un nuevo cuadro de texto en el informe y obtener que se muestre el resultado de la misma expresión (depuración en línea !!) lo que muestra? – BIDeveloper

+0

Buena idea, pero muestra la URL correcta. – jrummell

+0

¿Están ssrs y iis para la imagen en la misma caja? – jimconstable

Respuesta

4

Tengo un informe de SSRS que muestra la información acerca de los países de los usuarios de un sitio que apoyamos en el trabajo. Esto se basa en los datos de registro de IIS. En este informe, en la primera columna de la tabla hay un campo de imagen que contiene un pequeño .gif de la bandera de cada país. Me encontré con el mismo problema exacto descrito en la pregunta anterior. La ruta a la imagen externa se calculó en la consulta del informe en función del código de país. Inicialmente configuré la URL para señalar algo así como http://www.mystaticcontent.com/fotwimg/us.gif para una bandera de Estados Unidos, y así sucesivamente. Todo lo que obtuve fue una imagen roja X rota que se muestra en el informe. Luego encontré this MSDN article que arrojó algo de luz sobre el tema para mí.

Esto es lo que hice con el informe de hacer que funcione:

  1. Movido la carpeta fotwimg que tiene todos los gifs desde el servidor de contenido estático a la máquina SSRS local, que también tiene un servidor Web que se ejecuta en eso.
  2. Configure un directorio virtual en el sitio web predeterminado en el administrador de IIS de la máquina SSRS local.
  3. Entonces me cambiaron la consulta de informe para hacer referencia a la imagen en la máquina local, SSRS, por nombre de la máquina, como este http://mylocalssrsmachine/fotwimg/us.gif
  4. Voila, funciona ... o al menos a mí me funcionó.
+0

¡Gracias por la respuesta! Estaba tratando de evitar poner las imágenes en el servidor de informes. Quería mostrar miniaturas vinculadas a las imágenes a tamaño completo, pero terminé usando la acción de hipervínculo en un campo de texto normal. Tendré que recordar esto para la próxima vez que aparezca. – jrummell

+0

En SQL Server 2008, el servidor de informes ya no usa IIS. ¿Saben cómo/dónde instalar las imágenes en el servidor de informes? – Johann

2

¿Ha intentado utilizar una ruta completa?

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

More Info

+0

Sí, pude obtener las imágenes para mostrar en el Diseñador de informes (VS 2005) con una ruta absoluta. Pero no se muestran en el sitio web del Administrador de informes. – jrummell

2

Yo tengo este problema también ..

He examinado los registros de errores de SSRS y los registros del servidor de IIS. Algunos hallazgos:

  1. Las imágenes externas con URL a las imágenes estáticas funcionan. (por ejemplo, http://intranet/site/logo.jpg)
  2. Puedo agregar parámetros a las URL de imágenes estáticas y todavía funciona. (por ejemplo, http://intranet/site/logo.jpg?foo=1) El parámetro se ignorará y se mostrará la imagen. Esto sugiere que SSRS no se está ahogando en el?
  3. Si vinculo la imagen externa a una página ASPX que devuelve un informe sin parámetros (por ejemplo, http://intranet/site/image.aspx), todavía no funciona.
  4. Los registros IIS muestran el servidor de informes que solicita la imagen y obtienen una respuesta 200 OK.
  5. registros del servidor de informes demuestran esto:

    servidor web ReportServer_0-116 14cc 01/09/2012-12:!!! 20: 29 :: i INFO informe de Procesado. Report = '/ Path/ReportName', Stream = '' ui! ReportManager_0-115! 7b8! 01/09/2012-12: 20: 29 :: Excepción no controlada: System.Web.HttpException: El archivo no existe. en System.Web.StaticFileHandler.GetFileInfo (String virtualPathWithPathInfo, Cadena physicalPath, HttpResponse de respuesta)
    en System.Web.StaticFileHandler.ProcessRequestInternal (HttpContext contexto) en System.Web.DefaultHttpHandler.BeginProcessRequest (HttpContext contexto, AsyncCallback devolución de llamada, el estado del objeto) en System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() en System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, booleana & completedSynchronously)

me pregunto si SSRS es doi ¿Algo tan absurdo como agregar la extensión de archivo "correcta" antes de guardar el archivo?

es decir, algo así como (1) descargas de SSRS/página.aspx, que suministra una imagen con tipo de contenido: image/jpg; (2) SSRS guarda esto en una carpeta temporal con un nombre de archivo como tempname.aspx.jpg; (3) SSRS busca tempname.aspx para incorporar la imagen en el informe; (4) Error

Supongo que podría probar esto al manejar solicitudes .jpg en código subyacente ... Desafortunadamente eso está más allá de mis habilidades ASPX en este momento.

+0

alguna vez llegaste a encontrar la solución a esto? Mi imagen externa ha funcionado durante 6 meses. y ahora recibo la etiqueta IMG onerror = this.errored = true; rrored = "true" – BobNoobGuy

+0

@BobNoobGuy Lo siento, no. –

0

Mi caso: carga de localhost dependiendo del código del producto.

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

Problema: A veces archivo se carga con extensión" .png "; así que se necesita una validación FileExists.

Solución: 1) Añadir Auxiliar mesa

PRODUCT_PHOTO_EXTENSION

id (FK referencias de productos) extensión (varchar)

2) Crear procedimiento tienda. Hacer la validación FileExists en SQL y almacenar la extensión que se encuentra en 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) Cargar archivo de imagen utilizando este campo. (SSRS; expresión image.source)

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

4) Resultado: imagen de carga según que la extensión; evitar esa "x" roja.

creo que sirve

Cuestiones relacionadas