3

バックグラウンド:

System.Web.UI.WebControls.WebParts.WebPart次のように定義されたプロパティを持つ、から継承する組み込みのカスタムSharePoint2010Webパーツがあります。

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

Powers-That-Beは、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で提案を使用できます。

4

1 に答える 1

2

このコードを試してください-私はそれをテストしていませんが、うまくいくはずだと思います。

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;
    }
}
于 2012-03-11T01:21:51.877 に答える