"Microsoft.SharePoint.SPException: The security validation for this page is invalid" al crear subsitios

26.9.13 / Comments (0) / by Enric Carrión


Holaaa qué tal. En SharePoint 2013 tengo una colección de sitios rebelde, procedente de una migración de 2010, que se resiste a dejarme crear subsitios con mi definición personalizada de sitio. El método SPWebCollection.Add me devuelve la ya consabida letanía:

Microsoft.SharePoint.SPException: The security validation for this page is invalid. Click Back in your Web browser, refresh the page, and try your operation again

Spoiler: he conseguido evitarlo sin recurrir a una ñapa demasiado gorda. Eso sí, enumero los métodos utilizados infructuosamente hasta dar con el fix adecuado.

  1. SPSecurity.RunWithElevatedPrivileges y todo dentro del contexto : no effect
  2. SPSite.AllowUnsafeUpdates / SPWeb.AllowUnsafeUpdates : no effect
  3. SPUtility.ValidateFormDigest / SPWeb.ValidateFormDigest : no effect
  4. SPWebapplication.FormDigestSettings.Enabled = false y luego dejarlo con el valor original : imposible, dado que mi cuenta de pool de aplicaciones no es farm admin, con lo cual no tiene acceso para realizar esta operación. En general, esta restricción de permisos es la práctica recomendada, es decir que tomen nota los señores que publican en MSDN: http://blogs.msdn.com/b/navdeepm/archive/2010/04/29/microsoft-sharepoint-spexception-the-security-validation-for-this-page-is-invalid-in-sharepoint-2010.aspx
  5. Deshabilitar "Web Page Security Validation" en las General Settings de mi web application : tiene efecto, pero no es una buena solución para un entorno productivo.
  6. Decompilar el método SPRequestInternalClass.MoveUrl, que en mi caso es el que está provocando la excepción: método no administrado. Vuelva usted mañana.

Y ahora sí, la solución.
HttpContext.Current.Items["FormDigestValidated"] = "false";
Esto antes del código de creación del subsitio, evita la excepción anterior. Como solo afecta al contexto de esa petición en particular, no lo considero demasiado nocivo. Y dado que es lo único a lo que puede uno agarrarse... compro.



SharePoint 2010 CU: "Error en la instalación de este paquete"

19.9.13 / Comments (0) / by Enric Carrión

Experimento para ver cuánta gente googlea esto. En los últimos Cumulative Updates de SharePoint Server 2010, el fichero ZIP de hotfix que se baja uno contiene no solo el .EXE de instalación sino también el ficherito .CAB adicional:
ubersrv_1.cab
Atención porque es muy fácil olvidarlo o borrarlo por accidente. Ese cabinet file es una dependencia del .EXE, con lo cual, si lo ejecutáis sin esa dependencia en el mismo directorio, se ve a quejar amargamente:
"Error en la instalación de este paquete"
Y además en el idioma de nuestra configuración regional, no en el idioma de instalación de producto, lo cual despista aún más. Menos mal que, antes de repetir la descarga de más de 1GB, pensé en googlear y encontré este amable post de Technet que lo explica con mucho cariño y comprensión ("The installation of this package failed"):

http://blogs.technet.com/b/praveenh/archive/2013/06/18/the-installation-of-this-package-failed-error-while-installing-april-2013-cu-kb-2726992-for-sharepoint-2013.aspx

PD: comprobad que tengáis espacio suficiente de disco, también, De nada.

Beezy, ahora para SharePoint 2013

19.9.13 / Comments (0) / by Enric Carrión


Beezy, la red social corporativa basada en Microsoft SharePoint y, a la vez, el proyecto en que llevo implicado personalmente desde hace ya más de un año, ve la luz en su versión SharePoint 2013.

El producto empezó en SharePoint 2010 como una forma de dotar de capacidades sociales a una plataforma meramente organizativa. Con el advenimiento de SharePoint 2013 y la adquisición de Yammer por Microsoft, el reto de Beezy a lo largo de estos últimos meses ha consistido en analizar las nuevas funcionalidades sociales ofrecidas por la compañía de Redmond y utilizar ese análisis para potenciar y complementar el producto, de cara a ofrecer un Beezy que realmente ofrezca a SharePoint toda la funcionalidad social que un usuario realmente espera, teniendo en cuenta la elevada y profunda adopción de las aplicaciones de este tipo fuera de nuestro entorno laboral. Los empleados de una compañía, sin duda, no mostrarán menos grado de exigencia en una herramienta empresarial, y a esos requisitos va dirigida la nueva versión de Beezy.


Podéis obtener toda la información del lanzamiento en http://www.beezy.net/Sharepoint-2013, o más detalladamente en el blog de producto, del mismo modo que podéis conocer la nueva web de producto, recién estrenada, en http://www.beezy.net.

Un agradecimiento sincero a todos los integrantes directos e indirectos del proyecto, por conseguir llevar a cabo un objetivo tan ambicioso como éste. El resultado ha merecido la pena, no cabe duda.

Obtener el tamaño de subsitios de SharePoint programáticamente

10.4.13 / Comments (0) / by Enric Carrión

La página Storage Metrics (/_layouts/storman.aspx) fué recuperada en SharePoint 2010 SP1 para ofrecer una vista granular del contenido de una colección de sitios respecto a tamaños y porcentajes de utilización. La manera de recolectar y mostrar esos datos fue optimizada: un job timer “Storage Metrics Processing” (ejecutado por defecto cada 5 minutos) calcula los datos para que después puedan ser directamente presentados en la página.

image

Y te preguntarás, y con motivo, ¿Y si yo quiero explotar estos datos programáticamente? El caso más directo es querer controlar el tamaño de un subsitio para de alguna manera monitorizarlo o generar alertas sobre él. Es decir, simular subsite quotas, esa funcionalidad tan anhelada y de la que el equipo de SharePoint se reitera en privarnos de ella.

Bien, aunque el modelo de objetos no ofrece un método directo para obtener esa información (el único método parecido es SPSite.StorageManagementInformation, pero fue declarado obsoleto por ineficiente), podemos echar un vistazo al código fuente de la página y veremos como el truquillo de los desarrolladores de Microsoft es usar un método internal SPSite.GetStorageMetrics. Con lo cual deberemos recurrir a Reflection, pasándonos por el forro el contrato de la API que ofrece la plaforma, pero consiguiendo lo que queremos, al fin y al cabo. ¿Es una mala decisión? Depende del uso que le demos y de si asumimos las consecuencias de ello.

Un código como el siguiente nos servirá para obtener una tabla de elementos (retornada con el tipo interno SPStorageMetricsResult) que representa la información mostrada en la página “Storage Metrics”. De ahí solo tendremos que acceder a los elementos y recuperar su propiedad TotalSize.

using (var site = new SPSite("http://server"))
{
const BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic;
var methodInfo = typeof(SPSite).GetMethod("GetStorageMetrics", bindingFlags);
var type = Enum.ToObject(typeof(SPSite).Assembly.
GetType("Microsoft.SharePoint.SPSite+StorageMetricsOrderByColumn"), 0);
var result = methodInfo.Invoke(site, new [] { string.Empty, type, false });
}

Mis blogs de cabecera (II)

3.4.13 / Comments (2) / by Enric Carrión

Hace ya mucho de la parte uno de esta entrada pero es de justicia añadir otras referencias técnicas con idénticos honores a las mencionadas anteriormente. Y por supuesto, a parte de referencias, todos ellos majísimos compañeros en Spenta.


  • DeXrm, de Atilio Rosas, fabuloso experto en Dynamics CRM/XRM, todoterreno en el mundo Microsoft y acérrimo admirador de SuperCholo.
  • Jorge Serrano - MVP Visual Developer, de la Institución, del inapelable Jorge Serrano, ese señor (¿te puedo llamar señor? :P) que disfruta como nadie de la tecnología y es capaz de contagiar tamaño entusiasmo a cuantos le rodean.
  • Sin SharePoint no hay paraíso (quién no conoce este blog), de mi admirado Miguel Tabera, el único capaz de manipular los pliegues del espacio-tiempo para que SharePoint, Office 365 o InfoPath hagan lo que él quiera.
  • Melerin 2.0, de Sergio Melero, portento de .NET y de las nuevas plataformas de MS, creador de la aplicación AlcoholTest. Todo un innovador tecnológico y además culinario. 

¿Me dejo a alguien...?



Eliminar caché de SharePoint Designer

25.2.13 / Comments (0) / by Enric Carrión

Si habéis re-creado un sitio por completo y véis en Designer como supuestamente aún hay ficheros tocados o checked out, es que la caché de Designer os la está jugando. También, cuando usáis unas credenciales y queréis cambiar a otras, puede que Designer se niegue en redondo y te logue automáticamente con las antiguas.

Para todo eso y mucho más:
del /f /s /q "C:\Users\jovi\AppData\Local\Microsoft\WebsiteCache\*.*"
del /f /s /q "C:\Users\jovi\AppData\Roaming\Microsoft\Web Server Extensions\Cache\*.*"
Thanks to Jordi Vilà.

Recuperar el número de serie de SharePoint 2010

18.2.13 / Comments (0) / by Enric Carrión

Imaginad que necesitáis instalar en una infraestructura existente un nuevo frontal Web y añadirlo a la granja, pero ¡oh! el número de serie de la licencia no se conoce. Bien, seguramente lo primero que haréis será ir a googlear "get sharepoint 2010 serial key", "retrieve sharepoint 2010 license" o algo por el estilo y os acabaréis encontrando al cabo de un rato con un hilo de foro tal que así:
http://forums.mydigitallife.info/threads/28039-C-Decrypt-Office-2010-Digital-Product-ID/page3?p=497046&viewfull=1

Bien, dado que este señor Josh Cell ya nos ha hecho el favor de localizar donde está la clave de registro:
SOFTWARE\Microsoft\Office\14.0\Registration\{9014 0000-110D-0000-1000-0000000FF1CE}
y a implementar un script VBS para desencriptarla, simplemente me limitaré a hacerle buena propaganda y a dejaros el script empaquetado para que simplemente lo ejecutéis en vuestra máquina:
cscript.exe spversion.vbs
 El script: http://www.filedropper.com/spversion_1