Arquitectura, buenas prácticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016

[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 🙂

mm

Sobre Adrián Díaz

Adrián Díaz es Ingeniero Informático por la Universidad Politécnica de Valencia. Es MVP de Microsoft en la categoría Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnologías Microsoft más de 10 años y desde hace 3 años está centrado en el desarrollo sobre SharePoint. Actualmente es Software & Cloud Architect Lead en ENCAMINA.
Esta entrada ha sido publicada en desarrollo, sharepoint 2013 y etiquetada como , , , . Enlace permanente .
Suscríbete a Desarrollando sobre SharePoint

Suscríbete a Desarrollando sobre SharePoint

Recibe todas las actualizaciones semanalmente de nuestro blog

You have Successfully Subscribed!

ENCAMINA, piensa en colores