c# - SharePoint 2010: cómo extraer propiedades de elementos web personalizadas para todos los usuarios
sharepoint-2010 web-parts (1)
Fondo:
Tengo un elemento web personalizado de SharePoint 2010 incorporado, que hereda de System.Web.UI.WebControls.WebParts.WebPart
, que tiene una propiedad definida así:
[Personalizable(PersonalizationScope.User)]
[WebBrowsable(true)]
[WebDisplayName("...")]
[WebDescription("...")]
[Category("...")]
public string CustomProp { get; set; }
A Powers-That-Be le gustaría saber el valor de la propiedad para cada uno de sus 3.000 usuarios. Ya estoy familiarizado con el uso de SPLimitedWebPartManager para extraer la propiedad en vista compartida o en mi propia vista personal , usando un código similar a:
var pageUrl = "/Pages/SomePage.aspx";
var limitedManager = SPContext.Current.Web.GetLimitedWebPartManager(
pageUrl,
PersonalizationScope.User); // or .Shared, if loading the shared value
var webPart = limitedManager.WebParts.OfType<MyWebPart>().FirstOrDefault();
var prop = webPart.CustomProp;
Entonces, la pregunta:
Estoy estancado en la recopilación de esta información para todos los usuarios . Suponiendo que ya tengo, o sé cómo recuperar, una lista de nombres de inicio de sesión o objetos SPUser, ¿cómo hago para recuperar la propiedad de la parte web para todos los usuarios? Puedo usar sugerencias en C #, VB.NET o PowerShell.
Pruebe este código: no lo he probado, pero creo que debería funcionar.
const string absolutePageUrl = "http://spsite:5000/Pages/SomePage.aspx";
foreach (SPUser user in SPContext.Current.Site.RootWeb.AllUsers.Cast<SPUser>())
{
if (!user.LoginName.StartsWith("DOMAIN NAME"))
continue;
using (SPSite site = new SPSite(absolutePageUrl, user.UserToken))
using (SPWeb web = site.OpenWeb())
{
var mgr = web.GetLimitedWebPartManager(absolutePageUrl, PersonalizationScope.User);
var webPart = mgr.WebParts.OfType<MyWebPart>().FirstOrDefault();
var prop = webPart.CustomProp;
}
}