Exemple #1
0
        private RequestJobXML CreateDummyFromSearchKey(byte[] key)
        {
            if (key == null)
            {
                throw new ArgumentNullException("key");
            }
            RequestJobXML requestJobXML = RequestJobBase.CreateDummyObject <RequestJobXML>();

            requestJobXML.Identity     = new RequestJobObjectId(new Guid(key), this.MdbGuid, null);
            requestJobXML.RequestGuid  = new Guid(key);
            requestJobXML.ExchangeGuid = new Guid(key);
            return(requestJobXML);
        }
 protected override IConfigurable PrepareDataObject()
 {
     try
     {
         if (base.ParameterSetName.Equals("Identity"))
         {
             TransactionalRequestJob transactionalRequestJob = (TransactionalRequestJob)base.PrepareDataObject();
             if (transactionalRequestJob == null)
             {
                 if (this.mrCondition == RemoveMoveRequest.MoveRequestCondition.None)
                 {
                     this.mrCondition = RemoveMoveRequest.MoveRequestCondition.MissingMR;
                 }
                 MrsTracer.Cmdlet.Warning("Move Request is missing in the MDB", new object[0]);
                 transactionalRequestJob = RequestJobBase.CreateDummyObject <TransactionalRequestJob>();
             }
             return(transactionalRequestJob);
         }
         base.LocalADUser = null;
         MailboxDatabase mailboxDatabase = (MailboxDatabase)base.GetDataObject <MailboxDatabase>(this.MoveRequestQueue, base.ConfigSession, null, new LocalizedString?(Strings.ErrorMailboxDatabaseNotFound(this.MoveRequestQueue.ToString())), new LocalizedString?(Strings.ErrorMailboxDatabaseNotUnique(this.MoveRequestQueue.ToString())));
         MailboxTaskHelper.VerifyDatabaseIsWithinScopeForRecipientCmdlets(base.SessionSettings, mailboxDatabase, new Task.ErrorLoggerDelegate(base.WriteError));
         Guid guid = mailboxDatabase.Guid;
         this.moveRequestQueueName    = mailboxDatabase.ToString();
         base.MRProvider.AllowInvalid = true;
         return((TransactionalRequestJob)base.MRProvider.Read <TransactionalRequestJob>(new RequestJobObjectId(this.MailboxGuid, guid, null)));
     }
     catch (MapiExceptionMdbOffline e)
     {
         this.HandleMdbDownException(e);
     }
     catch (MapiExceptionLogonFailed e2)
     {
         this.HandleMdbDownException(e2);
     }
     return(RequestJobBase.CreateDummyObject <TransactionalRequestJob>());
 }
Exemple #3
0
        public IConfigurable Read <T>(ObjectId identity, ReadJobFlags readJobFlags) where T : IConfigurable, new()
        {
            if (identity == null)
            {
                throw new ArgumentNullException("identity", "The identity of the object to be read must be specified.");
            }
            if (!(identity is RequestJobObjectId))
            {
                throw new ArgumentException("RequestJobProvider can only identify RequestJobs based on RequestJobObjectIds.", "identity");
            }
            if (!typeof(T).Equals(typeof(TransactionalRequestJob)) && !RequestJobProvider.IsRequestStatistics(typeof(T), true))
            {
                throw new ArgumentException("RequestJobProvider can only Read *RequestStatistics or TransactionalRequestJob objects.");
            }
            bool flag = false;

            if (typeof(T).Equals(typeof(TransactionalRequestJob)))
            {
                flag = true;
            }
            RequestJobObjectId requestJobObjectId = (RequestJobObjectId)identity;
            Guid requestGuid = requestJobObjectId.RequestGuid;
            Guid mdbGuid     = requestJobObjectId.MdbGuid;

            byte[]                    messageId  = requestJobObjectId.MessageId;
            ADUser                    aduser     = requestJobObjectId.User;
            ADUser                    aduser2    = requestJobObjectId.SourceUser;
            ADUser                    aduser3    = requestJobObjectId.TargetUser;
            IRequestIndexEntry        indexEntry = requestJobObjectId.IndexEntry;
            List <IRequestIndexEntry> list       = new List <IRequestIndexEntry>();

            if (requestGuid == Guid.Empty || mdbGuid == Guid.Empty)
            {
                throw new NotEnoughInformationToFindMoveRequestPermanentException();
            }
            this.EnsureStoreConnectionExists(mdbGuid);
            MoveObjectInfo <RequestJobXML> moveObjectInfo = null;
            IConfigurable result;

            try
            {
                moveObjectInfo = new MoveObjectInfo <RequestJobXML>(mdbGuid, this.store, messageId, RequestJobXML.RequestJobsFolderName, RequestJobXML.RequestJobsMessageClass, RequestJobXML.CreateMessageSubject(requestGuid), RequestJobXML.CreateMessageSearchKey(requestGuid));
                RequestJobXML requestJobXML = null;
                if (moveObjectInfo.OpenMessage())
                {
                    if (moveObjectInfo.CheckObjectType(new MoveObjectInfo <RequestJobXML> .IsSupportedObjectTypeDelegate(RequestJobXML.IsMessageTypeSupported)))
                    {
                        requestJobXML = moveObjectInfo.ReadObject(ReadObjectFlags.DontThrowOnCorruptData);
                    }
                    else
                    {
                        MrsTracer.Common.Warning("Found unexpected JobType for move job {0}", new object[]
                        {
                            requestJobObjectId.ToString()
                        });
                    }
                    if (requestJobXML == null)
                    {
                        if (!this.AllowInvalid)
                        {
                            return(null);
                        }
                        requestJobXML              = RequestJobBase.CreateDummyObject <RequestJobXML>();
                        requestJobXML.RequestGuid  = requestGuid;
                        requestJobXML.ExchangeGuid = requestGuid;
                    }
                    requestJobXML.OriginatingMDBGuid = mdbGuid;
                    if (requestJobXML.Identity == null)
                    {
                        requestJobXML.Identity = requestJobObjectId;
                    }
                    requestJobXML.Identity.MessageId = moveObjectInfo.MessageId;
                    RequestJobProvider.FixTenantInfo(requestJobXML);
                    if (!requestJobXML.IsFake)
                    {
                        using (this.IndexProvider.RescopeTo(requestJobXML.DomainControllerToUpdate, requestJobXML.OrganizationId))
                        {
                            if (aduser == null && requestJobXML.UserId != null)
                            {
                                aduser = this.IndexProvider.ReadADUser(requestJobXML.UserId, requestJobXML.ExchangeGuid);
                            }
                            if (aduser2 == null && requestJobXML.SourceUserId != null)
                            {
                                aduser2 = this.IndexProvider.ReadADUser(requestJobXML.SourceUserId, requestJobXML.SourceExchangeGuid);
                            }
                            if (aduser3 == null && requestJobXML.TargetUserId != null)
                            {
                                aduser3 = this.IndexProvider.ReadADUser(requestJobXML.TargetUserId, requestJobXML.TargetExchangeGuid);
                            }
                            if (!typeof(T).Equals(typeof(MoveRequestStatistics)) && requestJobXML.RequestType != MRSRequestType.Move && requestJobXML.IndexIds != null && requestJobXML.IndexIds.Count > 0)
                            {
                                int  capacity = requestJobXML.IndexIds.Count - 1;
                                bool flag2    = false;
                                List <RequestIndexEntryObjectId> list2 = new List <RequestIndexEntryObjectId>(capacity);
                                foreach (RequestIndexId requestIndexId in requestJobXML.IndexIds)
                                {
                                    if (indexEntry != null && requestIndexId.Equals(indexEntry.RequestIndexId))
                                    {
                                        if (!flag2)
                                        {
                                            list.Add(indexEntry);
                                        }
                                        flag2 = true;
                                    }
                                    else if (readJobFlags.HasFlag(ReadJobFlags.SkipReadingMailboxRequestIndexEntries) && requestIndexId.Location == RequestIndexLocation.Mailbox)
                                    {
                                        MrsTracer.Common.Debug("Skipping loading of an IRequestIndexEntry found in a mailbox.", new object[0]);
                                    }
                                    else
                                    {
                                        list2.Add(new RequestIndexEntryObjectId(requestJobXML.RequestGuid, requestJobXML.TargetExchangeGuid, requestJobXML.RequestType, requestJobXML.OrganizationId, requestIndexId, null));
                                    }
                                }
                                foreach (RequestIndexEntryObjectId objectId in list2)
                                {
                                    IRequestIndexEntry requestIndexEntry = this.IndexProvider.Read(objectId);
                                    if (requestIndexEntry != null)
                                    {
                                        list.Add(requestIndexEntry);
                                    }
                                }
                            }
                            if (this.IndexProvider.DomainController == null && !string.IsNullOrEmpty(requestJobXML.DomainControllerToUpdate))
                            {
                                requestJobXML.DomainControllerToUpdate = null;
                            }
                        }
                    }
                    requestJobXML.User         = aduser;
                    requestJobXML.SourceUser   = aduser2;
                    requestJobXML.TargetUser   = aduser3;
                    requestJobXML.IndexEntries = list;
                    if (!readJobFlags.HasFlag(ReadJobFlags.SkipValidation))
                    {
                        requestJobXML.ValidateRequestJob();
                    }
                    if (this.AllowInvalid)
                    {
                        ValidationError[] array = requestJobXML.Validate();
                        if (array != null && array.Length > 0)
                        {
                            requestJobXML.IsFake = true;
                        }
                    }
                    if (flag)
                    {
                        TransactionalRequestJob transactionalRequestJob = new TransactionalRequestJob(requestJobXML);
                        requestJobXML.Retire();
                        transactionalRequestJob.Provider   = this;
                        transactionalRequestJob.MoveObject = moveObjectInfo;
                        moveObjectInfo = null;
                        result         = transactionalRequestJob;
                    }
                    else
                    {
                        RequestStatisticsBase requestStatisticsBase = RequestJobProvider.CreateRequestStatistics(typeof(T), requestJobXML, true);
                        if (requestStatisticsBase == null)
                        {
                            requestStatisticsBase = new MoveRequestStatistics(requestJobXML);
                            requestJobXML.Retire();
                        }
                        if (this.LoadReport)
                        {
                            ReportData reportData = new ReportData(requestStatisticsBase.IdentifyingGuid, requestStatisticsBase.ReportVersion);
                            reportData.Load(this.SystemMailbox);
                            requestStatisticsBase.Report = reportData.ToReport();
                        }
                        result = requestStatisticsBase;
                    }
                }
                else
                {
                    result = null;
                }
            }
            finally
            {
                if (moveObjectInfo != null)
                {
                    moveObjectInfo.Dispose();
                    moveObjectInfo = null;
                }
            }
            return(result);
        }
 protected override IConfigurable PrepareDataObject()
 {
     this.brokenIndexEntry = null;
     this.indexEntries.Clear();
     try
     {
         if (base.ParameterSetName.Equals("Identity"))
         {
             TransactionalRequestJob transactionalRequestJob = (TransactionalRequestJob)base.PrepareDataObject();
             if (transactionalRequestJob == null)
             {
                 if (this.requestCondition == RemoveRequest <TIdentity> .RequestCondition.None)
                 {
                     this.requestCondition = RemoveRequest <TIdentity> .RequestCondition.MissingRJ;
                     this.indexEntries.Add(base.IndexEntry);
                 }
                 else
                 {
                     this.indexEntries.Add(this.brokenIndexEntry);
                 }
                 MrsTracer.Cmdlet.Warning("Request is missing from the MDB", new object[0]);
                 transactionalRequestJob = RequestJobBase.CreateDummyObject <TransactionalRequestJob>();
             }
             else
             {
                 this.indexEntries.AddRange(transactionalRequestJob.IndexEntries);
                 if (!this.indexEntries.Contains(base.IndexEntry))
                 {
                     this.indexEntries.Add(base.IndexEntry);
                 }
             }
             return(transactionalRequestJob);
         }
         base.IndexEntry = null;
         MailboxDatabase mailboxDatabase = (MailboxDatabase)base.GetDataObject <MailboxDatabase>(this.RequestQueue, base.ConfigSession, null, new LocalizedString?(Strings.ErrorMailboxDatabaseNotFound(this.RequestQueue.ToString())), new LocalizedString?(Strings.ErrorMailboxDatabaseNotUnique(this.RequestQueue.ToString())));
         MailboxTaskHelper.VerifyDatabaseIsWithinScopeForRecipientCmdlets(base.CurrentOrgConfigSession.SessionSettings, mailboxDatabase, new Task.ErrorLoggerDelegate(base.WriteError));
         Guid guid = mailboxDatabase.Guid;
         this.requestQueueName        = mailboxDatabase.ToString();
         base.RJProvider.AllowInvalid = true;
         TransactionalRequestJob transactionalRequestJob2 = null;
         try
         {
             transactionalRequestJob2 = (TransactionalRequestJob)base.RJProvider.Read <TransactionalRequestJob>(new RequestJobObjectId(this.RequestGuid, guid, null));
             if (transactionalRequestJob2 != null)
             {
                 if (transactionalRequestJob2.TargetUser != null && transactionalRequestJob2.TargetUserId != null)
                 {
                     this.ResolveADUser(transactionalRequestJob2.TargetUserId);
                 }
                 if (transactionalRequestJob2.SourceUser != null && transactionalRequestJob2.SourceUserId != null)
                 {
                     this.ResolveADUser(transactionalRequestJob2.SourceUserId);
                 }
             }
             TransactionalRequestJob result = transactionalRequestJob2;
             transactionalRequestJob2 = null;
             return(result);
         }
         finally
         {
             if (transactionalRequestJob2 != null)
             {
                 transactionalRequestJob2.Dispose();
                 transactionalRequestJob2 = null;
             }
         }
     }
     catch (MapiExceptionMdbOffline e)
     {
         this.HandleMdbDownException(e);
         this.indexEntries.Add(base.IndexEntry);
     }
     catch (MapiExceptionLogonFailed e2)
     {
         this.HandleMdbDownException(e2);
         this.indexEntries.Add(base.IndexEntry);
     }
     return(RequestJobBase.CreateDummyObject <TransactionalRequestJob>());
 }