背景资料:

我有一个内置的自定义SharePoint2010web部件,继承自 System.Web.UI.WebControls.WebParts.WebPart, ,它有这样定义的属性:

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

权力机构想知道每个3,000用户的财产价值。我已经熟悉如何使用 SPLimitedWebPartManager的 要在任一项中提取属性 共享视图我个人的看法, ,使用类似于:

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;

所以,问题是:

我一直在收集这些信息。 所有用户.假设我已经拥有或知道如何检索登录名或SPUser对象的列表,如何为所有用户检索web部件属性?我可以在C#中使用建议,VB.NET,或PowerShell。

有帮助吗?

解决方案

试试这个代码-我没有测试它,但我认为它应该工作。

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;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top