2010-03-07 146 views
5

我有一个用Delphi编写的应用程序,用于在Outlook中添加/更新联系人。我遇到的问题是,如果联系人在Outlook中被删除,代码仍会找到联系人并更新它 - 并且联系人仍然会被删除。有没有办法可以确定联系人是否被删除或取消删除联系人?在Outlook中取消删除联系人

大致代码看起来是这样的:

OutlookApp := CreateOleObject('Outlook.Application'); 
    Mapi := OutlookApp.GetNameSpace('MAPI'); 

//..... 
     try 
      if ContactOutlookEntryID.AsString <> '' then 
      aContact := Mapi.GetItemFromID(ContactOutlookEntryID.AsString); 
     except 
     end; 
      //try to locate the contact if they have been synchro'd before 
     if VarIsEmpty(aContact) then //if not found 
      aContact := Contacts.Items.Add(2); //add a new contact to outlook 
     aContact.LastName := ContactSurname.AsString; 
//..... 

回答

3

当联系人删除它们放在删除邮件文件夹。除了在该文件夹中没有其他“已删除”状态。 “Undeleting”就像将它移回原处一样简单。

ContactItem对象上有一个Move方法,您可以使用该方法将其移回默认联系人文件夹,您可以使用NameSpace.GetDefaultFolder方法获取该文件夹。

编辑 要确定接触是在删除邮件文件夹,你可以看看Parent属性应该返回MAPIFolder对象。然后,您可以将其EntryID与由GetDefaultFolder(olFolderDeletedItems)返回的一个进行比较。

+0

如果接触是从删除的项目去掉,我仍然有同样的问题,但它让我走了一半 - 我我会看看是否可以确定如何确定联系人是否已删除项目 - 如果他们是我将他们移回到默认联系人文件夹。 – Alister 2010-03-08 00:08:19

+0

如果真的从删除的项目文件夹中删除了联系人,我想不出从Outlook API获取它的任何可能的方法。也许它被以某种方式缓存。 – Josh 2010-03-08 00:09:53

+0

我更新了我的答案,提示确定项目是否在“已删除邮件”文件夹中。 – Josh 2010-03-08 00:12:32

1

请记住,这是PST特定的 - 当项目移动到不同的文件夹时,PST提供程序不会更改条目ID。

梅德Streblechenko(MVP) http://www.dimastr.com/ OutlookSpy - 展望,CDO 和MAPI开发工具