Outlook RecurrencePattern.Exceptions.Count在更改或删除事件后未更新

时间:2015-07-08 16:26:34

标签: outlook add-in

我发现在修改或删除定期事件发生后,并不总是更新RecurrencePattern.Exceptions对象(至少是Outlook 2010中的Count属性)的情况;有时是,但更多时候不是。此时我不确定RecurrencePattern.Exceptions.Count是否是唯一未更新的属性,或者它是否是整个Exceptions集合。

当我重新启动Outlook和我的加载项时,会反映之前会话的所有更改...但后续更改有时只会显示。

这是Outlook中的已知错误,如果只是在Outlook 2010中?有没有解决方法?这适用于对SQL联系人/日历数据库进行实时更新的加载项。

2 个答案:

答案 0 :(得分:1)

正如尤金所说,你需要完全取消引用约会项目。即便如此,Outlook确实喜欢缓存上次访问的约会,并且您需要打开Outlook的另一个约会以释放上一个约会。

您是否看到数据在低级别(MAPI)上更新?使用OutlookSpy,选择约会,然后单击OutlookSpy功能区上的IMessage按钮;看一下AppointmentRecur命名属性。 OutlookSpy是否显示正确的异常计数?

<强>更新

如果Redemption是一个选项,您可以尝试使用其RDOAppointmentItem对象(下面的Item变量可以指向您的约会)。 如果您想避免陈旧数据,请将GetRDObjectFromOutlookObject替换为GetMessageFromID。

  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  set Item = Session.GetMessageFromID(Application.ActiveExplorer.Selection(1).EntryID)
  set RdoItem = Session.GetRDOObjectFromOutlookObject(Item)
  set RecurPattern = RdoItem.GetRecurrencePattern
  MsgBox RecurPattern.Exceptions.Count

答案 1 :(得分:0)

以下是MSDN所述的内容:

当您使用定期约会项目时,您应该释放任何先前的引用,在访问或修改项目之前获取对定期约会项目的新引用,并在完成并保存更改后立即释放这些引用。此实践适用于重复出现的AppointmentItem对象,以及任何Exception或RecurrencePattern对象。若要在Visual Basic for Applications(VBA)或Visual Basic中释放引用,请将该现有对象设置为Nothing。在C#中,显式释放该对象的内存。

请注意,即使在您发布引用并尝试获取新引用之后,如果仍存在由其他加载项或Outlook保存的活动引用,则上述对象之一仍然存在,您的新引用仍将指向对象的过时副本。因此,请务必在完成定期约会后立即发布参考文献。

在C#中使用System.Runtime.InteropServices.Marshal.ReleaseComObject在完成使用后释放Outlook对象。然后在Visual Basic中将变量设置为Nothing(C#中为null)以释放对该对象的引用。有关详细信息,请参阅Systematically Releasing Objects