Mostrando entradas con la etiqueta columnas. Mostrar todas las entradas
Mostrando entradas con la etiqueta columnas. Mostrar todas las entradas

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.

lunes, 19 de noviembre de 2012

Error en el log de SharePoint: No XsltListViewWebPart was found on this page


En este caso intentábamos borrar un campo (una columna calculada que se llama Columna_origen) en una lista y al querer hacerlo da el error:

This Page has been modified since you opened it. You must open the page again.



En el log de SharePoint nos encontramos con el siguiente error al intentar abrir una página o lista con el problema:

No XsltListViewWebPart was found on this page

La página o vista no carga debido a las siguientes razones:

  • Algún elemento de la vista hace referencia a una feature en el sitio que fue desactivada.
  • La vista tenía un elemento web personalizado y un poco de java que hace referencia a la función que ya no se encuentra.

Solución:

En caso de que necesitemos mantener los datos de la columna, podemos crear una nueva columna, entonces desde PowerShell copiamos el contenido de la columna con el problema a la nueva columna.

$cSite = Get-SPweb "http://sharepoint2010/sites/sitecollection/site"
$cList=$cSite.Lists["Lista"]

foreach($f in $cList.items)
{
$uFrom = $f["Columna_origen"]

if($uFrom -ne $null)
{
$f["NewColumn"] = $f["Columna_destino"]
$f.Update()
}
}

Luego borramos la columna dañada.

$cSite = Get-SPweb "http://sharepoint2010/sites/sitecollection/site"
$cList=$cSite.Lists["Lista"]

foreach($f in $cList.fields)
{
$fff = $f.Title
if($fff -eq "Columna_origen")
{
$cList.Fields.Delete($fff)
}
}