public DeferredActionWorkItem GetDeferredActionWorkItem(string provider) { foreach (WorkItem workItem in this.workItems) { DeferredActionWorkItem deferredActionWorkItem = workItem as DeferredActionWorkItem; if (deferredActionWorkItem != null && string.Equals(deferredActionWorkItem.Provider, provider, StringComparison.OrdinalIgnoreCase)) { return(deferredActionWorkItem); } } return(null); }
private DeferredActionWorkItem CreateWorkItemForDefer(FolderEvaluationResult result, RuleAction action, int actionIndex) { string provider = this.context.CurrentRule.Provider; DeferredActionWorkItem deferredActionWorkItem = result.GetDeferredActionWorkItem(provider); if (deferredActionWorkItem == null) { this.context.TraceDebug <string>("Create Deferred Action Message for provider {0}", provider); deferredActionWorkItem = new DeferredActionWorkItem(this.context, this.context.CurrentRule.Provider, actionIndex); result.AddWorkItem(deferredActionWorkItem); } deferredActionWorkItem.AddAction(action); return(deferredActionWorkItem); }
private void CreateWorkItemForExternalMove(FolderEvaluationResult result, RuleAction.ExternalMove action, int actionIndex) { if (this.context.CurrentRule.IsExtended) { this.context.TraceError("Extended Rule is configured to move to an out-of-mailbox folder. Marking the rule in error"); this.context.MarkRuleInError(this.context.CurrentRule, action.ActionType, actionIndex, DeferredError.RuleError.Execution); } if (this.context.ShouldSkipMoveRule) { return; } if (result.IsMessageMoved) { this.context.TraceDebug("Message is moved by a previous rule/action. Treat move as copy"); this.CreateWorkItemForExternalCopy(result, new RuleAction.ExternalCopy(action.StoreEntryID, action.FolderEntryID), actionIndex); return; } this.context.TraceDebug("Move to an external store"); DeferredActionWorkItem deferredActionWorkItem = this.CreateWorkItemForDefer(result, action, actionIndex); deferredActionWorkItem.MoveToStoreEntryId = action.StoreEntryID; deferredActionWorkItem.MoveToFolderEntryId = action.FolderEntryID; result.IsMessageMoved = true; }