VSTO: режим кэширования обмена VS LastModificationTime - PullRequest
0 голосов
/ 18 февраля 2010

Я разрабатываю надстройку VSTO для Outlook, которая использует свойство LastModificationTime Outlook Appointment.Проблема заключается в том, что при включении режима кэширования обмена свойство LastModificationTime автоматически обновляется при каждом закрытии Outlook.Есть ли возможное решение, которое я могу использовать, чтобы получить дату и время, когда пользователь изменил встречу, а не дату и время, когда режим кэшированного обмена изменил встречу?

Учитывая, что не так много ответов я хотелопишите мою проблему более подробно - вот что происходит:

  1. Я изменяю элемент (ненормальное поведение происходит только с элементами, которые я изменил)
  2. LastModificationTime изменяется на времякогда я сохранил элемент (я вижу изменения с помощью OutlookSpy).(например, LastModificationTime 3:30:00 PM)
  3. Я работаю до 16:00:00 и проверяю LastModificationTime, и он все еще показывает 15:30:00
  4. Я закрываю прогноз
  5. Я открываю outlook и проверяю LastModificationTime.Теперь LastModificationTime показывает 3:30:42 вместо 3:30:00.Почему это добавило дополнительные 42 секунды после того, как я снова открыл Outlook?

Спасибо за любые предложения, которые вы можете мне дать.

1 Ответ

1 голос
/ 23 февраля 2010

Мне удалось найти два обходных пути для моей проблемы, # 1 для меня неприемлемо, а # 2 я фактически использовал:

Решение № 1: Используйте записи реестра, чтобы отключить сервер Exchange при завершении работы надстройки и повторно включить его при запуске надстройки. Ниже приведен пример кода:

    Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
    Try
        Dim regTopKey As String = "HKEY_CURRENT_USER"
        Dim regPath As String = "\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\13dbb0c8aa05101a9bb000aa002fc45a"
        Dim oldValue As Byte() = Registry.GetValue(regTopKey & regPath, "00036601_Backup", Nothing)
        If oldValue IsNot Nothing Then
            Registry.SetValue(regTopKey & regPath, "00036601", oldValue, RegistryValueKind.Binary)
        End If
    Catch
    End Try
End Sub

Private Sub ThisAddIn_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown
    Try
        Dim disableExchangeMode As Byte() = {4, 0, 0, 0}
        Dim regTopKey As String = "HKEY_CURRENT_USER"
        Dim regPath As String = "\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\13dbb0c8aa05101a9bb000aa002fc45a"
        Dim currentValue As Byte() = Registry.GetValue(regTopKey & regPath, "00036601", Nothing)
        If currentValue IsNot Nothing Then
            Registry.SetValue(regTopKey & regPath, "00036601_Backup", currentValue, RegistryValueKind.Binary)
        End If
        Registry.SetValue(regTopKey & regPath, "00036601", disableExchangeMode, RegistryValueKind.Binary)
    Catch
    End Try
End Sub

Решение № 2: Определите, когда пользователь меняет элемент встречи, и сохраните изменение в пользовательском поле свойств. Ниже приведен пример кода:

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 > 500 Then
                _lastFolderSwitch = dateNow
                Dim appointmentItem As Outlook.AppointmentItem = CType(Item, Outlook.AppointmentItem)
                If (dateNow - appointmentItem.LastModificationTime).TotalMilliseconds < 100 Then
                    Dim lastModifiedDate As Outlook.UserProperty = appointmentItem.UserProperties.Add("lastModifiedDate", Microsoft.Office.Interop.Outlook.OlUserPropertyType.olText, True)
                    lastModifiedDate.Value = dateNow.ToString
                    appointmentItem.Save()
                End If
            End If
        End If
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

Спасибо всем, кто помог

...