コード例 #1
0
        // retrieve the rules to invoke
        protected SC.Rules.RuleList <SC.Rules.RuleContext> GetRules(
            SC.Data.Database db)
        {
            // items that define the rules to invoke
            List <SC.Data.Items.Item> ruleItems =
                new List <SC.Data.Items.Item>();

            // no rules specified to configuration factory; apply all global rules
            if (this.Rules.Count < 1)
            {
                SC.Data.Items.Item ruleRoot =
                    db.GetItem("/sitecore/system/Settings/Rules/Global Item Rules/Rules");
                SC.Diagnostics.Assert.IsNotNull(ruleRoot, "ruleRoot");
                ruleItems.AddRange(ruleRoot.Children);
            }
            else
            {
                foreach (string id in this.Rules)
                {
                    SC.Data.Items.Item ruleItem = db.GetItem(id);
                    SC.Diagnostics.Assert.IsNotNull(ruleItem, id);
                    ruleItems.Add(ruleItem);
                }
            }

            SC.Rules.RuleList <SC.Rules.RuleContext> rules =
                new SC.Rules.RuleList <SC.Rules.RuleContext>();
            rules.Name = "All Global Item Rules";

            foreach (SC.Data.Items.Item ruleItem in ruleItems)
            {
                string ruleXml = ruleItem["Rule"];

                if (String.IsNullOrEmpty(ruleXml) || ruleItem["Disabled"] == "1")
                {
                    continue;
                }

                SC.Rules.RuleList <SC.Rules.RuleContext> parsed = SC.Rules.RuleFactory.ParseRules <SC.Rules.RuleContext>(
                    db,
                    ruleXml);
                rules.AddRange(parsed.Rules);
            }

            return(rules);
        }
コード例 #2
0
        // agent body
        public void Run()
        {
            // database containing items to process
            SC.Data.Database db = this.GetDatabase();
            SC.Diagnostics.Assert.IsNotNull(db, "db");

            // ids of items to process
            SC.Data.ID[] itemIDs = this.GetItemIDs(db);
            SC.Diagnostics.Assert.IsNotNull(itemIDs, "itemIDs");

            if (SC.Context.Job != null)
            {
                SC.Context.Job.Status.Total = itemIDs.Length;
            }

            // rules to invoke
            SC.Rules.RuleList <SC.Rules.RuleContext> rules = this.GetRules(db);
            SC.Diagnostics.Assert.IsNotNull(rules, "rules");

            // execute rules against each item
            foreach (SC.Data.ID id in itemIDs)
            {
                SC.Data.Items.Item[] versions = this.GetVersionsToProcess(
                    db,
                    id);

                if (SC.Context.Job != null && versions.Length > 0)
                {
                    SC.Context.Job.Status.Messages.Add(
                        "Processing " + versions[0].Paths.FullPath);
                }

                foreach (SC.Data.Items.Item version in versions)
                {
                    SC.Rules.RuleContext ruleContext = new SC.Rules.RuleContext();
                    ruleContext.Item = version;
                    rules.Run(ruleContext);
                }

                if (SC.Context.Job != null)
                {
                    SC.Context.Job.Status.Processed++;
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Triggered at interval to determine whether to rebuild the index.
        /// </summary>
        /// <param name="args">Event arguments (not used by this implementation)</param>
        internal void Handle(EventArgs args)
        {
            Assert.IsNotNull(this._index, "_index");
            string path = "/sitecore/system/Settings/Rules/Indexing/Rebuilding/Rules";

            using (new SC.SecurityModel.SecurityDisabler())
            {
                SC.Data.Items.Item ruleRoot = this._ruleDatabase.GetItem(path);
                SC.Diagnostics.Assert.IsNotNull(
                    ruleRoot,
                    string.Format("ruleRoot item {0} in database {1}", path, this._ruleDatabase.Name));
                SC.Sharedsource.Rules.Indexing.IndexRebuildingRuleContext ruleContext =
                    new SC.Sharedsource.Rules.Indexing.IndexRebuildingRuleContext(this._index)
                {
                    IndexedDatabaseName = this._indexedDatabaseName,
                };

                SC.Rules.RuleList <SC.Sharedsource.Rules.Indexing.IndexRebuildingRuleContext> ruleList =
                    SC.Rules.RuleFactory.GetRules <SC.Sharedsource.Rules.Indexing.IndexRebuildingRuleContext>(ruleRoot.Axes.GetDescendants(), "Rule");
                Assert.IsNotNull(ruleList, "ruleList");
                Assert.IsTrue(
                    ruleList.Count > 0,
                    "ruleList.Count < 1 for " + path + " in database " + this._ruleDatabase.Name);
                ruleList.Run(ruleContext);

                if (ruleContext.ShouldRebuild)
                {
                    SC.ContentSearch.Diagnostics.CrawlingLog.Log.Info(
                        this + " : rebuild " + this._index.Name);
                    this._index.Rebuild();
                }
            }
        }