7

다른 캘린더 프로그램과 교환을 연결하기 위해 ews-application을 작성하려고합니다. 나에게 무슨 일이 일어 났는지, 어떻게 알면 알 수 있습니까? 어떤 약속은 교환으로 삭제됩니까? 알 수있는 방법이 있습니까? API 및 설명서에서 찾을 수 없습니다.Exchange 웹 서비스 관리 됨, 삭제 된 약속 가져 오기

미리 감사드립니다.

답변

6

는 사용자가 약속 (또는 항목)을 삭제하는 방법에 따라 여러 가지가 완료 :

  • 소프트 삭제 : 항목은 사서함의 휴지통으로 이동됩니다.
  • 하드 삭제 : 항목이 즉시 제거됩니다.

    • 를 쿼리 FindItems 호출을 사용하고 ItemView의 순회 속성에 ItemTraversal.Associated을 선택한 폴더 :

    당신은 삭제 된 항목에 대한 정보를 얻을 수있는 여러 가지 방법이있다. 참고 : Exchange 2010이 필요합니다.

  • 한 번에 SyncFolderItems를 사용하고 동기화 쿠키를 어딘가에 저장하십시오. 나중에 이전에 저장된 쿠키를 사용하여 SyncFolderItems를 다시 실행합니다. 이제 Exchange에서 폴더에 발생한 변경 사항의 세부 목록을 제공합니다.
  • 약속을 위해 휴지통에 쿼리하십시오. 그들은 대부분 사용자의 기본 달력에서 왔을 것입니다.
+0

덕분에, 난 정말 – markus

+0

또 다른 옵션은 교환이 무엇을 당신이 약속 데이터를 비교하고 EWS에 존재하지 않는 행을 삭제하는 것입니다 - D가 끊어졌습니다. 성능은 끔찍합니다. – Brent

0

나는 EWS Calendar Appointments를 Sql 테이블에 동기화하는 서비스를 작성했습니다.

삽입/업데이트 후 삭제의 경우 EWS가 아닌 데이터베이스에 행이 있으면 Exchange에서 삭제되므로 삭제하게됩니다. GUID를 사용하여 데이터베이스 및 교환에서 약속을 추적합니다. Exchange web services: why is ItemId not constant? [continued]

성능이 몇십 개 약속만으로도 괜찮 았는데, 나는 훨씬 더 큰 데이터 세트에서 시도 할 것이다. 답에 대한

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 
관련 문제