jueves, 7 de marzo de 2013

Crear definición de columnas de Metadata desde código

Como todos sabéis, desde Visual Studio podemos crear listas, tipos de contenido y columnas de sitios, que definan nuestra solución y que nos genere un paquete que permita hacer el despliegue en múltiples granjas. También, con este tipo de soluciones, tendremos un control de versiones, utilizando TFS o similar, de nuestro proyecto.

Entre los tipos de columnas que podemos crear, tenemos las columnas de taxonomía o metadatos administrados, que son aquellas que permiten a los usuarios clasificar la información usando la taxonomía empresarial y sus conjuntos de términos.

La mejor forma de crear la definición de estas columnas, de forma declarativa en Visual Studio, es usar el tipo TaxonomyFieldType o TaxonomyFieldTypeMulti, junto a un Event Receiver, cuando se activa la característica, que localiza el conjunto de términos en el servicio de metadatos administrados y lo asocia a la definición de la columna, resumiendo:

Definimos la columna de sitio


<Field ID="{00000000-0000-0000-0000-000000000000}" Type="TaxonomyFieldType" Name="Organismo" DisplayName="Organismo" ShowField="Term1033" Required="FALSE" Group="Columnas Gestión documental"></Field>

Asociamos el conjunto de términos a la columna cuando se activa la característica


SPSite site = properties.Feature.Parent as SPSite;

Guid fieldId = new Guid("{A3AFED68-C20D-4157-81DF-0DCF422853F1}");

if (site.RootWeb.Fields.Contains(fieldId))

{

TaxonomySession session = new TaxonomySession(site);



if (session.TermStores.Count != 0)

{

var termStore = session.DefaultKeywordsTermStore;

var group = termStore.Groups.GetByName("Gestion documental");

var termSet = group.TermSets["Organismos"];



TaxonomyField field = site.RootWeb.Fields[fieldId] as TaxonomyField;



// Connect to MMS

field.SspId = termSet.TermStore.Id;

field.TermSetId = termSet.Id;

field.TargetTemplate = string.Empty;

field.AnchorId = Guid.Empty;

field.Update();

}

}



Para asociar el conjunto de términos, tenemos que acceder al almacenamiento de términos (TermStore), mediante una sesión de Taxonomía (TaxonomySession), obtener el grupo que le corresponda y el conjunto de términos que le vamos a asociar. Todo esto agregando la referencia al ensamblado Microsoft.SharePoint.Taxonomy.

No hay comentarios:

Publicar un comentario