如何修复"你必须指定一个时间。"访问约会对象时Outlook中的COMException?

时间:2018-01-26 14:40:39

标签: c# outlook vsto

在Outlook 2010中,我有一个定期约会,没有实际发生。它是由一些第三方软件创建的。

即。它的PatternStartDate / PatternEndDate,比方说,2018年1月25日,它发生在每个第3周的星期一。因此,没有实际发生的日期。这样的约会可以通过一些日历客户端作为ICS创建,然后用OOM进行复制就好了(尽管不能直接在Outlook UI中创建它)。

现在,在我自己的代码中访问几乎任何此类约会的属性或方法时,我使用&#34获取COMException;您必须指定时间。"信息。唯一可以读取的属性是Subject(但不能设置,只能读取)。

我尝试设置Start,通过调用ClearRecurrencePattern清除重复,但没有任何效果。在调试器的Watch窗口中,我还看到了mapiAppointment对象的所有属性的COMException。

Outlook.AppointmentItem mapiAppointment = (Outlook.AppointmentItem)_mapiItem;
// Tried this
mapiAppointment.Start = some_date; // COMException 
// Or this
mapiAppointment.ClearRecurrencePattern(); // COMException

目前,似乎唯一的办法是完全删除此约会。有没有办法解决它而不删除?

就目前而言,在我看来,就像OOM中的一个错误,它允许创建这样的约会,但下次无法加载它(同时,对于其他无效组合,如.End< .Start它会引发异常早在您尝试设置这些属性时,您就无法将对象保存在不可用状态。)

修改的 我发现Appointment.Delete也不起作用(崩溃有相同的例外)。所以,看起来这个约会永远停留在Outlook中,没有办法修复或删除它。

1 个答案:

答案 0 :(得分:0)

如果使用扩展MAPI创建约会,Outlook将无法执行任何健全性检查。仅当在联机Exchange存储上运行时,才会在MAPI级别上检查约会。

您应该可以使用扩展MAPI(C ++或Delphi)或Redemption(任何语言,它包装扩展MAPI)来修改或删除约会。

您可能还想查看OutlookSpy的错误约会(点击IMessage)并将其与好的约会进行比较。