代码之家  ›  专栏  ›  技术社区  ›  Chris Stewart

按访问群体筛选SharePoint列表

  •  3
  • Chris Stewart  · 技术社区  · 15 年前

    使用SharePointSDK,我正在尝试检索列表并在复合控件中显示内容。名单是观众意识到的,我想把它保持在我的控制之下。如何使用SharePoint SDK获取按访问群体筛选的此列表?以下是我正在处理的一些代码:

    SPWeb currentWeb = SPContext.Current.Site.RootWeb;
    SPList shortcuts = currentWeb.Lists["Shortcuts"];
    
    3 回复  |  直到 14 年前
        1
  •  6
  •   Chris Stewart    15 年前

    这是我现在使用的一些代码,对我来说不太管用。根据观众的设置,我应该得到以下结果:

    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))
    

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

        2
  •  1
  •   CBono    14 年前

    这里有一个更简洁的代码片段。主要的更改是删除未使用的对象,以及 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();
    }
    
        3
  •  0
  •   Magnus Johansson    15 年前

    下面是一个代码片段,可以用来确定每个项目的访问群体:

    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);
    }