2016-03-18 1 views
0

Я только начал использовать веб-службы Microsoft Exchange в первый раз. Хотите, я хочу быть в состоянии сделать это следующим образом:Обмен веб-службами находит элемент по уникальному идентификатору

  • Создать собрание
  • Meeting
  • Update
  • Отмена/Удалить Встреча

Эти встречи создаются в приложении ASP.NET MVC и сохранен в базе данных SQL Server. Я просто хочу интегрировать это с сервером Exchange на сервере. До сих пор я в состоянии создал свою встречу со следующим кодом:

public static Task<string> CreateMeetingAsync(string from, List<string> to, string subject, string body, string location, DateTime begin, DateTime end) 
{ 
    var tcs = new TaskCompletionSource<string>(); 

    try 
    { 
     ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013); 
     service.Credentials = CredentialCache.DefaultNetworkCredentials; 
     //service.UseDefaultCredentials = true; 

     // I suspect the Service URL needs to be set from the user email address because this is then used to set the organiser 
     // of the appointment constructed below. The Organizer is a read-only field that cannot be manually set. (security measure) 
     service.AutodiscoverUrl(from); 
     //service.Url = new Uri(WebConfigurationManager.AppSettings["ExchangeServer"]); 

     Appointment meeting = new Appointment(service); 

     meeting.Subject = subject; 
     meeting.Body = "<span style=\"font-family:'Century Gothic'\" >" + body + "</span><br/><br/><br/>"; 
     meeting.Body.BodyType = BodyType.HTML; 
     meeting.Start = begin; 
     meeting.End = end; 
     meeting.Location = location; 
     meeting.ReminderMinutesBeforeStart = 60; 

     foreach (string attendee in to) 
     { 
      meeting.RequiredAttendees.Add(attendee); 
     } 
     meeting.Save(SendInvitationsMode.SendToAllAndSaveCopy); 
     tcs.TrySetResult(meeting.Id.UniqueId); 
    } 
    catch (Exception ex) 
    { 
     tcs.TrySetException(ex); 
    } 

    return tcs.Task; 
} 

Это успешно создает свою встречу, помещает его в календаре пользователя в мировоззрении и отправляет запрос на собрание всех участников. Я заметил следующее исключение при попытке называть meeting.Save(SendInvitationsMode.SendToAllAndSaveCopy); дважды:

Эта операция не может быть выполнена, поскольку этот служебный объект уже имеет идентификатор. Чтобы обновить этот объект службы, используйте метод Update().

Я думал: отлично, это сохраняет объект в обмен на уникальный идентификатор. Я сохраню этот идентификатор в базе данных моего приложения и позже его удалю, чтобы отредактировать/отменить встречу. Именно поэтому я возвращаю ID: tcs.TrySetResult(meeting.Id.UniqueId);

Это сохраненное красиво в базе данных моего приложения:

enter image description here

Теперь я пытаюсь сделать следующую часть, где я обновляю встречу, но я не могу найти способ поиска элемента на основе уникального идентификатора, который я сохраняю. В качестве примера я нашел на code.msdn использует метод service.FindItems() с запросом, который ищет тему:

string querystring = "Subject:Lunch"; 
FindItemsResults<Item> results = service.FindItems(WellKnownFolderName.Calendar, querystring, view); 

мне не нравится это. Может возникнуть вероятность того, что пользователь создал собрание вне моего приложения, которое по совпадению имеет тот же вопрос, и вот пришло мое приложение и отменило его. Я попытался определить, возможно ли использовать уникальный идентификатор в строке запроса, но это не выглядит possible.

Я заметил на приведенной выше строке строки запроса, что последнее свойство, которое вы можете найти, - это свойство (свойство не указано), которое выполняет поиск во всех свойствах фазы слова. Я попытался таким образом, просто поставив идентификатор в запрос, но не возвращает никаких результатов:

FindItemsResults<Item> results = service.FindItems(WellKnownFolderName.Calendar, "AAMkADJhZDQzZWFmLWYxYTktNGI1Yi1iZTA5LWVmOTE3MmJiMGIxZgBGAAAAAAAqhOzrXRdvRoA6yPu9S/XnBwDXvBDBMebkTqUWix3HxZrnAAAA2LKLAAB5iS34oLxkSJIUht/+h9J1AAFlEVLAAAA=", view); 

ответ

2

Используйте Appointment.Bind статической функции, обеспечивая объект службы и ItemId сохраняется в базе данных. Имейте в виду, что рабочий процесс встречи (приглашение, принятие, отклонение) может воссоздать собрание в одном календаре с новым ItemId. Но если вы просто смотрите на собрание, которое вы делаете в своем календаре, вы должны быть в порядке.