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

10.4.13 / Comments (0) / by Unknown

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 Unknown

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...?