WSS 3.0 & MOSS: Como eliminar los enlaces en campos de lookup!

Como se suele decir, nunca te acostarás sin aprender algo nuevo…y este dicho tan popular, en el caso de SharePoint encaja a la perfección. Esta semana, entre otras peticiones que nos han hecho en un proyecto de SharePoint, ha habido una que me ha dado algún que otro quebradero de cabeza: como eliminar los enlaces en campos de lookup cuando estamos visualizando un ítem de lista.

El problema o necesidad

Como sabéis, SharePoint permite, entre otras muchas cosas, almacenar información de lo más variopinta…pero siempre en un modo no relacional, aunque se puede simular un escenario de almacenamiento de información vinculada utilizando los campos de lookup que permiten añadir en una lista información vinculada procedente de otra:

image image

En este caso, los campos de lookup definidos en la lista están dados por Cliente y Producto, y lo que sucede es que cuando usamos campos de lookup en listas de SharePoint, estos se renderizan en modo display en la forma de enlaces que apuntan a la lista origen de dónde toman su valor. Esto ocurre tanto cuando mostramos el listado de elementos de la lista, como cuando visualizamos un ítem concreto…la cuestión es, ¿cómo podemos quitar estos enlaces en la página de visualización de un ítem? ¿se puede hacer? Como siempre, y tras un rato de pruebas, la respuesta es que sí.

La solución

Para poder cumplir con este requerimiento, lo que tenemos que hacer es abrir nuestro sitio de SharePoint con SharePoint Designer 2007 (SD 2007) y buscar el formulario de visualización de la lista en cuestión (el DisPlay form):

image

Nos vamos a la vista de código del formulario y después de placeholder principal, añadimos el siguiente código JavaScript:

<!–Eliminar enlaces campos de lookup – CIIN 30/02/2009–>

<script language="javascript" type="text/javascript">

 

_spBodyOnLoadFunctionNames.push("RemoveLookupLinks");

function RemoveLookupLinks()

{

var oP = document.getElementsByTagName(‘a’);//the collection of <a> tags

 

for(var i=0;i<oP.length;i++)

                        {                     

                        if(oP[i].attributes["href"].value.indexOf("RootFolder=*")!= -1)

                                               {                                             

                                               var linkvalue = oP[i].innerHTML

                                               if(oP[i].parentNode.innerHTML.indexOf(‘FieldName="Cliente"’)!=-1)

                                                                       {                                                                    

                                                                       oP[i].parentNode.innerHTML = linkvalue

                                                                       }                                             

                                               }                                             

                        }

}

</script>

<!–Eliminar enlaces campos de lookup – CIIN 30/02/2009–>

Básicamente lo que estamos haciendo con el código anterior es:

  • Añadir la función RemoveLookupLinks a la pila de funciones JavaScript que carga SharePoint mediante la llamada a _spBodyOnLoadFuncionNames.push().
  • En la función RemoveLookupLinks():
    • Buscamos todos aquellos elementos que sean de tipo <a, y que por lo tanto definan un hipervínculo.
    • Nos recorremos los elementos de tipo <a y nos fijamos simplemente en aquellos que contienen RootFolder=* y que se corresponden con campos de Lookup.
    • Cogemos el HTML almacenado, y lo utilizamos para reemplazar todo el HTML contenido en el nodo padre, de manera que reemplazamos el valor del campo de lookup con hipervínculo por ese valor, pero sin hipervínculo.

Si guardamos y refrescamos el formulario de visualización veremos que el código JavaScript ha cumplido con su cometido a la perfección (en este caso, hemos eliminado uno de los enlaces):

image 

Y hasta aquí llega este pequeño tip sobre los campos de lookup de SharePoint. Espero que el post os haya resultado interesante.