예제 #1
0
        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 :)
        }
예제 #2
0
        /// <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;
        }