Modificando página resultado de la búsqueda de Sharepoint (All_Results).
En el artículo anterior configuramos y extendimos las propiedades de la búsqueda de Sharepoint 2007 en el Shared Service Provider (SSP). Agregamos una nueva propiedad a los metadatos del motor de búsqueda llamada “IdElemento” y le asignamos una propiedad rastreada de Sharepoint llamada “ows_ID”. También extendimos la propiedad “Filename” permitiendo que la misma sea utilizada para crear un ámbito de búsqueda.
Lo que vamos a realizar ahora es extender la página de resultado adicionando la nueva propiedad creada, la cual nos permitirá generar un link al formulario de edición de un documento cargado en una biblioteca de documentos. Queremos lograr poder acceder a la página donde podemos editar las propiedades de un documento cargado, dado que cuando la página de resultado muestra un documento, solo provee un link para acceder al mismo.
En la imagen 1 vemos la página de resultado que Sharepoint nos muestra cuando realizamos una búsqueda dentro de nuestro sitio, como se puede ver, se listan todos los documentos cargados en el portal y los links en estos resultados nos brindan la posibilidad de abrir el mismo.
|
|
Imagen 1
|
|
Lo primero que vamos hacer es configurar nuestra propiedad creada para que sea tenida en cuenta en el resultado de la pagina, para ello tendremos que acceder a la configuración de la WebPart editando la página.
Una vez editada la misma, vamos a modificar las columnas del Schema utilizada por la WebPart para mostrar el resultado y vamos agregar nuestra columna a dicha configuración, como se puede ver en la imagen 2, tenemos que acceder a la definición de las columnas.
Como podemos observar el editor de texto, es un editor simple donde se muestran todas las columnas cargadas. Lo que podemos hacer es copiar todo el contenido y editarlo utilizando un editor XML, podemos usar Sharepoint Designer, Visual Studio o cualquier editor que nos permita trabajar con archivos XML. Nosotros vamos a utilizar Visual Studio para poder modificar y agregar la nueva columna. Como se puede ver en la imagen 3 hemos pegado el contenido del editor de texto de Sharepoint en un documento XML llamado “Columnas.XML” en el Visual Studio.
|
Imagen 2
|
|
Imagen 3
|
|
Una vez que agregamos la nueva columna lo que debemos hacer es volver a colocar todo él contenido dentro de la definición de columnas de la WebPart utilizada para mostrar el resultado, ver imagen 2.
Lo que debemos hacer ahora es modificar el XSLT utilizado por la WebPart “CoreResultsWebPart” para mostrar el resultado de la búsqueda. Para realizar esta tarea podemos utilizar el Sharepoint Designer o el Visual Sudio.
En la figura 4 vemos como podemos editar el XSLT utilizando el Sharepoint Designer y modificar la pagina de resultado. El XSLT utilizado para mostrar los resultado está compuesto por varios template, nosotros vamos a modificar el template llamado “Result” que será invocado por cada ítem del resultado de la búsqueda: <xsl:template match="Result">………………… </xsl:template>
|
Imagen 4
|
|
Lo primero que tenemos que hacer es copiar el XSLT utilizado para poder editarlo y modificarlo, para lo cual tenemos que volver a editar la WebPart y acceder al XSLT, en la imagen 5 se puede ver cómo podemos realizar esta tarea.
|
Imagen 5
|
|
Una vez que tenemos copiado él XSLT lo pegamos en un documento XSLT en el Visual Studio para poder editarlo. Lo que vamos hacer es agregar un link al lado del título del documento para que nos permita editar las propiedades de cado uno.
Buscamos el temaplete llamado “Result” y colocamos el código necesario para construir el link. Dado que la ruta al formulario de la biblioteca de documento no nos es proporcionado por el resultado, lo que vamos hacer es construir dicho link utilizando una función JavaScript a la que le pasaremos la URL del documento y el ID proporcionado por nuestra propiedad.
A continuación vemos el código XSLT y la función JavaScript que vamos a colocar dentro del XSLT. En la figura 1 vemos el código del template modificado:
Figura 1
|
<xsl:template match="Result"> <xsl:variable name="id" select="id"/> <xsl:variable name="url" select="url"/> <span class="srch-Icon"> <a href="{$url}" id="{concat(‘CSR_IMG_’,$id)}" title="{$url}"> <img align="absmiddle" src="{imageurl}" border="0" alt="{imageurl/@imageurldescription}" /> </a> </span> <!–Funcion JavaScript para armar la URL hacia el formulario de edición–> <script type="text/javascript"> function GetUrlDispForm(strUrl, idEle) { var dispForm = strUrl.substring(0,strUrl.lastIndexOf("/")); dispForm += "/Forms/DispForm.aspx?ID="; dispForm += idEle; dispForm += "&Source="+ document.location.href window.navigate(dispForm); } </script> <span class="srch-Title"> <a href="{$url}" id="{concat(‘CSR_’,$id)}" title="{$url}"> <xsl:choose> <xsl:when test="hithighlightedproperties/HHTitle[. != »]"> <xsl:call-template name="HitHighlighting"> <xsl:with-param name="hh" select="hithighlightedproperties/HHTitle" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="title"/> </xsl:otherwise> </xsl:choose> </a> <!–XSLT agregado para cada uno de los elementos devueltos por la búsqeda Para llevar a cabo esto utilizmos una propiedad llamada isDocument que nos indica que el itme que estamos dibujando es un documento. –> <xsl:if test="isdocument=1"> <a> <xsl:attribute name="href"> javascript:GetUrlDispForm(‘<xsl:value-of select="url"/>’,<xsl:value-of select="idelemento"/>); </xsl:attribute> Editar </a> </xsl:if> </span> <xsl:choose> <xsl:when test="$IsThisListScope = ‘True’ and contentclass[. = ‘STS_ListItem_PictureLibrary’] and picturethumbnailurl[. != »]"> <div style=’padding-top: 2px; padding-bottom: 2px;’> <a href="{$url}" id="{concat(‘CSR_P’,$id)}" title="{title}"> <img src="{picturethumbnailurl}" alt="" /> </a> </div> </xsl:when> </xsl:choose> <div class="srch-Description"> <xsl:choose> <xsl:when test="hithighlightedsummary[. != »]"> <xsl:call-template name="HitHighlighting"> <xsl:with-param name="hh" select="hithighlightedsummary" /> </xsl:call-template> </xsl:when> <xsl:when test="description[. != »]"> <xsl:value-of select="description"/> </xsl:when> </xsl:choose> </div > <p class="srch-Metadata"> <span class="srch-URL"> <a href="{$url}" id="{concat(‘CSR_U_’,$id)}" title="{$url}" dir="ltr"> <xsl:choose> <xsl:when test="hithighlightedproperties/HHUrl[. != »]"> <xsl:call-template name="HitHighlighting"> <xsl:with-param name="hh" select="hithighlightedproperties/HHUrl" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="url"/> </xsl:otherwise> </xsl:choose> </a> </span> <xsl:call-template name="DisplaySize"> <xsl:with-param name="size" select="size" /> </xsl:call-template> <xsl:call-template name="DisplayString"> <xsl:with-param name="str" select="author" /> </xsl:call-template> <xsl:call-template name="DisplayString"> <xsl:with-param name="str" select="write" /> </xsl:call-template> <xsl:call-template name="DisplayCollapsingStatusLink"> <xsl:with-param name="status" select="collapsingstatus"/> <xsl:with-param name="urlEncoded" select="urlEncoded"/> <xsl:with-param name="id" select="concat(‘CSR_CS_’,$id)"/> </xsl:call-template> </p> </xsl:template>
|
|
Lo que nos resta ahora es volver a colocar todo el XSLT nuevamente a la WebPart para de resultado para que la modificación sea tenida en cuenta, para eso copiamos todo él XSLT del Visual Studio y lo volvemos a pegar en él editor, ver imagen 5. Una vez colocado el XSLT guardamos la modificación y salimos del modo de edición para que el cambio sea tenido en cuenta por Sharepoint. Volvemos a realizar la búsqueda y nos encontramos con que todos los resultados del tipo documento cuentan con un link para acceder a las propiedades, ver imagen 6
|
Imagen 6
|
|
En la siguiente imagen vemos como se despliega el formulario de edición de propiedades del documento al presionar el link “Editar”
|
Imagen 7
|
|
Lo que vamos hacer ahora es modificar la página avanzada de búsqueda, donde agregaremos una propiedad a los tipos de resultados provistos por la WebPart, que nos permitirá hacer búsquedas avanzadas utilizando esta propiedad. Editamos la página para acceder a las propiedades de la WebPart. Una vez en el modo de edición, del menú izquierdo editamos las propiedades cargadas de la sección de propiedades, una vez en el editor de texto, ver imagen 8, vamos agregar la propiedad “Filename” para que podamos realizar una búsqueda por dicha propiedad. Lo que tenemos que hacer es buscar la sección <PropertyDefs> e inmediatamente debajo de la propiedad “<PropertyDef Name="ModifiedBy" DataType="text" DisplayName="modificado por última vez por"/>” colocamos la definición de nuestra propiedad “<PropertyDef Name="Filename" DataType="text" DisplayName="Nombre del archivo" />”.
Una vez agregada la definición vamos a agregar la misma al tipo de resultado que queremos que aparezca, en nuestro ejemplo vamos a colocarlo dentro del tipo de resultado “<ResultType DisplayName="Todos los resultados" Name="default">”, para ello lo que hacemos es agregar la siguiente línea “<PropertyRef Name="Filename" />” inmediatamente después de la propiedad llamada “ModifiedBy”.
En la siguiente figura vemos como la nueva propiedad que acabamos de agregar al ComboBox de propiedades de la página avanzada de búsqueda es mostrada.
|
Imagen 8
|
|
En la siguiente imagen vemos él resultado devuelto por él motor de búsqueda utilizando la propiedad “Filename” con el texto “Prerequisites” cargado.
|
Imagen 9
|
|
|