public static string GetOtherRequests(ADUser user, Guid?requestGuid) { IEnumerable <IRequestIndexEntry> requestIndexEntries = MailboxRequestIndexEntryHandler.GetRequestIndexEntries(user, null); IEnumerable <IRequestIndexEntry> source = from r in requestIndexEntries where !MailboxRelocationRequestStatistics.IsTerminalState(r.Status) && (requestGuid == null || r.RequestGuid != requestGuid) select r; List <IRequestIndexEntry> list = new List <IRequestIndexEntry>(); foreach (IGrouping <ADObjectId, IRequestIndexEntry> grouping in from r in source group r by r.StorageMDB) { using (RequestJobProvider requestJobProvider = new RequestJobProvider(grouping.Key.ObjectGuid)) { foreach (IRequestIndexEntry requestIndexEntry in grouping) { TransactionalRequestJob transactionalRequestJob = (TransactionalRequestJob)requestJobProvider.Read <TransactionalRequestJob>(requestIndexEntry.GetRequestJobId(), ReadJobFlags.SkipValidation | ReadJobFlags.SkipReadingMailboxRequestIndexEntries); if (transactionalRequestJob != null && !MailboxRelocationRequestStatistics.IsTerminalState(transactionalRequestJob)) { list.Add(requestIndexEntry); } } } } return(string.Join <Guid>(", ", from r in list select r.RequestGuid)); }
private static bool ValidateNoOtherRequests(RequestJobBase requestJobBase) { IEnumerable <RequestIndexId> source = from i in requestJobBase.IndexEntries select i.RequestIndexId into i where i.Location == RequestIndexLocation.Mailbox select i; if (source.Any((RequestIndexId i) => i.Mailbox.Equals(requestJobBase.UserId))) { string otherRequests = MailboxRequestIndexEntryHandler.GetOtherRequests(requestJobBase.User, new Guid?(requestJobBase.RequestGuid)); if (!string.IsNullOrEmpty(otherRequests)) { requestJobBase.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJobBase.ValidationMessage = MrsStrings.ValidationObjectInvolvedInMultipleRelocations(MrsStrings.Mailbox, otherRequests); return(false); } } if (requestJobBase.User.UnifiedMailbox != null) { ADRecipient tempRecipient; if (ADRecipient.TryGetFromCrossTenantObjectId(requestJobBase.User.UnifiedMailbox, out tempRecipient).Succeeded&& source.Any((RequestIndexId i) => i.Mailbox.Equals(tempRecipient.Id))) { string otherRequests = MailboxRequestIndexEntryHandler.GetOtherRequests((ADUser)tempRecipient, new Guid?(requestJobBase.RequestGuid)); if (!string.IsNullOrEmpty(otherRequests)) { requestJobBase.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJobBase.ValidationMessage = MrsStrings.ValidationObjectInvolvedInMultipleRelocations(MrsStrings.SourceContainer, otherRequests); return(false); } } } if (requestJobBase.TargetUnifiedMailboxId != null) { ADRecipient tempRecipient; if (ADRecipient.TryGetFromCrossTenantObjectId(requestJobBase.TargetUnifiedMailboxId, out tempRecipient).Succeeded&& source.Any((RequestIndexId i) => i.Mailbox.Equals(tempRecipient.Id))) { string otherRequests = MailboxRequestIndexEntryHandler.GetOtherRequests((ADUser)tempRecipient, new Guid?(requestJobBase.RequestGuid)); if (!string.IsNullOrEmpty(otherRequests)) { requestJobBase.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJobBase.ValidationMessage = MrsStrings.ValidationObjectInvolvedInMultipleRelocations(MrsStrings.TargetContainer, otherRequests); return(false); } } } return(true); }
public override IEnumerable <MRSRequestMailboxEntry> FindPaged(RequestIndexEntryProvider requestIndexEntryProvider, QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy, int pageSize) { RequestIndexEntryQueryFilter requestIndexEntryQueryFilter = filter as RequestIndexEntryQueryFilter; ADUser aduser = requestIndexEntryProvider.ReadADUser(requestIndexEntryQueryFilter.MailboxId, Guid.Empty); if (aduser == null) { return(null); } List <MRSRequestMailboxEntry> list = new List <MRSRequestMailboxEntry>(MailboxRequestIndexEntryHandler.GetRequestIndexEntries(aduser, requestIndexEntryQueryFilter)); foreach (MRSRequestMailboxEntry mrsrequestMailboxEntry in list) { mrsrequestMailboxEntry.RequestIndexId = new RequestIndexId(requestIndexEntryQueryFilter.MailboxId); mrsrequestMailboxEntry.OrganizationId = aduser.OrganizationId; } return(list); }