Filter a SharePoint List by Audience

Using the SharePoint SDK, I am trying to retrieve a list and display content in a composite control. The list is an audience, and I would like to keep it under my control. How can I get this audience filtered list using the SharePoint SDK? Here are some of the code I'm working with:

SPWeb currentWeb = SPContext.Current.Site.RootWeb;
SPList shortcuts = currentWeb.Lists["Shortcuts"];
+3
source share
3 answers

Here is the code I'm using now and it does not work for me. In accordance with how the audience is configured, I should get the results:

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

ABOUT:

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

He never returns, even when it should be.

+6
source

. - 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();
}
+1

Here is a snippet of code that can be useful to identify each audience:

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

Source: https://habr.com/ru/post/1718378/


All Articles