7

Tôi sắp viết một ứng dụng ews để kết nối trao đổi với một chương trình lịch khác. Điều gì đã xảy ra với tôi, làm cách nào để tôi biết, cuộc hẹn nào bị xóa khi trao đổi? Có cách nào để nói không? Tôi không thể tìm thấy nó trong API và tài liệu.Exchange Web Service được quản lý, nhận các cuộc hẹn đã xóa

Xin cảm ơn trước.

Trả lời

6

Tùy thuộc vào cách người dùng xóa một cuộc hẹn (hoặc bất kỳ mục), mọi thứ khác nhau được thực hiện:

  • mềm-Delete: Các mục được chuyển vào thùng rác của hộp thư.
  • Xóa khó: Mục bị xóa ngay lập tức.

Bạn có nhiều cách để có được thông tin về các mục đã xóa:

  • Query thư mục bằng một cuộc gọi FindItems và chọn ItemTraversal.Associated trong tài sản Traversal của ItemView. Lưu ý: Điều này yêu cầu Exchange 2010.
  • Sử dụng SyncFolderItems cùng một lúc và lưu trữ cookie đồng bộ hóa ở đâu đó. Sau đó, thực hiện lại SyncFolderItems bằng cookie đã lưu trước đó. Exchange sẽ cung cấp cho bạn một danh sách chi tiết các thay đổi đã xảy ra với thư mục.
  • Truy vấn thùng rác cho các cuộc hẹn. Họ rất có thể sẽ đến từ lịch mặc định của người dùng.
+0

Cảm ơn câu trả lời, tôi đã thực sự bị mất ở đó: -D – markus

+0

Một tùy chọn khác là so sánh dữ liệu cuộc hẹn bạn có và trao đổi hàng không tồn tại trong EWS. Hiệu suất là khủng khiếp cho rằng mặc dù. – Brent

0

Tôi đã viết một dịch vụ đồng bộ các cuộc hẹn lịch EWS với bảng Sql.

Để xóa sau khi chèn/cập nhật thay đổi nếu có hàng trong cơ sở dữ liệu và không phải trong EWS tôi sẽ xóa nó, điều này có nghĩa là nó đã bị xóa trong Exchange. Tôi sử dụng GUID để theo dõi cuộc hẹn trong cơ sở dữ liệu và trao đổi. Exchange web services: why is ItemId not constant? [continued]

Hiệu suất là phong nha chỉ với vài chục cuộc hẹn, tôi sẽ thử nó trên tập dữ liệu lớn hơn nhiều.

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 
Các vấn đề liên quan