我发现在修改或删除定期事件发生后,并不总是更新RecurrencePattern.Exceptions对象(至少是Outlook 2010中的Count属性)的情况;有时是,但更多时候不是。此时我不确定RecurrencePattern.Exceptions.Count是否是唯一未更新的属性,或者它是否是整个Exceptions集合。
当我重新启动Outlook和我的加载项时,会反映之前会话的所有更改...但后续更改有时只会显示。
这是Outlook中的已知错误,如果只是在Outlook 2010中?有没有解决方法?这适用于对SQL联系人/日历数据库进行实时更新的加载项。
答案 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。