Search
Write a publication
Pull to refresh

Работа с Exchange Web Services Managed API

Не так давно на работе была поставлена задача сделать автоматическую выгрузку задач из основной HRM-системы задач в Outlook пользователей.

Exchange Web Services Managed API позволяет наиболее просто работать с Exchange Server.

Далее основные моменты работы с EWS с примерами на C#.

Был создан специальный пользователь, которому были установлены необходимые разрешения на папки «Задачи» остальных пользователей.

Сначала необходимо создать экземпляр класса ExchangeService (пример для версии 2007) и аутентифицироваться под нужным пользователем:
  1. ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
  2. service.Credentials = new WebCredentials("user", "pass", "domain");
* This source code was highlighted with Source Code Highlighter.

Далее необходимо указать url для работы с сервером вручную:
  1. service.Url = new Uri("https://server.ru/EWS/Exchange.asmx");
* This source code was highlighted with Source Code Highlighter.

или автоматически по e-mail:
  1. service.AutodiscoverUrl("user@server.ru");
* This source code was highlighted with Source Code Highlighter.

Далее можно создать задачу другому пользователю:
  1. Task task = new Task(service);
  2.  
  3. //Дата начала
  4. task.StartDate = new DateTime(2010, 3, 15, 0, 0, 0);
  5. //Срок
  6. task.DueDate = new DateTime(2010, 3, 17, 0, 0, 0);
  7. //Тема   
  8. task.Subject = "Купить слона";
  9. //Назначить категорию
  10. task.Categories.Add("Срочное");
  11.  
  12. //Найти папку Задачи пользователя user2@sever.ru
  13. Folder tasksFolder = Folder.Bind(service, new FolderId(WellKnownFolderName.Tasks, "user2@sever.ru"));
  14.  
  15. //Сохранить задачу
  16. task.Save(tasksFolder.Id);
* This source code was highlighted with Source Code Highlighter.

Найти уже существующую задачу:
  1. List<SearchFilter> searchFilterCollection = new List<SearchFilter>();
  2. //По теме
  3. searchFilterCollection.Add(new SearchFilter.ContainsSubstring(ItemSchema.Subject, "Купить слона"));
  4. SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchFilterCollection.ToArray());
  5.  
  6.  
  7. ItemView view = new ItemView(50);
  8.  
  9. view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, ItemSchema.DateTimeReceived);
  10. view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
  11. view.Traversal = ItemTraversal.Shallow;
  12.  
  13. //Искать задачи в папке Задачи пользователя user2@server.ru
  14. Folder tasksFolder = Folder.Bind(service, new FolderId(WellKnownFolderName.Tasks, "user2@server.ru" ));
  15.  
  16. FindItemsResults<Item> findResults = service.FindItems(tasksFolder.Id, searchFilter, view);
  17.  
  18. //Пройтись по всем найденным элементам
  19. foreach (Item myItem in findResults.Items)
  20. {
  21.   if (myItem is Task)
  22.   {
  23.     //Что-нибудь делаем с myItem.Id
  24.   }
  25. }
* This source code was highlighted with Source Code Highlighter.

Удалить найденную задачу:
  1. Task task = Task.Bind(service, myItem.Id);
  2. task.Delete(DeleteMode.HardDelete);
* This source code was highlighted with Source Code Highlighter.

Обновить найденную задачу:
  1. Task task = Task.Bind(service, myItem.Id);
  2.  
  3. task.StartDate = new DateTime(2010, 7, 1, 0, 0, 0);
  4. task.DueDate = new DateTime(2010, 7, 15, 0, 0, 0);
  5. task.Subject = "Продать слона";
  6. task.Categories.Clear();
  7. task.Categories.Add("Не срочно");
  8.  
  9. task.Update(ConflictResolutionMode.AlwaysOverwrite);
* This source code was highlighted with Source Code Highlighter.

Ссылки по теме:
Exchange Web Services Managed API 1.0 SDK:
msdn.microsoft.com/en-us/library/dd633710%28v=EXCHG.80%29.aspx
Скачать Exchange Web Services Managed API:
www.microsoft.com/downloads/details.aspx?FamilyID=C3342FB3-FBCC-4127-BECF-872C746840E1&displaylang=en&displaylang=en
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.