7

別のカレンダープログラムとの交換に接続するewsアプリケーションを作成しようとしています。何が私に起こったのですか、どのように私が知り合うことができますか、どの予約が交換で削除されるのですか?伝える方法はありますか?私はAPIとドキュメントでそれを見つけることができませんでした。Exchange Webサービスの管理、削除予定の取得

ありがとうございます。

答えて

6

は、ユーザが任命(または任意の項目)を削除する方法に応じて、異なるものが行われています。

  • ソフトの削除:アイテムは、メールボックスのごみ箱に移動します。
  • ハード削除:アイテムが即座に削除されます。

    • クエリFindItems呼び出しを使用してItemViewのトラバーサルプロパティにItemTraversal.Associatedを選択したフォルダ:

    あなたが削除されたアイテムに関する情報を取得する複数の方法があります。注:これにはExchange 2010が必要です。

  • 一度にSyncFolderItemsを使用し、同期クッキーをどこかに保存します。その後、以前に保存したCookieを使用してSyncFolderItemsを再度実行します。 Exchangeは、フォルダに発生した変更の詳細なリストを表示します。
  • ごみ箱に予定を問い合わせます。彼らはおそらく、ユーザーのデフォルトカレンダーから来ている可能性があります。
+0

おかげで、私は本当に – markus

+0

別のオプションは、為替が持っているものにあなたが持っている予定のデータを比較し、EWSには存在しない行を削除することです:-Dが失われました。しかしパフォーマンスはそれにはひどいです。 – Brent

0

私は、EWSカレンダーの予定をSqlテーブルに同期させるサービスを作成しました。

挿入/更新後に削除すると、EWSではなくデータベースに行がある場合、削除されます。これはExchangeで削除されたためです。私はGUIDを使ってデータベースと交換の予定を追跡します。 Exchange web services: why is ItemId not constant? [continued]

パフォーマンスは2,3のアポイントメントでうまくいくので、もっと大きなデータセットで試してみます。答えを

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 
関連する問題