Hace unos días configurando un entorno de intranet en SharePoint Online me encontré con la necesidad de crear una columna de tipo Metadatos Administrados (Managed Metadata). Para crear esta columna es necesario que la característica de Taxonomía (Taxonomy Feature) esté activada a nivel colección de sitios, lamentablemente esta característica es una característica oculta y solo es posible activarla manualmente mediante PowerShell o modelo de objetos de servidor.

Esto no sería un problema si esta característica viniera activada de serie en todas las colecciones de sitios, pero no es así. Dependiendo de la plantilla con la que creemos una colección de sitios esta característica vendrá activada o no. Por ejemplo, la plantilla de “Centro de Documentación” sí trae de serie la característica de Taxonomías activada de serie. Sin embargo, si utilizamos una plantilla de sitio en blanco para crear nuestra colección de sitios no vendrá activada.

En este segundo caso y dado que no disponemos de PowerShell en SharePoint Online, como alternativa podemos crear una característica propia utilizando el modelo de objetos Sandbox (compatible con SharePoint Online) para activar y desactivar manualmente la característica de Taxonomías. Esto es posible gracias a dos factores, el primero que la activación y desactivación de características de SharePoint está permitida desde Sandbox, y el segundo que esta característica tiene un GUID fijo por ser una característica propia del sistema.

El GUID de la característica de Taxonomía es este: “73ef14b1-13a9-416b-a9b5-ececa2b0604c”.

Para ello nos crearemos un proyecto en blanco (solución Sandbox) y desde el event receiver FeatureActivated ejecutaremos este código para activarla:

SPSite parentSiteCollection = (SPSite)properties.Feature.Parent;

Guid taxonomyFeatureGuid = new Guid(“73ef14b1-13a9-416b-a9b5-ececa2b0604c”);
if (parentSiteCollection.Features[taxonomyFeatureGuid] == null)
{
parentSiteCollection.Features.Add(taxonomyFeatureGuid);
}

Una vez tenemos la activación si quisieramos desactivarla solo tendríamos que incluir este código en el event receiver FeatureDeactivating:

SPSite parentSiteCollection = (SPSite)properties.Feature.Parent;

Guid taxonomyFeatureGuid = new Guid(“73ef14b1-13a9-416b-a9b5-ececa2b0604c”);
if (parentSiteCollection.Features[taxonomyFeatureGuid] != null)
{
parentSiteCollection.Features.Remove(taxonomyFeatureGuid);
}

Una vez hecho esto ya podemos activar y desactivar a placer la característica de taxonomía en nuestras colecciones de sitios de SharePoint Online.

¡Gracias a mi compañero José Quinto que dió con la solución!

Happy SharePointing!