Веб-служба Exchange управляется, получайте удаленные встречи - PullRequest
7 голосов
/ 14 сентября 2011

Я собираюсь написать ews-приложение для связи exchange с другой программой календаря. Что со мной произошло, как мне узнать, какие встречи удаляются при обмене? Есть ли способ сказать? Я не смог найти его в API и документации.

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 15 сентября 2011

В зависимости от того, как пользователь удаляет встречу (или любой элемент), выполняются разные действия:

  • Мягкое удаление: элемент перемещается в корзину почтового ящика.
  • Hard-Delete: Элемент мгновенно удаляется.

У вас есть несколько способов получить информацию об удаленных элементах:

  • Запросите папку с помощью вызова FindItems и выберите ItemTraversal.Associated в свойстве Traversal ItemView. Примечание. Для этого требуется Exchange 2010.
  • Используйте SyncFolderItems за один раз и сохраните файл синхронизации где-нибудь. Позже выполните SyncFolderItems снова, используя ранее сохраненный файл cookie. Exchange теперь предоставит вам подробный список изменений, которые произошли с этой папкой.
  • Запрос корзины для встреч. Скорее всего, они будут взяты из календаря пользователя по умолчанию.
0 голосов
/ 13 мая 2014

Я написал службу, которая синхронизирует встречи календаря EWS с таблицей SQL.

Для удаления после вставки / обновления изменений, если в базе данных есть строка, а не в EWS, я ее удалю, поскольку это означает, что она была удалена в Exchange.Я использую GUID для отслеживания встречи в базе данных и обмена. Веб-службы Exchange: почему ItemId не является постоянным?[продолжение]

Производительность приличная, всего пара десятков встреч, я опробую ее на гораздо большем наборе данных.

Dim appointmentGuid As New List(Of String)
For Each appointment In appointments 'appointments is IEnumerable(Of Appointment) from EWS
Dim guid As String = GetGuidForAppointment(appointment)
If String.IsNullOrEmpty(guid) Then
    SetGuidForAppointment(appointment)
    guid = GetGuidForAppointment(appointment)
End If
appointmentGuid.Add(guid)

 'Upsert rows
 ...
Next

'Delete orphaned rows 
Using sqlConnection As New SqlConnection(ConnectionString)
Dim deleteScript As New StringBuilder()
Using sqlCmd As New SqlCommand("SELECT ID FROM Appointments", sqlConnection)
    Using sqlDataReader As SqlDataReader = sqlCmd.ExecuteReader()
        sqlConnection.Open()
        While sqlDataReader.Read()
            Dim guid As String = sqlDataReader.GetString(0)
            If Not appointmentGuid.Contains(guid) Then
                deleteScript.AppendFormat("DELETE FROM Appointments WHERE ID = '{0}'; ", guid)
            End If
        End While
    End Using
End Using
If deleteScript.Length > 0 Then
    Using sqlCmd As New SqlCommand(deleteScript.ToString(), sqlConnection)
        sqlCmd.ExecuteNonQuery()
    End Using
End If
End Using
...