SharePoint 2010. 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.

 

Saludos a todos…

SkyDrive Pro. Sincroniza tus bibliotecas de SharePoint

La RTM de Office 2013 y SharePoint 2013 se acerca y ayer la publicaron para suscriptores de MSDN y Technet. En Office viene un nuevo, pero conocido, producto llamado SkyDrive Pro. Este nos permite, con la misma filosofía que el sincronizador de SkyDrive, mantener sincronizadas las bibliotecas de SharePoint, y si NO pongo versión de SharePoint es porque hoy me he sorprendido y lo he conectado al SharePoint 2010 de mi empresa y ha empezado a sincronizar la biblioteca que le he especificado.

 

Como en SharePoint 2010 no tenemos ningún enlace para SkyDrive Pro, como si lo tenemos en SharePoint 2013, para sincronizar podemos especificarle manualmente la URL de la biblioteca.

 

Si utilizamos el actual botón de Sincronizar con SharePoint Workspace, descubriremos que se ejecutará el configurador de SkyDrive Pro que nos preguntará que bibliotecas, de las que tengamos disponibles queremos sincronizar.

 

 

Para los que hemos usado SharePoint Workspace, la simplificación de la sincronización utilizando SkyDrive es un gran avance y un motivo más para usar SharePoint como gestor documental.

 

Saludos a todos…

Evento. Lanzamiento de Visual Studio 2012

Aunque seguimos con la resaca del Megathon, se nos ha ocurrido la brillante, pero copiada, idea de hacer el Lanzamiento de Visual Studio 2012. Siguiendo con la idea de MadridDotNet, hemos preparado unas píldoras de sesiones para enseñaros las múltiples novedades que nos trae la nueva versión del IDE.

 

Entre todas las sesiones, me han tocado las siguientes:

Novedades de Visual Studio 2012

Veremos que nos trae de nuevo el IDE, la interoperabilidad con los proyectos de Visual Studio 2010, el explorador DOM para aplicaciones web, cambios con el control de código, y algunas otras cosas más que podamos ver en 30 minutos.

Windows Phone

Si el equipo de producto nos lo permite, veremos el nuevo SDK de Windows Phone y todas las novedades que nos trae a nivel de código y emulador.

Un evento para no faltar, por su puesto, al terminar nos iremos a la última sesión de networking de cervezas vs2012.

Para asistir, es necesario que os registréis en el siguiente enlace, ya que tenemos plazas limitadas.

Os esperamos a todos…

CompartiMOSS en Windows 8

Aprovechando que se ha publicado un nuevo número de nuestra revista favorita de SharePoint, CompartiMOSS, se ha publicado la aplicación oficial en Windows 8. La idea es poder consultar los números, los artículos y sus autores desde Windows, así como poder leer los artículos desde esta. Se la pueden descargar en la tienda de Windows.

 

Con esta primera versión, hemos implementado las siguientes funcionalidades:

Consulta de todos los números publicados

 

Portada, editorial y enlace al documento pdf de la revista

Listado de artículos y sus autores

Compartir un número

Búsqueda de un artículo o autor

 

Esperamos vuestra opinión y peticiones de nuevas funcionalidades, nosotros estamos pensando en las siguientes:

  • Lectura inline de los artículos. Poder leer los artículos sin necesidad de descargar el PDF.
  • Perfiles de los autores. Tener información de los autores de los artículos.
  • Notificación de publicación para nuevos números.

 

Saludos a todos…

Windows 8. Cache de navegación como en Windows Phone

Todos los que hemos desarrollado en Windows Phone, conocemos el sistema de navegación de páginas y mecanismo de cache que almacena las páginas para que cuando se vuelva atrás, no se tenga que volver a cargar y se muestre la página cacheada. Este mismo procedimiento lo esperamos cuando desarrollamos en Windows 8, y nos encontramos que no se comporta de este mismo modo.

Por defecto, Windows 8 tiene deshabilitada la cache de páginas y cuando habilitamos la misma, usando la plantilla LayoutAwarePage, es capaz de guardar el estado de la página, pero no detecta cuando la página es nueva y, por definición, siempre muestra la página que tiene cacheada. Os pongo un ejemplo, a ver si me explico:

  1. Iniciamos nuestra aplicación
  2. Navegamos a una página que carga los álbumes de fotos locales.
  3. Navegamos atrás, al inicio de nuestra aplicación.
  4. Volvemos a la misma página de álbumes de fotos locales y comprobamos que la cache funciona correctamente porque no vuelve a cargar nada.
  5. Navegamos a la página de inicio.
  6. Ahora, navegamos a la página de álbumes, pero esta vez cargamos los álbumes que tenemos en SkyDrive. PROBLEMA. La cache ha actuado correctamente, vemos los álbumes locales y NO los de SkyDrive.

¿Por qué nos pasa esto?

Cuando habilitamos la cache, usando el Page.NavigationCacheMode, el LayoutAwarePage comprueba, en el método OnNavigatedTo, que vengas de una página cacheada y no realiza la carga del LoadState, aunque la página venga de un Back.

protected override void OnNavigatedTo(NavigationEventArgs e)


{


// Returning to a cached page through navigation shouldn't trigger state loading


if (_pageKey != null) return;


 

….


}


 

¿Cómo lo solucionamos?

Como lo que estamos buscando es tener cache, siempre y cuando la página venga de un Back, tendremos que corregir este If como sigue:

protected override void OnNavigatedTo(NavigationEventArgs e)


{


// Returning to a cached page through navigation shouldn't trigger state loading


if (_pageKey != null && e.NavigationMode == NavigationMode.Back) return;


 

….


}


Así, solo utilizaremos la página cacheada siempre que vengamos de un Back y no, por ejemplo, cuando es una página nueva.

 

Saludos a todos…