按受众筛选SharePoint列表

时间:2009-09-23 14:55:15

标签: sharepoint

使用SharePoint SDK,我正在尝试检索列表并在复合控件中显示内容。该列表是受众了解的,我想在我的控制下保持这一点。如何使用SharePoint SDK获取此列表(按受众筛选)?这是我正在使用的一些代码:

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

3 个答案:

答案 0 :(得分: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))

它永远不会返回真实,即使它应该是。

答案 1 :(得分: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();
}

答案 2 :(得分: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);
}