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>()); }
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>()); }