查找ContactItem的Outlook AppointmentItem

时间:2014-05-28 11:15:43

标签: c# outlook office-interop outlook-2010

我正在使用ContactItem从代码创建Microsoft.Office.Interop.Outlook。这绝对没问题。如果我指定了属性Birthday,则会自动创建相应的AppointmentItem。这也没关系。

但现在当我删除ContactItem时,AppointmentItem仍然存在。这显然不是我想要的。

localContactToDelete.Delete();

有没有办法检索关联的AppointmentItem以便手动删除它?

我读到它应该是可能的(见下文),但我找不到这些或其他什么。

http://social.msdn.microsoft.com/Forums/office/en-US/6b481f74-8422-46d4-90a9-a5860dcb98b5/to-avoid-automatic-birthday-calendar-event-creation-when-creating-contact?forum=outlookdev

2 个答案:

答案 0 :(得分:2)

“我找不到这些或其他什么”?你在哪里看?查看使用OutlookSpy设置的生日/周年纪念属性的联系人(单击IMessage) - 生日约会的条目ID存储在DASL名称为http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/804D0102的命名属性中。周年纪念日,请使用http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/804E0102

答案 1 :(得分:0)

感谢Dmitry提示使用OutlookSpy来识别所需属性的NameSchema,我想出了以下代码。它绝对没有准备好,但至少目前是有效的。欢迎任何建议。

Microsoft.Office.Interop.Outlook.Application outlookObject = new Microsoft.Office.Interop.Outlook.Application();

MAPIFolder contactFolder = outlookObject.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
Items contacts = contactFolder.Items;

然后选择联系人的东西,例如一个foreach。

ContactItem contact;

PropertyAccessor pa = contact.PropertyAccessor;
Byte[] ba = pa.GetProperty("http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/804D0102");
string birthdayAppointmentItemID = BitConverter.ToString(ba).Replace("-", string.Empty);

NameSpace ns = outlookObject.GetNamespace("MAPI");
AppointmentItem birthdayAppointmentItem = ns.GetItemFromID(birthdayAppointmentItemID);