Skip to main content

Custom Audience Targeting SharePoint 2010

Today I will  show how to create , compile Audiences using code and as well will show how to find whether a logged in user belongs to the Audience or not
1. Creating a new audience
First thing we'll do is creating a custom audience, giving it two rules, joined with an OR operator.
public void CreateNewAudience()
{
string audienceName = "Test and temp"; //audience name
string audienceDesc = "Only the test and temp users."; //audience description
SPServiceContext  context = SPServiceContext.GetContext(SPContext.Current.Site);
AudienceManager audManager = newAudienceManager(context);
AudienceCollection audCollection = audManager.Audiences;
Audience audience = null;
AudienceRuleComponent audRule = null;
        audience = audCollection.Create(audienceName, audienceDesc);
        audience.AudienceRules = new ArrayList();//initialize the collection
/* An AudienceRuleComponent exists of:
        * a left part: the property to look at
        * an operator: the operator to perform (=, <>, Contains, …)
        * a right part: the value to search for */
        audRule = new AudienceRuleComponent("UserName","Contains", "test");
        audience.AudienceRules.Add(audRule);
        audRule = new AudienceRuleComponent(null, "OR",null);
//to use an operator (AND, OR, …) set the left and the right part to NULL !
        audience.AudienceRules.Add(audRule);
        audRule = new AudienceRuleComponent("UserName","Contains", "temp");
        audience.AudienceRules.Add(audRule);
        audience.Commit(); //commit the changes
    }
}
Doing this, a new audience named "Test and Temp" will be created, which in the end will contain all users with user names containing "test" or "temp".
2. Compiling the new audience
To compile the new audience, we have to run an AudienceJob, and give it 4 parameters in a string array:
  1. The application id
  2. "1" = start job, "0" = stop job
  3. "1" = full compilation, "0" = incremental compilation (optional, default = 0)
  4. Audience name (optional, if null is supplied, all audiences are run!
public void CompileAudience(string audienceName, bool fullCompile)
{
SPServiceContext context = SPServiceContext.GetContext(SPContext.Current.Site);
// get the assembly which hosts the UserProfile class
Assembly userProfilesAssembly = typeof(UserProfile).Assembly;
// get the type of the UserProfileApplicationProxy
Type userProfileApplicationProxyType = userProfilesAssembly.GetType("Microsoft.Office.Server.Administration.UserProfileApplicationProxy");
// get the proxy object
object proxy = context.GetDefaultProxy(userProfileApplicationProxyType);
// get the UserProfileApplication property which holds the actual application
object profile = proxy.GetType().GetProperty("UserProfileApplication", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(proxy, null);
// get the Id of the application
Guid applicationId = ((Microsoft.SharePoint.Administration.SPPersistedObject)(profile)).Id;
string[] args = new string[4];
args[0] = applicationId.ToString();
args[1] = "1";
args[2] = fullCompile ? "1" : "0";
args[3] = audienceName;
int result = Microsoft.Office.Server.Audience.AudienceJob.RunAudienceJob(args);
AudienceJobReturnCode returnCode = (AudienceJobReturnCode)Enum.Parse(typeof(AudienceJobReturnCode), result.ToString());
    }
}
So in this case, it means we will perform a START of the operation, doing a FULL compilation.

3. Validating logged in user in a webpart
Okay, so now our audience has been compiled, we can go for the next step: of validating whether logged in user is part of the audience or not.
private bool validateUser(string dlName)
       {
           bool result = true;
           if (!string.IsNullOrEmpty(dlName))
           {
               Guid audienceID = Guid.Empty;
               string[] dlnames;
               SPServiceContext context = SPServiceContext.GetContext(SPContext.Current.Site);
               AudienceManager amManager = new AudienceManager(context);
               AudienceCollection ac = amManager.Audiences;
               Audience ad;
               if (dlName.Contains("="))
               {
                   string[] token = dlName.Split('=');
                   dlnames = token[1].Split(',');
                   ad = amManager.Audiences[dlnames[0]];
               }
               else
               {
                   dlnames = dlName.Split(';');
                   audienceID = new Guid(dlnames[0]);
                   ad = amManager.Audiences[audienceID];
               }
               result = (ad.IsMember(SPContext.Current.Web.CurrentUser.LoginName));
           }
           return result;
       }
Reference : SharePoint World

Comments

Popular posts from this blog

GPT-5.2 Lands in Microsoft 365 Copilot: Smarter Reasoning for Workflows

 Today Microsoft announced that GPT-5.2 is now available in Microsoft 365 Copilot and Copilot Studio , bringing two tuned variants: GPT-5.2 Thinking for deep reasoning and strategic work, and GPT-5.2 Instant for fast writing, translation, and skill-building. In Copilot, the model connects to Work IQ to surface insights across your meetings, emails, and documents—helping you turn scattered information into actionable plans. If you use Copilot Chat or Copilot Studio, you can pick GPT-5.2 from the model selector and try prompts like asking for strategic takeaways from a meeting, building comparative tables of market leaders, or preparing focused talking points for upcoming conversations. Microsoft emphasizes model choice , so teams can select the model that best fits the task while keeping security, compliance, and privacy controls in place. Rollout starts today 11-Dec-2025 for users with a Microsoft 365 Copilot license and will expand over the coming weeks; Microsoft 365 Premium...

Why MFA Matters in Microsoft 365 (and How to Enforce It the Right Way)

If you’re still relying on passwords to protect Microsoft 365, you’re leaving a critical gap in your security. A single phished credential can be enough to access email, files, chats, and sensitive business data. Multi-Factor Authentication (MFA) adds a second verification step—such as an Authenticator prompt, a one-time code, or a security key—so a password alone can’t grant access. As a Microsoft 365 administrator and technology enthusiast, I’ve seen firsthand how implementing MFA dramatically reduces account takeover risk and strengthens organisational security. Who this is for This guide is aimed at Microsoft 365 administrators, IT teams, and business leaders looking for practical steps to bolster tenant security with consistent MFA enforcement. Whether you’re managing a small business or a larger enterprise, the principles here apply to everyone seeking to protect critical business data. The goal: require MFA for interactive sign-ins Enforcing MFA for all interactive use...

6 ways to check SharePoint Usage reports

Introduction SharePoint administrators always want to know which user is accessing any site or site collection extensively and which user has access to the site but not using it. The other site details required are related to traffic, access, edit, etc. The user's behavior changes as per the nature of the site and their working department like project team site, department site, and managerial workspace. Fortunately, Microsoft 365 has given multiple methods to generate or view various reports related to SharePoint usage. We will check all the methods one by one and see how they provide the required results. Several options are available at different parts in SharePoint Site or Admin Center where the Administrator can check status or create reports. Method-1. Check Site Usage in Site Contents Page. The Site contents page shows the analytics data like their unique visitors, total site visits, average time spent by the user, etc. The report can be generated for multiple days like 7, 3...