我正在使用ContactItem
从代码创建Microsoft.Office.Interop.Outlook
。这绝对没问题。如果我指定了属性Birthday
,则会自动创建相应的AppointmentItem
。这也没关系。
但现在当我删除ContactItem
时,AppointmentItem
仍然存在。这显然不是我想要的。
localContactToDelete.Delete();
有没有办法检索关联的AppointmentItem
以便手动删除它?
我读到它应该是可能的(见下文),但我找不到这些或其他什么。
答案 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);