2009-09-23 47 views
3

使用SharePoint SDK时,我试图检索列表并在复合控件中显示内容。名单是观众意识到,我想保持在我的控制。我如何才能获取此列表,并按受众群体过滤使用SharePoint SDK?下面是一些代码,我的工作:按受众筛选SharePoint列表

SPWeb currentWeb = SPContext.Current.Site.RootWeb; 
SPList shortcuts = currentWeb.Lists["Shortcuts"]; 

回答

6

下面是一些我的代码现在使用,它不适合我。根据观众如何设置,我应该得到的结果:

protected override void CreateChildControls() 
{ 
dropdown = new DropDownList(); 
dropdown.Items.Add(new ListItem("Select...", "")); 

SPWeb currentWeb = SPContext.Current.Site.RootWeb; 
SPList shortcuts = currentWeb.Lists["Shortcuts"]; 

ServerContext context = ServerContext.GetContext(currentWeb.Site); 
AudienceManager audManager = new AudienceManager(context); 
AudienceCollection audiences = audManager.Audiences; 
AudienceLoader audienceLoader = AudienceLoader.GetAudienceLoader(); 

foreach (SPListItem listItem in shortcuts.Items) 
{ 
    string audienceFieldValue = (string)listItem["Target Audiences"]; 

    if (AudienceManager.IsCurrentUserInAudienceOf(audienceLoader, audienceFieldValue, false)) 
    { 
     dropdown.Items.Add(new ListItem(listItem.Title, listItem.Url)); 
    } 
} 

Controls.Add(dropdown); 
base.CreateChildControls(); 
} 

在:

if (AudienceManager.IsCurrentUserInAudienceOf(audienceLoader, audienceFieldValue, false)) 

这是从来没有返回true,即使它应该是。

+0

原来这段代码是正确的,确实有效。我已将自己的个人资料调整为特定受众的一部分,但由于观众未被重新编译,所以变更未生效。一旦发生,一切都按预期工作。 – 2009-09-23 19:36:19

0

下面是一个代码段,也许可以使用,以确定每个项目的观众:

SPList shortcuts = currentWeb.Lists["Shortcuts"]; 
SPListItemCollection items = list.Items; 

Audience siteAudience; 

ServerContext context = ServerContext.GetContext(site); 
AudienceManager audManager = new AudienceManager(context); 
foreach (SPListItem item in items) 
{ 
    string ID = item["Target Audiences"].ToString(); 
    string NewID = ID.Remove(36); 
    Guid guid = new Guid(NewID); 
    siteAudience = audManager.GetAudience(guid); 
} 
1

下面是一个更简洁的代码片段。主要更改是删除未使用的对象,以及更高效的foreach循环版本。

protected override void CreateChildControls() 
{ 
    dropdown = new DropDownList(); 
    dropdown.Items.Add(new ListItem("Select...", "")); 

    SPWeb currentWeb = SPContext.Current.Site.RootWeb; 
    SPListItemCollection scItems = currentWeb.Lists["Shortcuts"].Items; 

    AudienceLoader audienceLoader = AudienceLoader.GetAudienceLoader(); 

    // Iterate over a copy of the collection to prevent multiple queries to the list 
    foreach (SPListItem listItem in scItems) 
    { 
    string audienceFieldValue = (string)listItem["Target Audiences"]; 

    if (AudienceManager.IsCurrentUserInAudienceOf(audienceLoader, audienceFieldValue, false)) 
    { 
     dropdown.Items.Add(new ListItem(listItem.Title, listItem.Url)); 
    } 
    } 

    Controls.Add(dropdown); 
    base.CreateChildControls(); 
}