Получение значений, которые пришли в Outlook из Exchange - PullRequest
2 голосов
/ 26 февраля 2010

Я написал надстройку VSTO, которая должна получать информацию о встрече с сервера обмена.

При обмене (Outlook Web Access) я меняю строку темы встречи. Когда я вижу, что Outlook изменил строку темы на новое значение, я пытаюсь получить новое значение программным способом и большую часть времени получает старые значения вместо значений, которые появились в Outlook.

Я пытался обработать событие ItemChange и сохранить элемент с помощью функции .save, но, похоже, это не имеет значения.

Кто-нибудь знает, почему я не могу программно получить значения из встречи Outlook, как только они поступят в Outlook?

Код, который сейчас работает, который очень уродлив и является одним из больших обходных путей, следующий:

Public _idOfAppointmentCurrentlySyncing As New List(Of String)
Public _idOfAppointmentCurrentlySyncingNormal As New List(Of String)

Private Sub appointmentSave(ByVal Item As Object) Handles _m_olAppointment.ItemChange, _m_olAppointment.ItemAdd
    Try
        Dim dateNow As Date = Date.Now
        If TypeOf Item Is Outlook.AppointmentItem Then
            If (dateNow - _lastFolderSwitch).TotalMilliseconds > 3000 Then
                Dim appointmentItem As Outlook.AppointmentItem = CType(Item, Outlook.AppointmentItem)
                Dim lastModifiedDates As Date = commonToolsMethod.getAppointmentDateParameter(appointmentItem, "lastModifiedDates")
                If _idOfAppointmentCurrentlySyncing.Contains(appointmentItem.EntryID) Then
                    Dim outlookLastSyncTime As Date = commonToolsMethod.getAppointmentDateParameter(appointmentItem, "OutlookLastSyncTime")
                    If outlookLastSyncTime <> Date.MaxValue And Date.Compare(lastModifiedDates, outlookLastSyncTime) <> 0 Then
                        commonTools.addPropertyToAppointment(appointmentItem, "lastModifiedDates", outlookLastSyncTime)
                        appointmentItem.Save()
                    Else
                        _idOfAppointmentCurrentlySyncing.Remove(appointmentItem.EntryID)
                    End If
                Else
                    If _idOfAppointmentCurrentlySyncingNormal.Contains(appointmentItem.EntryID) = False Then
                        DebugWriter("Normal Save: " + appointmentItem.Start.ToString)
                        Try
                            If appointmentItem.Body <> "" Then
                                appointmentItem.Body += " "
                            End If
                        Catch ex As Exception
                        End Try
                        _idOfAppointmentCurrentlySyncingNormal.Add(appointmentItem.EntryID)
                        commonTools.addPropertyToAppointment(appointmentItem, "lastModifiedDates", dateNow.ToString)
                        appointmentItem.Save()
                        Marshal.FinalReleaseComObject(appointmentItem)
                        appointmentItem = Nothing
                        GC.Collect()
                    Else
                        _idOfAppointmentCurrentlySyncingNormal.Remove(appointmentItem.EntryID)
                    End If
                End If
            Else
                _lastFolderSwitch = _lastFolderSwitch.AddMilliseconds(100)
            End If
        End If
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

Большое спасибо заранее.

...