private void RunItemSaved(Item item, ItemChanges itemChanges) { var db = item.Database; var rulesEngine = new RulesEngine(db); try { using (new SecurityDisabler()) { var redirectFolderItem = GetRedirectFolderItem(item); if (redirectFolderItem == null) { return; } if (item.IsRedirectFolderItem()) { Log.Info(this, db, "Clearing cached inbound rules (reason: Redirect Folder [{0}] saves)", item.Paths.FullPath); rulesEngine.ClearInboundRuleCache(); } else if (item.IsOutboundRuleItem()) { Log.Info(this, db, "Refreshing Outbound Rule [{0}] after save event", item.Paths.FullPath); rulesEngine.RefreshRule(item, redirectFolderItem); } else if (item.IsSimpleRedirectItem()) { if (rulesEngine.CanRefreshInboundRule(item, redirectFolderItem)) { Log.Info(this, db, "Refreshing Simple Redirect [{0}] after save event", item.Paths.FullPath); rulesEngine.RefreshRule(item, redirectFolderItem); } else { Log.Info(this, db, "Simple Redirect [{0}] cannot be individually refreshed after save event. Clearing inbound rule cache.", item.Paths.FullPath); rulesEngine.ClearInboundRuleCache(); ; } } else if (item.IsInboundRuleItem()) { if (rulesEngine.CanRefreshInboundRule(item, redirectFolderItem)) { Log.Info(this, db, "Refreshing Inbound Rule [{0}] after save event", item.Paths.FullPath); rulesEngine.RefreshRule(item, redirectFolderItem); } else { Log.Info(this, db, "Inbound Rule [{0}] cannot be individually refreshed after save event. Clearing inbound rule cache.", item.Paths.FullPath); rulesEngine.ClearInboundRuleCache(); } } else if (item.IsRedirectType() && item.IsInboundRuleItemChild() && db.Name.Equals("master", StringComparison.CurrentCultureIgnoreCase)) { var inboundRuleItem = item.Parent; var inboundRule = new InboundRuleItem(inboundRuleItem); inboundRule.BeginEdit(); inboundRule.Action.InnerField.SetValue(item.ID.ToString(), false); inboundRule.EndEdit(); } else if (item.IsInboundRuleItemChild()) { if (rulesEngine.CanRefreshInboundRule(item.Parent, redirectFolderItem)) { Log.Info(this, db, "Refreshing Inbound Rule [{0}] after save event", item.Parent.Paths.FullPath); rulesEngine.RefreshRule(item.Parent, redirectFolderItem); } else { Log.Info(this, db, "Inbound Rule [{0}] cannot be individually refreshed after save event. Clearing inbound rule cache.", item.Parent.Paths.FullPath); rulesEngine.ClearInboundRuleCache(); } } else if (item.IsOutboundRuleItemChild()) { Log.Info(this, db, "Refreshing Outbound Rule [{0}] after save event", item.Parent.Paths.FullPath); rulesEngine.RefreshRule(item.Parent, redirectFolderItem); } } } catch (Exception ex) { Log.Error(this, ex, db, "Exception occured when saving item after save - Item ID: {0} Item Path: {1}", item.ID, item.Paths.FullPath); } }