How to get the Target Audience GUID Programmatically in SharePoint 2013.

Sathish Nadarajan
 
Solution Architect
April 21, 2015
 
Rate this article
 
Views
14771

In some scenarios, we require the GUID of the Target Audience Groups. To retrieve the GUIDs, the below method can be used.

 public string GetTargetContentGUID(string currentSiteURL, string targetAudiences)
         {
             string targetContent = string.Empty;
             try
             {
                 string[] targetAudienceArray = targetAudiences.Split(',');
                 foreach (string tempTargetAudience in targetAudienceArray)
                 {
                     try
                     {
                         Guid g = new Guid(tempTargetAudience);
                         targetContent = targetContent + ";" + tempTargetAudience;
                     }
                     catch (System.FormatException ex)
                     {
                         if (ex.Message == "Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).")
                         {
                             //
 
                             using (SPSite site = new SPSite(currentSiteURL))
                             {
                                 SPWeb web = site.RootWeb;
 
 
                                 Microsoft.Office.Server.ServerContext context = Microsoft.Office.Server.ServerContext.GetContext(site);
                                 AudienceManager audManager = new AudienceManager(context);
                                 AudienceCollection audiences = audManager.Audiences;
 
                                 for (int i = 0; i < audiences.Count; i++)
                                 {
                                     if (audiences[i].AudienceName == tempTargetAudience)
                                     {
                                         targetContent = targetContent + ";" + Convert.ToString(audiences[i].AudienceID);
                                     }
                                 }
 
                             }
 
                         }
                     }
 
                 }
 
 
             }
             catch (Exception ex)
             {
                 Logger.LogException("Error has occured On the Method”);
                 return string.Empty;
             }
             return targetContent.TrimStart(';');
         }
 

Here one thing we need to be more cautious is, sometimes, the Target Audience Column will store the GUID directly and sometimes, it will be stored as String. That’s the reason, I kept a Try Catch Block.

Please refer the below link about this inconsistency.

https://social.technet.microsoft.com/forums/sharepoint/en-US/d05145f4-7faf-4205-9e80-507915c04bf5/targeting-audience-displaying-guid

Happy Coding,

Sathish Nadarajan.

Author Info

Sathish Nadarajan
 
Solution Architect
 
Rate this article
 
Sathish is a Microsoft MVP for SharePoint (Office Servers and Services) having 15+ years of experience in Microsoft Technologies. He holds a Masters Degree in Computer Aided Design and Business ...read more
 

How to get the Target Audience Groups of Logged-In User Programmatically in SharePoint 2013

Sathish Nadarajan
 
Solution Architect
April 18, 2015
 
Rate this article
 
Views
12650

In one of the requirement, I need to frame the Search Query based on the Target Audience Groups the current user belongs to. To achieve that, I had come up with the below method.

 public static string GetCurrentUserAudienceGroup(string publishingSiteURL, string loginName)
         {
             AcenetLogger.LogMessage("Entering into the Method GetCurrentUserAudienceGroup", "CommonHelper", null);
             string audienceGroups = string.Empty;
             try
             {
                 SPSecurity.RunWithElevatedPrivileges(delegate()
                     {
                         using (SPSite site = new SPSite(publishingSiteURL))
                         {
                             SPWeb web = site.RootWeb;
 
                             Microsoft.Office.Server.ServerContext context = Microsoft.Office.Server.ServerContext.GetContext(site);
                             AudienceManager audManager = new AudienceManager(context);
                             AudienceCollection audiences = audManager.Audiences;
 
                             for (int i = 0; i < audiences.Count; i++)
                             {
                                 if (audiences[i].IsMember(loginName))
                                 {
                                     audienceGroups = audienceGroups + "," + audiences[i].AudienceID;
                                 }
                             }
 
                         }
                     });
             }
             catch (Exception ex)
             {
                 Logger.LogException("Error has occured On the Method”);
                 audienceGroups = string.Empty;
             }
             return audienceGroups.TrimStart(',');
         }
 

The method is very much self-explanatory. Even then, the pseudo code as follows.

· With the elevated previleges, get the SP Site object

· Get the Server Context object by using the site Object

· With the Context object, instantiate the AudienceManager Object

· With that, get the Audiences.

· Iterate through the Audiences groups and make sure that the current Logon User is a Member.

Here, even I thought of eliminating the ‘for’ loop. But I could not find out any other optimum way.

Hope this helps…

Happy Coding,

Sathish Nadarajan.

Author Info

Sathish Nadarajan
 
Solution Architect
 
Rate this article
 
Sathish is a Microsoft MVP for SharePoint (Office Servers and Services) having 15+ years of experience in Microsoft Technologies. He holds a Masters Degree in Computer Aided Design and Business ...read more
 

Leave a comment