SharePoint no es tan difícil como mucha gente lo ve, es más, el hecho de que en muchas ocasiones la herramienta nos facilite tanto las cosas, hace que no se valore como toca a los SharePoint Developers. A la hora de empezar con nuestros desarrollos, la plataforma nos proporciona diversos «controles» que se utilizan «Out of the box» como por ejemplo, DataTimePicker, PeoplePicker o el TaxonomyWebTagging. En el post de esta semana vamos a intentar desgranar cómo podemos utilizar este último control en nuestros desarrollos.
¿Que es el TaxonomyWebTaggingControl?
El TaxonomyWebTaggingControl es el control que utiliza SharePoint de serie para poder añadir elementos al almacén de Términos dentro de un formulario. La Taxonomía fue un «artefacto» que surgió en la versión de 2010 y entre las muchas utilidades que tiene sirve para poder clasificar diversos elementos de SharePoint (documentos, paginas,…).
Requisitos previos
Para poder utilizarlo bien estamos desarrollando un WebPart tradicional o bien un User Control dentro de un desarrollo con ASP.NET tradicional.
¿Cómo utilizarlo?
Para empezar a utilizarlo dentro de nuestra vista del UserControl tenemos que registrar este componente de la siguiente forma (dependiendo de la versión de SharePoint con la que se este trabajando el PublicKeyToken y la Versión varia):
<%@ Register TagPrefix="Taxonomy" Namespace="Microsoft.SharePoint.Taxonomy" Assembly="Microsoft.SharePoint.Taxonomy, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
Una vez registrado ya lo podemos utilizar dentro del UserControl:
<Taxonomy:TaxonomyWebTaggingControl ID="txtTaxonomy" runat="server" />
Solamente con añadir estas lineas ya se visualiza este control en nuestro desarrollo, ahora los siguientes pasos que nos quedan son, por un lado, configurar este control para poder seleccionar los datos de nuestro almacén de Términos, y por otro lado, también tenemos que saber cómo obtener y escribir los datos de la taxonomía en nuestro control.
Configurando el control
Para poder configurar el TaxonomyWebTaggingControl, tenemos que irnos a la parte del code-behind y en el evento load (o en el lugar que se considere oportuno) asignar estas propiedades:
- SSPList: El Id del almacén de Términos (en rojo en la imagen 1)
- TermSetList: El Id del TermSet sobre el que queremos visualizar los datos (en azul en la imagen 1)
- GroupId. El Id del Grupo que debemos mostrar (en negro en la imagen 1)
A parte de esta configuración este Control dispone de muchas más propiedades útiles como por ejemplo: IsDisplayPickerButton (para mostrar el botón de seleccionar Taxonomia), Multi (permitir más de un valor), AddInFill: Permite añadir más elementos a la Taxonomia …
Con este función podemos configurar por ejemplo el TaxonomyTaggingControl:
public static void LoadTaxonomy(TaxonomyWebTaggingControl taxonomy) { var session = new TaxonomySession(SPContext.Current.Site); taxonomy.IsAddTerms = true; taxonomy.AllowFillIn = true; taxonomy.IsMulti = true; taxonomy.IsDisplayPickerButton = false; taxonomy.SSPList = session.TermStores[0].Id.ToString(); taxonomy.TermSetList = session.TermStores[0].Groups[Constant.Taxonomy.Group].TermSets[Constant.Taxonomy.Tag].Id.ToString(); taxonomy.GroupId = session.TermStores[0].Groups[Constant.Taxonomy.Group].Id; }
Una vez ya tenemos configurado el Control, ya tenemos toda la funcionalidad que viene de serie como es el AutoCompletar, sugerencias, selección de terminos,… como podemos ver en esta imagen:
Ahora bien, el siguiente paso es poder utilizar la información de este Componente bien para cargar la información que tenemos en la lista, bien para añadir esta información a la lista.
Obtener la información del Control
Para obtener la información del control tenemos que consultar la propiedad Text del Control. Dentro del valor Text tenemos para empezar el nombre de dicho Término y a continuación el Guid del Term. Con esta información ya podemos almacenar estos datos en un campo de tipo Taxonomia. En nuestro caso particular nos hemos definido una clase con dos propiedades Key y Value donde almacenamos esta información para utilizarla posteriormente.
if (string.IsNullOrEmpty(taxonomy.Text)) return null; var listTaxonomy = taxonomy.Text.Split(';'); var tagsList = listTaxonomy.Select(items => items.Split('|')) .Select(value => new Userd {Key = value[1], Value = value[0]}) .ToList(); return tagsList;
Establecer valores en el Control
Para establecer los valores al control deberemos de asignar una cadena de Texto con el siguiente formato «GUID|Texto del Termino». En caso de que tengamos más de un valor los terminos se separan por ;.
Ejemplo:
var tagsTaxonomy= Tags.Aggregate(string.Empty, (current, tags) => current + string.Format("{0}|{1};", tags.Value, tags.Key)); txtTaxonomy.Text = tagsTaxonomy;
Nota: En nuestro ejemplo la variable Tags es una lista con la clase introducida anteriormente donde tenemos los elementos de la Taxonomía que queremos asignar al control.
Conclusión
De las cosas bastantes positivas que tiene SharePoint es que todo lo que tiene la herramienta Out Of the Box lo podemos utilizar dentro de nuestros desarrollos. Esto tiene una cosa muy positiva y es que sin realizar mucho esfuerzo, ya disponemos de varios componentes muy útiles. El utilizar estos componentes nos ahorra mucho trabajo y nos facilita las cosas, pero hay que saber muy bien si estos componentes tienen algún tipo de bug o consumen más recursos de los necesarios. Sin ir más lejos en la versión 2010/2007 había un Control para los Menus para la selección de los idiomas que tenia un elevado número de peticiones sin sentido a la base de datos de contenido.