Задача состоит в перемещении нескольких элементов из одной папки в другую без использования каких-либо циклов (которые в основном перемещают по одному элементу за раз, а затем повторяют процесс снова и снова). На самом деле, я говорю о эквиваленте C# для выбора нескольких элементов в папке в Outlook и перемещения их в другом месте. Есть ли способ сделать это, или я все-таки зациклился на петлях? Заранее спасибо.Перемещение нескольких элементов между папками Outlook - C#
ответ
Хотя иногда было бы хорошо иметь возможность перемещать кучу сообщений сразу, простой ответ - вы не можете.
API EWS не предоставляет способ перемещения списка сообщений одновременно, а только способ перемещения отдельного сообщения в другую папку. Таким образом, вы застреваете в своих сообщениях и перемещаете их по отдельности.
Который, кстати, как перспективы, кажется, это сделать ... так что в этом отношении вы по крайней мере выполнения этого требования :)
Очевидно, Outlook делает это с каким-то другим алгоритмом, чем простой цикл. Если вы пропустите 100 сообщений, чтобы удалить их через item.Delete(), для прохождения через все из них требуется от 10 до 15 секунд. Если вы выберете 100 сообщений в папке «Входящие» и нажмите «Удалить» - они сразу перейдут в «Удаленные элементы». Это миссия - добиться аналогичной производительности. – Onewinged
@Onewinged Если вы удалите несколько тысяч записей сразу, требуется время, чтобы пройти через все их. Он делает это довольно быстро, но это не мгновенно. Если он работает быстрее, вероятно, потому, что Microsoft имеет закрытый API, который использует Outlook. На протяжении многих лет они строили всевозможные вещи в своих системах, поэтому меня не удивило бы, что Outlook имеет свой собственный способ общения с Exchange, который никто не может использовать. – Corey
Я думаю, вам нужен цикл, как Еогеасп, в то время как для повторного набора коллекции выбранных вами почтовых элементов.
Объектная модель Outlook не предоставляет способ перемещения нескольких элементов одновременно. Используйте метод Move класса MailItem для перемещения элементов в цикле.
На расширенном уровне MAPI (только C++ или Delphi) IMAPIFolder::CopyMessages(MESSAGE_MOVE) принимает список идентификаторов ввода и, таким образом, позволяет перемещать или копировать несколько сообщений за один раз.
Модель объекта Outlook, однако, позволяет копировать или перемещать только одно сообщение за раз. Если используется Redemption (любой язык), он предоставляет методы RDOFolder.Items.MoveMultiple/CopyMultiple
, которые принимают список «;» или CR/LF, или массив идентификаторов или элементов ввода.
Да, вы можете перемещать элементы без использования цикла с использованием EWS API. Цикл do while
, используемый здесь, состоит в том, чтобы прокручивать страницы, так как ItemView
имеет размер 100. Вы можете изменить эту логику по своему усмотрению. Но я не зациклился на findResults
, который представляет собой набор электронных писем.
Здесь я предполагаю, что папка «Test» находится под корневой папкой. Если папка является подпапкой под Inbox, измените ее на WellKnownFolderName.Inbox
List<SearchFilter> searchFilterCollection = new List<SearchFilter>();
searchFilterCollection.Add(new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, searchFilterCollection);
ItemView view = new ItemView(100);
view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject);
view.Traversal = ItemTraversal.Shallow;
FindItemsResults<Item> findResults;
do
{
findResults = service.FindItems(new FolderId(WellKnownFolderName.Inbox, new Mailbox(user)), searchFilter, view);
var itemIds = from item in findResults
select item.Id;
service.MoveItems(itemIds,
(Folder.Bind(service, WellKnownFolderName.MsgFolderRoot)
.FindFolders(new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Test"), new FolderView(1))
.FirstOrDefault(x => x.DisplayName == "Test")).Id);
view.Offset = Convert.ToInt32(findResults.NextPageOffset);
} while (findResults.MoreAvailable);
- 1. Перемещение файлов между папками
- 2. R - перемещение нескольких файлов между папками
- 3. Перемещение элементов между папками в списке SharePoint 2010
- 4. Пакетное перемещение с папками
- 5. Перемещение элементов между ArrayLists
- 6. перемещение нескольких элементов управления
- 7. Перемещение элементов между списками
- 8. Перемещение элементов между двумя хэшетами C#
- 9. Перемещение элементов из моего приложения C# в Outlook 2003/2007?
- 10. Перемещение нескольких элементов в ArrayList
- 11. Перемещение элементов Python между списками
- 12. Перемещение между различными папками на FTP-сервере с помощью Python
- 13. Перемещение элементов между массивами в ядре CUDA
- 14. windows.form C# перемещение между формами
- 15. Передача файлов между папками
- 16. Перемещение элементов между объектами с помощью Java
- 17. Перемещение сообщений с Outlook VBA
- 18. Изменение примера холста Paperjs Перемещение нескольких элементов
- 19. Перетаскивание предотвращает одновременное перемещение нескольких элементов.
- 20. Перемещение нескольких элементов в пределах дочернего элемента
- 21. Objective-C Перемещение элементов между массивами (Управление памятью)
- 22. Исключение между C# и Outlook
- 23. Перемещение элементов между списками с помощью jQuery
- 24. Перемещение редактируемых элементов между двумя отдельными списками?
- 25. Перемещение элементов между несколькими элементами управления ListBox
- 26. Перемещение элементов между массивами в vue.js
- 27. Перемещение элементов управления Telerik между машинами
- 28. PHP - Передача сеансов между папками
- 29. Взаимосвязь между двумя папками - Alfresco
- 30. Обмен папками между экземплярами alfresco?
Возникает ли это из-за какого-то теста? – kayess