Pergunta

Fundo:

Eu tenho uma web part interna personalizada do SharePoint 2010, herdada de System.Web.UI.WebControls.WebParts.WebPart, que possui uma propriedade definida assim:

[Personalizable(PersonalizationScope.User)]
[WebBrowsable(true)]
[WebDisplayName("...")]
[WebDescription("...")]
[Category("...")]
public string CustomProp { get; set; }

O Powers-That-Be gostaria de saber o valor da propriedade para cada um de seus 3.000 usuários.Já estou familiarizado com o uso do SPLimitedWebPartManager para extrair a propriedade em qualquer visualização compartilhada ou minha visão pessoal, usando código semelhante 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;

Então, a pergunta:

Estou preso em coletar essas informações para todos os usuários.Supondo que eu já tenha ou saiba como recuperar uma lista de nomes de login ou objetos SPUser, como faço para recuperar a propriedade da web part para todos os usuários?Posso usar sugestões em C#, VB.NET ou PowerShell.

Foi útil?

Solução

Experimente este código - não testei, mas acho que deve 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;
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top