別のカレンダープログラムとの交換に接続するewsアプリケーションを作成しようとしています。何が私に起こったのですか、どのように私が知り合うことができますか、どの予約が交換で削除されるのですか?伝える方法はありますか?私はAPIとドキュメントでそれを見つけることができませんでした。Exchange Webサービスの管理、削除予定の取得
ありがとうございます。
別のカレンダープログラムとの交換に接続するewsアプリケーションを作成しようとしています。何が私に起こったのですか、どのように私が知り合うことができますか、どの予約が交換で削除されるのですか?伝える方法はありますか?私はAPIとドキュメントでそれを見つけることができませんでした。Exchange Webサービスの管理、削除予定の取得
ありがとうございます。
は、ユーザが任命(または任意の項目)を削除する方法に応じて、異なるものが行われています。
あなたが削除されたアイテムに関する情報を取得する複数の方法があります。注:これにはExchange 2010が必要です。
私は、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
おかげで、私は本当に – markus
別のオプションは、為替が持っているものにあなたが持っている予定のデータを比較し、EWSには存在しない行を削除することです:-Dが失われました。しかしパフォーマンスはそれにはひどいです。 – Brent