La vista normal seria asi, el usuario hace clic en el elemento:
Al hacer clic se veria esto (página en blanco):
La solución que encontré, de nuevo no es la más óptima pero funciona, es modificar la página DispForm.aspx de dicha librería. Esto hara que al hacer clic en "Ver propiedades" de los elementos abra el Infopath.
Al crear la librería de documentos que contiene el InfoPath automáticamente te crea 2 páginas para mostrar las propiedades de los elementos (DispForm.aspx y EditForm.aspx), lo que vamos a hacer es incrustar un iframe dentro de DispForm.aspx para que se muestre el formulario seleccionado por medio de la ayuda de una función de javascript.Inicialmente la página DispForm.aspx muestra los campos que pueden ser editados desde SharePoint del campo seleccionado, por Url se envía el ID del elemento, sin embargo el ID no nos sirve de mucho ya que nosotros requerimos la url del InfoPath almacenado.

Como se ve en la imagen nosotros tenemos dentro de una tabla el nombre del formulario InfoPath, y eso es justo lo que necesitamos. Para ello usaremos javascript para obtener ese nombre y junto con la ruta de la librería formar la url del formulario que deseamos mostrar.
Abriremos nuestro SharePoint Designer en el sitio donde esta nuestra librería, nos vamos a la carpeta que genera, en este caso se llama Notificaciones.
Crear una copia de la página DispForm.aspx para tener un backup en caso de algún error y desprotegerla para comenzar a editar. Abrirla y agregar este código en la parte de arriba justo debajo del primer <table> que se crea:
<tr><td><iframe marginwidth="0" marginheight="0" id="marco" src="" frameborder="0" width="99%" scrolling="no" height="600"></iframe></td></tr>Lo que estamos haciendo es crear un iframe que será contenedor del formulario de InfoPath. Debajo de nuestro código estarán los valores que se muestran en la página, si nosotros no queremos que nuestros usuarios vean esa tabla hay que agregar un div para hacerlos invisibles quedando de esta forma:
<div style="display:none">
<WebPartPages:WebPartZone
…..
</WebPartPages:WebPartZone>
<div>Asi conseguimos que el webpart que muestra la tabla con los campos editables por SharePoint sea invisible para el usuario.
Lo que nos quedaría sería obtener el nombre del formulario, formar la url completa y hacer que el iframe lo abra, para eso debemos poner este código de javascript justo antes del tag </table> que cierra la tabla de html.
<tr><td> <script>
infopath = document.getElementById("formTbl").rows[0].cells["SPFieldFile"].innerHTML;
infopath = infopath.substring(infopath.indexOf("href=")+6,infopath.indexOf(".xml")+4);
if (document.getElementById("formTbl").rows.length > 0)
{
nextUrl = "http://servidor/_layouts/FormServer.aspx?XmlLocation="
+infopath+
"&Source=http://servidor/Libreria/Forms/AllItems.aspx&DefaultItemOpen=1";
document.getElementById("marco").src = nextUrl;
}
</script></td></tr>
Este script busca el id SPFieldFile que contiene el nombre de nuestro InfoPath y después generemos la URL para pasársela al Iframe llamado “marco” a su propiedad src. No olvides cambiar el servidor por el nombre de tu servidor.
Guardamos y el resultado es:
El formulario se muestra dentro de la pagina DispForm.aspx la cual tiene la apariencia de nuestro sitio y al cerrar el formulario se va a la pagina que hemos puesto en el código de javascript con el parámetro &Source.
Ahora solo nos faltaria crear una vista para que no sea necesario hacer clic en el menu del elemento, pero eso lo dejamos para otro post.
Saludos.



No hay comentarios:
Publicar un comentario