SharePoint 2010:如何提取所有用户的个性化web部件属性
本文关键字:用户 个性化 web 属性 2010 何提取 提取 SharePoint | 更新日期: 2023-09-27 18:27:22
背景:
我有一个内置的自定义SharePoint 2010 web部件,继承自System.Web.UI.WebControls.WebParts.WebPart
,它的属性定义如下:
[Personalizable(PersonalizationScope.User)]
[WebBrowsable(true)]
[WebDisplayName("...")]
[WebDescription("...")]
[Category("...")]
public string CustomProp { get; set; }
The Powers That Be想知道3000名用户中每一个人的财产价值。我已经熟悉如何使用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;
}
}