2010-02-18 5 views
0

Je développe un complément Outlook VSTO qui repose sur la propriété LastModificationTime d'Outlook Appointment. Le problème est lorsque le mode d'échange mis en cache est activé, la propriété LastModificationTime se met automatiquement à jour chaque fois que je ferme Outlook. Y at-il une solution possible que je peux utiliser pour obtenir la date et l'heure lorsque l'utilisateur a changé le rendez-vous, au lieu de la date et l'heure lorsque le mode d'échange mis en cache a changé le rendez-vous?VSTO: mode d'échange mis en cache VS LastModificationTime

Voyant qu'il n'y a pas beaucoup de réponses que je voulais décrire mon problème plus en détail - ce qui arrive:

  1. je change un élément (le comportement anormal se produit uniquement aux éléments que j'ai changé
  2. LastModificationTime est remplacé par le moment où j'ai enregistré l'élément (je vois le changement avec OutlookSpy). (Par exemple. LastModificationTime 3:30:00 PM)
  3. Je travaille jusqu'à 4:00:00 h et vérifier la LastModificationTime et il montre encore 15:30:00
  4. Je fermer perspectives
  5. J'ouvre des perspectives et vérifiez LastModificationTime. Maintenant, LastModificationTime affiche 3:30:42 au lieu de 3:30:00. Pourquoi a-t-il ajouté 42 secondes supplémentaires après la réouverture de l'Outlook?

Merci pour toutes les suggestions que vous pouvez me donner.

+0

MMB je n'obtenir ce ... avez-vous quoi que ce soit en cours d'exécution dans les autres perspectives. – 76mel

+0

76mel, je ne comprends pas non plus, c'est pourquoi je pose la question. J'ai encore quelques addIn fonctionnant dans Outlook et j'ai essayé de les désactiver tous, mais cela n'a rien changé. –

+0

J'ai ajouté plus d'explications concernant la nature de mon problème dans la description en haut. –

Répondre

1

j'ai pu trouver deux solutions de contournement pour mon problème, # 1 étant inacceptable pour moi et # 2 En fait, j'utilisé:

Solution # 1: Utilisez les entrées de registre pour désactiver le serveur d'échange sur complément d'arrêt et re -Activez-le lors du démarrage du complément. Ci-dessous un exemple de code:

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 

Solution # 2: lorsque l'utilisateur change Détecte un élément de rendez-vous et enregistrez le changement dans le domaine de la propriété définie par l'utilisateur. Ci-dessous un exemple de code:

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 

Merci à tous qui a aidé

Questions connexes