我即将编写一个 ews-application 以将交换与另一个日历程序连接起来。我发生了什么事,我怎么知道,哪些约会在交换时被删除?有没有办法告诉?我在 API 和文档中找不到它。
提前致谢。
我即将编写一个 ews-application 以将交换与另一个日历程序连接起来。我发生了什么事,我怎么知道,哪些约会在交换时被删除?有没有办法告诉?我在 API 和文档中找不到它。
提前致谢。
根据用户删除约会(或任何项目)的方式,会做不同的事情:
您可以通过多种方式获取有关已删除项目的信息:
我编写了一个将 EWS 日历约会同步到 Sql 表的服务。
对于插入/更新更改后的删除,如果数据库中有一行而不是 EWS,我将删除它,因为这意味着它已在 Exchange 中删除。我使用 GUID 来跟踪数据库和交换中的约会。Exchange Web 服务:为什么 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