コード例 #1
0
 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);
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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;
        }