lunes, 7 de noviembre de 2011

Infopath mostrar links como popup de sharepoint.

Sharepoint mejoró mucho la navegación con el uso de popups.
Para los que utilizamos InfoPath habilitado para web, nos llevamos la desilucion que los links se abren en una ventana nueva, cosa que funcionalmente hablando no es algo critico, pero por mantener el estándar de SharePoint, seria ideal que se consiga el mismo efecto con los formularios InfoPath.
Después de darle vueltas al tema y ya conociendo la función EditItem2 que SharePoint 2010 nos proporciona, la solución seria enfocado por ese lado.
La solución propuesta es una mala practica porque modifica archivos que no se recomienda tocar, porque genera problemas de escalabilidad porque cuando pasemos a la siguiente versión de Sharepoint 20**, ese archivo sera reemplazado, pero en el peor de los casos no deberá ocasionar problemas, solo que no tendrá el efecto que estamos implementando.
Sí con todas estas advertencias deseas continuar será bajo tu responsabilidas.
La idea es simple, mediante jquery reemplazar los href por onclick que invoque a la función EditItem2 propia de Sharepoint.
El código js la escribiremos en FormServer.aspx (ubicado en: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS) esto con la finalidad de hacer la solución lo mas general posible y la tengamos disponible para todos los formularios Infopath.
Noten también que estamos agregando 2 referencias a JQuery y que han sido colocados en la carpeta LAYOUTS, de esta formar estos archivos serán accesidos desde cualquier ubicación de Sharepoint.
Como en la pagina de FormServer.aspx, hay varios contenedores y no en todos queremos aplicar la conversion de href a onclick, definimos la región donde haremos la búsqueda. #FormControl__XmlFormView, ademas excluimos a los links que se utilizan para mostrar los calendarios.

Esto funciona de maravillas cuando carga, el problema es que si tenemos controles que hacen PostBack, esto deja sin efecto los cambios de href a onclick, para lo cual debemos volver a convertir los links.
Es aquí donde utilizamos la función everyTime, para que cada segundo busque algún link y haga el reemplazo correspondiente.

El resultado es el siguiente:

Aun hay cosas que pueden mejorarse, como colocar el código en un archivo y sólo hacer una referencia desde FormServer.aspx.
Espero esto solucione algún requerimiento o problema que tengan.

No hay comentarios:

Publicar un comentario