SharePoint 2010. No se puede borrar una columna de sitio salvo que utilicemos el SQL Server

Llevo unos meses dando varios cursos de Administración de SharePoint 2010 y cuando sale el tema del SQL Server suelo insistir bastante en que debería de ser transparente para nosotros, que no debemos tocar nada en él, salvo administrar las bases de datos, monitorizar el rendimiento y poner los planes de mantenimiento adecuados en las bases de datos.

La semana de uno de los cursos, nos encontramos con un error grave en una máquina virtual de desarrollo. Estábamos creando un tipo de contenido desde Visual Studio y nos equivocamos con uno de los tipos de los campos. Sin darnos cuenta, hicimos el deploy y el campo se creó, pero no era capaz de añadirlo a la lista porque la definición de este era incorrecta. Nos equivocamos al escribir el tipo de campo elección y pusimos Choise.

 Sharepoint2010-FailField-1

Si vamos a la galería de columnas de sitio para eliminarla nos encontramos con el siguiente error que indica que el campo Choise no está instalado correctamente y que lo tenemos que eliminar.

Sharepoint2010-FailField-2

¿Pero si eso mismo estaba intentando hacer? Nada, que vamos a ver si tiramos de Powershell para eliminar el campo y obtenemos  un error parecido al intentar obtener el campo para eliminar. Para esto obtenemos la colección de sitios (Get-SPWeb) y intentamos obtener las columnas de sitio con el siguiente error al intentar mostrar la información del campo erróneo.

Sharepoint2010-FailField-3

Solución

Pues, aunque me duela decir esto, no nos queda otra que buscar en la base de datos de contenido la definición de la columna y eliminarla. Para obtener la base de datos de contenido, usando Powershell, utilizamos el objeto Get-SPWeb y accedemos al Site.ContentDatabase

$web = Get-SPWeb http://intranet.contoso.com

$web.Site.ContentDatabase

 

Id               : e5c5e20a-5a9f-406c-b9f6-28923750cecd

Name             : WSS_Content_e58f8446cde041318a305696f040d32a

WebApplication   : SPWebApplication Name=Intranet

Server           : demo2010a

CurrentSiteCount : 20

Nos vamos al SQL Server Management Studio y ejecutamos el siguiente query en la tabla ContentTypes buscando por la IDde la columna:

SELECT * FROM ContentTypes WHERE Definition LIKE ('%ID DEL CAMPO%')

Sharepoint2010-FailField-4

y ahora, CON MUCHO CUIDADO, eliminamos esa fila para que podamos volver a tener nuestra galería de columnas de sitio y de tipos de contenido funcionando correctamente.

Importante

  • No hacer el DELETE sin hacer previamente la consulta, te puede pasar que elimines 36 filas sin darte cuenta Sonrisa
  • Realizar un Backup de la base de datos de contenido antes de tocar nada.
  • No realizar estas pruebas en SharePoint Online sin haber probado completamente la solución en un servidor de desarrollo. En SharePoint Online no tenemos acceso al SQL Server para eliminar la definición de columna incorrecta.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *