private static void Main(string[] args) { SPSecurity.CatchAccessDeniedException = false; SPSite site = new SPSite("http://chiron"); UserProfileManager pm = new UserProfileManager(ServerContext.GetContext(site)); foreach (UserProfile profile in pm) { //User PropertyConstants to get values Console.WriteLine("Account: " + profile[PropertyConstants.AccountName]); //Check for null if (profile[PropertyConstants.WebSite].Value != null) { Console.WriteLine(profile[PropertyConstants.WebSite]); } } //ToDo: Create the AD User "class\bart" and remove the breakpoint Console.WriteLine("Current Number of Profiles" + pm.Count); if (pm.GetUserProfile(@"class\bart") != null) { pm.RemoveUserProfile(@"class\bart"); } //Create Bart's Profile UserProfile p = pm.CreateUserProfile(@"class\bart"); //Set it's Office to Springfield p[PropertyConstants.Office].Value = "Springfield"; p.Commit(); Console.WriteLine("Current Number of Profiles" + pm.Count); //Showing Audiences AudienceManager am = new AudienceManager(ServerContext.GetContext(site)); foreach (Audience a in am.Audiences) { Console.WriteLine("Audience: " + a.AudienceName); } Audience simpsons; try { simpsons = am.Audiences.Create("Springfield Users", "All users working in Springfield"); ArrayList audienceRules = new ArrayList(); AudienceRuleComponent arc = new AudienceRuleComponent("Office", "Contains", "Springfield"); audienceRules.Add(arc); simpsons.AudienceRules = audienceRules; simpsons.Commit(); } catch (AudienceDuplicateNameException e) { simpsons = am.Audiences["Springfield Users"]; } //Compiling Audience can only be done using the UI - sorry :) }
/// <summary> /// Adds the rules. /// </summary> /// <param name="context">The context.</param> /// <param name="audienceName">Name of the audience.</param> /// <param name="rules">The rules.</param> /// <param name="clearExistingRules">if set to <c>true</c> [clear existing rules].</param> /// <param name="compile">if set to <c>true</c> [compile].</param> /// <param name="groupExisting">if set to <c>true</c> [group existing].</param> /// <param name="appendOp">The append op.</param> /// <returns></returns> internal static ArrayList AddRules(SPServiceContext context, string audienceName, string rules, bool clearExistingRules, bool compile, bool groupExisting, AppendOp appendOp) { AudienceManager manager = new AudienceManager(context); if (!manager.Audiences.AudienceExist(audienceName)) { throw new SPException("Audience name does not exist"); } Audience audience = manager.Audiences[audienceName]; /* * Operator Need left and right operands (not a group operator) * = Yes * > Yes * >= Yes * < Yes * <= Yes * Contains Yes * Reports Under Yes (Left operand must be 'Everyone') * <> Yes * Not contains Yes * AND No * OR No * ( No * ) No * Member Of Yes (Left operand must be 'DL') */ XmlDocument rulesDoc = new XmlDocument(); rulesDoc.LoadXml(rules); ArrayList audienceRules = audience.AudienceRules; bool ruleListNotEmpty = false; if (audienceRules == null || clearExistingRules) { audienceRules = new ArrayList(); } else { ruleListNotEmpty = true; } //if the rule is not emply, start with a group operator 'AND' to append if (ruleListNotEmpty) { if (groupExisting) { audienceRules.Insert(0, new AudienceRuleComponent(null, "(", null)); audienceRules.Add(new AudienceRuleComponent(null, ")", null)); } audienceRules.Add(new AudienceRuleComponent(null, appendOp.ToString(), null)); } if (rulesDoc.SelectNodes("//rule") == null || rulesDoc.SelectNodes("//rule").Count == 0) { throw new ArgumentException("No rules were supplied."); } foreach (XmlElement rule in rulesDoc.SelectNodes("//rule")) { string op = rule.GetAttribute("op").ToLowerInvariant(); string field = null; string val = null; bool valIsRequired = true; bool fieldIsRequired = false; switch (op) { case "=": case ">": case ">=": case "<": case "<=": case "contains": case "<>": case "not contains": field = rule.GetAttribute("field"); val = rule.GetAttribute("value"); fieldIsRequired = true; break; case "reports under": field = "Everyone"; val = rule.GetAttribute("value"); break; case "member of": field = "DL"; val = rule.GetAttribute("value"); break; case "and": case "or": case "(": case ")": valIsRequired = false; break; default: throw new ArgumentException(string.Format("Rule operator is invalid: {0}", rule.GetAttribute("op"))); } if (valIsRequired && string.IsNullOrEmpty(val)) { throw new ArgumentNullException(string.Format("Rule value attribute is missing or invalid: {0}", rule.GetAttribute("value"))); } if (fieldIsRequired && string.IsNullOrEmpty(field)) { throw new ArgumentNullException(string.Format("Rule field attribute is missing or invalid: {0}", rule.GetAttribute("field"))); } AudienceRuleComponent r0 = new AudienceRuleComponent(field, op, val); audienceRules.Add(r0); } audience.AudienceRules = audienceRules; audience.Commit(); if (compile) { SPServiceApplication svcApp = Utilities.GetUserProfileServiceApplication(context); if (svcApp != null) { CompileAudience(svcApp.Id, audience.AudienceName); } } return(audienceRules); }
/// <summary> /// Adds the rules. /// </summary> /// <param name="context">The context.</param> /// <param name="audienceName">Name of the audience.</param> /// <param name="rules">The rules.</param> /// <param name="clearExistingRules">if set to <c>true</c> [clear existing rules].</param> /// <param name="compile">if set to <c>true</c> [compile].</param> /// <param name="groupExisting">if set to <c>true</c> [group existing].</param> /// <param name="appendOp">The append op.</param> /// <returns></returns> internal static ArrayList AddRules(SPServiceContext context, string audienceName, string rules, bool clearExistingRules, bool compile, bool groupExisting, AppendOp appendOp) { AudienceManager manager = new AudienceManager(context); if (!manager.Audiences.AudienceExist(audienceName)) { throw new SPException("Audience name does not exist"); } Audience audience = manager.Audiences[audienceName]; /* Operator Need left and right operands (not a group operator) = Yes > Yes >= Yes < Yes <= Yes Contains Yes Reports Under Yes (Left operand must be 'Everyone') <> Yes Not contains Yes AND No OR No ( No ) No Member Of Yes (Left operand must be 'DL') */ XmlDocument rulesDoc = new XmlDocument(); rulesDoc.LoadXml(rules); ArrayList audienceRules = audience.AudienceRules; bool ruleListNotEmpty = false; if (audienceRules == null || clearExistingRules) audienceRules = new ArrayList(); else ruleListNotEmpty = true; //if the rule is not emply, start with a group operator 'AND' to append if (ruleListNotEmpty) { if (groupExisting) { audienceRules.Insert(0, new AudienceRuleComponent(null, "(", null)); audienceRules.Add(new AudienceRuleComponent(null, ")", null)); } audienceRules.Add(new AudienceRuleComponent(null, appendOp.ToString(), null)); } if (rulesDoc.SelectNodes("//rule") == null || rulesDoc.SelectNodes("//rule").Count == 0) throw new ArgumentException("No rules were supplied."); foreach (XmlElement rule in rulesDoc.SelectNodes("//rule")) { string op = rule.GetAttribute("op").ToLowerInvariant(); string field = null; string val = null; bool valIsRequired = true; bool fieldIsRequired = false; switch (op) { case "=": case ">": case ">=": case "<": case "<=": case "contains": case "<>": case "not contains": field = rule.GetAttribute("field"); val = rule.GetAttribute("value"); fieldIsRequired = true; break; case "reports under": field = "Everyone"; val = rule.GetAttribute("value"); break; case "member of": field = "DL"; val = rule.GetAttribute("value"); break; case "and": case "or": case "(": case ")": valIsRequired = false; break; default: throw new ArgumentException(string.Format("Rule operator is invalid: {0}", rule.GetAttribute("op"))); } if (valIsRequired && string.IsNullOrEmpty(val)) throw new ArgumentNullException(string.Format("Rule value attribute is missing or invalid: {0}", rule.GetAttribute("value"))); if (fieldIsRequired && string.IsNullOrEmpty(field)) throw new ArgumentNullException(string.Format("Rule field attribute is missing or invalid: {0}", rule.GetAttribute("field"))); AudienceRuleComponent r0 = new AudienceRuleComponent(field, op, val); audienceRules.Add(r0); } audience.AudienceRules = audienceRules; audience.Commit(); if (compile) { SPServiceApplication svcApp = Utilities.GetUserProfileServiceApplication(context); if (svcApp != null) CompileAudience(svcApp.Id, audience.AudienceName); } return audienceRules; }