如何通过Outlook互操作访问已删除的定期约会事件

时间:2015-02-16 01:00:29

标签: c# outlook outlook-addin

您好我有一段C#代码可以访问Outlook约会重复发生模式中的异常约会。我意识到,当代码尝试访问AppointmentItem对象的Exception属性时,如果Exception.Deletedtrue,则会有一个COM异常说“您更改了此项目的一次重复,此实例不再存在。关闭所有打开的项目,然后重试。

我在代码中获得的主AppointmentItem对象直接来自Folder.Items.ItemChange事件,这是代码的摘录:

private static void OnAppointmentChanged(AppointmentItem appointment)
{
    if(appointment.IsRecurring)
    {
        var pattern = outlookAppointment.GetRecurrencePattern();
        foreach (Exception e in pattern.Exceptions)
        {
            // This will throw the exception if e.Deleted == true.
            var occurence = e.AppointmentItem;
        }
    }
}

虽然这个问题已经discussed here in the Visual Studio forum,但标记的解决方案并不是真正的解决方案,因为我的Outlook 2013是比解决方案中提到的更高版本(15.0.4693.1001 32位)。

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

Exception类的Deleted属性返回一个布尔值,指示是否从重复模式中删除了AppointmentItem。它可能不再存在于日历上。

您可以处理在删除项目(父对象的实例)之前触发的AppointnentItem类的BeforeDelete事件。 Appointment项的实例作为参数传递。您也可以取消将取消参数设置为true的操作。

最有可能有一个更适合您需求的解决方案。为什么需要访问不存在的项目?