viernes, 18 de febrero de 2011

GoogleBot no tiene idioma

Sintomas:
Una página dinámica que se visualiza correctamente en los exploradores no es leida por googlebot.
Causa:
Parece ser que Googlebot no suministra idioma a la página como hacen casi todos los exploradores.
En el caso de la página en cuestión el código consultaba la colección Request.UserLanguages para establecer el lenguaje por defecto.
Antes de consultar realizaba una comprobación erronea de que la lista no estaba vacía:
if infoASPX.Request.UserLanguages.Count > 0
Digo que era erronea porque la sentencia correcta es:
if infoASPX.Request.UserLanguages isnot nothing andalso infoASPX.Request.UserLanguages.Count > 0

Esos pequeños detalles.
Comentarios:
Lo cierto es que era frustrante, descubrí el problema cuando ví que no se indexaba esta porción de nuestro sitio. Afiné el fallo cuando probé con las herramientas para webmaster de Google. Al verificar la conformidad HTML con http://validator.w3.org/  obtuvé error 500.
Siguiendo la traza de errores con la utilidad correspondiente de IIS7.5 comprobé que solo había errores cuando accedía con GoogleBot y el validator.
Luego descubrí que si el idioma estaba establecido con un parametro en el querystring el error no aparecía y tirando del hilo.....

miércoles, 9 de febrero de 2011

Dar permisos a un usuario para enviar en nombre de un grupo en Exchange 2010

Objetivo:
Que un usuario pueda enviar en nombre de un grupo (send on behalf of).
Solución:
En exchange power shell usar:
Set-DistributionGroup GroupName -GrantSendOnBehalfTo UserName

Por supuesto el usuario deberá saber visualizar en Outlook en campo De de un mensaje.
Comentarios
Creo que la opción desapareció en el interfaz gráfico de exchange 2010.
Un aspecto interesante es que si quieres que todos los miembrosdel grupo puedan enviar en nombre del grupo puedes escribir:
Set-DistributionGroup GroupName -GrantSendOnBehalfTo GroupName

jueves, 3 de febrero de 2011

Subinformes RDLC en report cargado dinámicamente.

Sintomas
Creas un informe RDLC con subreports mediante visual studio.
Cargas dinámicamente el informe pero se produce un error al cargar el subinforme.
No encuentra el archivo.
Por otro lado ¿Cómo cargas los datos del subinforme.
Soluciones:
Debes cargar dinámicamente con loadsubrepordefinitión el subinforme utilizando como nombre del report el Reportname (el que rellenas en usar este informe como subinforme de las propiedades) y no el  del subinforme dentro del informe.
Ejemplo:
Dim informe As New LocalReport
Dim lector As New System.IO.StreamReader(My.Request.PhysicalApplicationPath + "\ListadoOrgsProd.rdlc")
informe.LoadReportDefinition(lector)
lector.Close()
lector = New System.IO.StreamReader(My.Request.PhysicalApplicationPath + "\ListadoProd.rdlc")
informe.LoadSubreportDefinition("ListadoProd.rdlc", lector)
lector.Close()
AddHandler informe.SubreportProcessing, AddressOf infoParametros

Por cierto que en la última línea se resuelve como establecer los datos de subinforme: hay que hacer establecer mediante addHandler la referencia a un procedimiento que se dispará cuando vaya a procesarse el informe:

Sub infoParametros(ByVal sender As Object, ByVal e As SubreportProcessingEventArgs)
     e.DataSources.Add(New ReportDataSource("dsProductos", datosProd))
End Sub