7

Estoy a punto de escribir una aplicación electrónica para conectar el intercambio con otro programa de calendario. ¿Qué ocurrió conmigo? ¿Cómo puedo saber qué citas se eliminan en el intercambio? ¿Se puede decir de alguna manera? No pude encontrarlo en la API y la documentación.Servicio web de Exchange administrado, obtenga citas eliminadas

Gracias de antemano.

Respuesta

6

Dependiendo de cómo un usuario elimina una cita (o cualquier artículo), las cosas se hacen diferentes:

  • Soft-Delete: El elemento se mueve a la papelera de reciclaje del buzón.
  • Hard-Delete: el elemento se elimina instantáneamente.

tiene varias maneras de obtener información sobre los elementos eliminados:

  • la carpeta de consulta utilizando una llamada FindItems y seleccione ItemTraversal.Associated en la propiedad de recorrido de la ItemView. Nota: Esto requiere Exchange 2010.
  • Use SyncFolderItems a la vez y almacene la cookie de sincronización en algún lugar. Más tarde, ejecute SyncFolderItems nuevamente utilizando la cookie almacenada anteriormente. Exchange ahora le dará una lista detallada de los cambios que le ocurrieron a la carpeta.
  • Consulta la papelera de reciclaje para las citas. Lo más probable es que hayan venido del calendario predeterminado del usuario.
+0

Gracias por la respuesta, yo estaba realmente perdieron allí :-D – markus

+0

Otra opción es comparar los datos cita que tiene sobre lo que ha de cambio y eliminar filas que no existen en el sistema de alerta temprana. Sin embargo, el rendimiento es horrible por eso. – Brent

0

Escribí un servicio que sincroniza las citas de calendario EWS con una tabla Sql.

Para eliminar después de Insertar/Actualizar cambios si hay una fila en la base de datos y no en EWS, la eliminaré, ya que esto significa que fue eliminada en Exchange. Uso GUID para rastrear la cita en la base de datos y el intercambio. Exchange web services: why is ItemId not constant? [continued]

El rendimiento es aceptable, con tan solo un par de docenas de citas, lo probaré en un conjunto de datos mucho más grande.

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 
Cuestiones relacionadas