Categorías: desarrollo sharepoint 2013

[SharePoint 2013] Modificar los valores de configuración de los WebParts dinámicamente

SharePoint como herramienta de desarrollo es una plataforma muy versátil y que permite muchas variantes. Recientemente hemos tenido que dotar una solución un tanto particular que como resultado ha tenido este post. Esta solución me parece muy útil y que se puede extender en muchos desarrollos.

Caso de Uso

Tenemos una página en la que mostramos diversos webParts de tipo XSLTViewWebPart con los elementos de una lista de SharePoint. Imaginad el caso base tenemos una página de artículos en la que por un lado vemos los artículos que tenemos en el almacén, los artículos que tenemos en cada tienda, los precios de compra y de venta y por ejemplo las reservas. En base a este diseño (que no vamos a discutir si es la mejor opción o no) tenemos que implementar «algo» que filtre sobre todos estos elementos.

Posibilidades

  1. Rehacer lo todo, abandonar los XSLT y utilizar por ejemplo los Display Templates que hay o bien otra herramienta como pueda ser Mustache
  2. Duplicar los XSLT por tantas opciones queramos poner y ocultar los webparts mediante JavaScript.
  3. Modificar los valores de los XSLT y adecuarlos a las peticiones de los usuarios

Analizando las posibilidades

La opción 2: descartada por muchos motivos, rendimiento, poco profesional, ñapa o como lo queráis definir… lo veis todo no?

La opción 1: esta clara que es la mejor opción, es la opción que hace que nuestro producto sea más escalabre, más reutilizable y mas adaptado a las necesidades futuras del cliente. Pero hay diversos elementos que pueden hacer que no la podamos hacer. Por ejemplo requerimientos del cliente, tiempos, esas cosas que nos encontramos en nuestro día a día y que tenemos que vivir más de lo que nos gustaría.

La opción 3: Cuya principal ventaja es que aprovechamos todo el desarrollo previo, ahora bien la dificultad radica en saber como podemos cambiar estos valores por defecto una vez la página esta cargada. La respuesta es que podemos cambiar el valor de los WebParts y de hay este post.

Manos a la obra 
Para modificar el valor vamos a implementar un WebPart Visual en la que utilizaremos el modelo de objetos servidor de SharePoint.

El primer paso es una vez carga la página recorremos los WebParts que tiene la página de la siguiente forma:

 foreach (System.Web.UI.WebControls.WebParts.WebPart webPart in this.WebPartManager.WebParts)
 {

 }

El siguiente paso que tenemos que hacer es dentro de estos WebParts tendremos que encontrar los que son de tipo XSLTViewWebPart porque en una página podemos encontrarnos cualquier tipo de WebPart. Una vez tenemos un WebPart del tipo XSLTViewWebPart el siguiente paso es sobreescribirle el evento DataBinding, que lo que hace es en el momento que el WebPart va a cargar los datos lo que tenemos que hacer es lo que nosotros le indicamos en este evento. Naturalmente en este evento lo que nosotros vamos ha hacer es pasarle nuestra consulta CAML que necesitamos.
Un ejemplo de ese código

   xsltListViewWebPart.DataBinding += new EventHandler(xsltListViewWebPart_DataBinding);
 void xsltListViewWebPart_DataBinding(object sender, EventArgs e)
        {
            if (xsltListViewWebPart != null)
            {
                SPDataSource ds = xsltListViewWebPart.DataSource as SPDataSource;
                if (ds != null)
                {

                    string query = @"" + @"reserva prueba sso" +
                          @"";
                    string xmlSelectCommand = string.Empty;
                    XmlDocument viewXmlDoc = new XmlDocument();
                    viewXmlDoc.LoadXml(ds.SelectCommand);
                    XmlNode queryNode = viewXmlDoc.DocumentElement.SelectSingleNode("Query");
                    queryNode.InnerXml.Remove(0);
                    //txtActivo.Text ="text"+ queryNode.InnerXml;
                    queryNode.InnerXml = query;
                    xmlSelectCommand = viewXmlDoc.OuterXml;
                    ds.SelectCommand = xmlSelectCommand;

                    xsltListViewWebPart.DisableColumnFiltering = true;
                }
            }
        }

Conclusión

Esta forma de modificar las propiedades de los WebParts nos brinda bastantes oportunidades para extenderlo en algunas ocasiones donde hay que reaprovechar el desarrollo previo o bien utilizar los WebParts de SharePoint pero dotarles de un funcionamiento extra. En este ejemplo lo hemos modificado sobre un XSLTViewWebPart, pero es igual de sencillo realizarlo sobre cualquier otro tipo de WebPart. Como cada vez que se nos presenta un nuevo reto lo bonito es encontrar la solución para solventarlo y en esta ocasión podemos decir que cumplimos con las expectativas 🙂

Compartir
Publicado por
Adrián Díaz

Este sitio web utiliza cookies para que tengas la mejor experiencia de usuario. Si continuas navegando, estás dando tu consentimiento para aceptar las cookies y también nuestra política de cookies (esperemos que no te empaches con tanta cookie 😊)